我试图通过一个串行端口与一个控制机械门的PLC进行通信,以完成行业中的任务。由于对这个主题缺乏经验并且匆忙,我不知道存储旧设置和在程序退出时恢复它们的重要性。在更改了termios结构中的某些字段后,即使使用了我用于其他端口(ttyD0)的端口函数的完全相同的开放,我也无法再从端口读取任何内容。有关如何将ttyD1恢复到工作状态的任何建议吗?
用于打开端口的代码如下:
int OpenPort()
{
fd = open("/dev/ttyD0", O_RDWR | O_NOCTTY);
if (fd < 0)
{
cerr << "open error " << errno << strerror(errno) << endl;
}
else
{
struct termios my_termios;
fcntl(fd, F_SETFL, 0);
tcgetattr(fd, &my_termios);
//bzero(&my_termios, sizeof(my_termios));
tcflush(fd, TCIFLUSH);
my_termios.c_cflag = B115200 | CS8 | CREAD | CLOCAL | HUPCL;
//my_termios.c_lflag = ICANON;
//cfsetospeed(&my_termios, B115200);
tcsetattr(fd, TCSANOW, &my_termios);
}
return fd;
}
答案 0 :(得分:0)
只需复制您从第一个tcgetattr
收到的结构,然后在退出时将其提供给tcsetattr
。