C++ linux中串口的恢复
我试图通过一个串行端口与一个PLC进行通信,PLC控制一个机械闸门,以完成工业中的一项任务。由于我对这个话题不是很有经验,而且我很匆忙,所以我没有意识到存储旧设置并在程序退出时恢复它们的重要性。更改termios结构中的某些字段后,即使使用了与另一个端口(ttyD0)完全相同的端口打开功能,我也无法再从端口读取任何内容,这对于这些设置来说很好。有什么建议可以让ttyD1恢复到工作状态吗 用于打开端口的代码如下所示:C++ linux中串口的恢复,c++,ubuntu,serial-port,C++,Ubuntu,Serial Port,我试图通过一个串行端口与一个PLC进行通信,PLC控制一个机械闸门,以完成工业中的一项任务。由于我对这个话题不是很有经验,而且我很匆忙,所以我没有意识到存储旧设置并在程序退出时恢复它们的重要性。更改termios结构中的某些字段后,即使使用了与另一个端口(ttyD0)完全相同的端口打开功能,我也无法再从端口读取任何内容,这对于这些设置来说很好。有什么建议可以让ttyD1恢复到工作状态吗 用于打开端口的代码如下所示: int OpenPort() { fd = open("/dev/tty
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;
}
intopenport()
{
fd=打开(“/dev/ttyD0”,O|RDWR | O|NOCTTY);
如果(fd<0)
{
cerr只需复制从第一个tcgetattr
收到的结构,并在退出时将其交给tcsetattr
。您可以使用stty
(manstty
)来获取/设置终端行设置。这样,您可以找到要做的事情,然后可以使用strace
查看如何做并添加到您的代码中。