plc 232 串口通信,发送完读取命令后,只回复了1或2个字节?
最近在写一款PLC的通信协议,我给它发送读取地址 0x0000 后 1 个字节的命令后(PLC中地址 0x0000 存在,且发送成功,且发送的数据正确),它按道理应该给我发送 12 字节(包括 ACK ,站号,错误码,等等)。
但是我测试多次,它只给我回复了 1 或 2 个字节的数据,当我下次再发送相同的读取指令后,它才把后面的 11 或 10 个字节的数据给我。
随后我用串口调试工具,仅一次发送,就收到了全部的 12 个字节,并没有出错。所以当时就在想是不是代码在 read_n 的封装上出了问题,接着我在里边加了调试,发送它在收到那 1 或 2 个字节后,接下去的 read 直接返回 0,errno 被置为 110(Connection timed out).
ssize_t ha_read_n(int fd, void *buf, size_t count)
{
size_t nleft = count;
ssize_t nread;
char *bufp = (char*) buf;
while (nleft > 0)
{
if ((nread = read(fd, bufp, nleft)) < 0)
{
if (errno == EINTR)
{
//printf("read_n: nread = %d, errno = EINTR(%d)\n", (int)nread, errno);
continue;
}
return -1;
}
else if (nread == 0)
{
//printf("read_n: nread = 0, errno = %d\n", errno);
// 每次都在这个地方就退出了, errno == 110
return count - nleft;
}
bufp += nread;
nleft -= nread;
}
return count;
}
有人遇到这种情况,或者我的代码有哪些纰漏么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论