2011-11-23 122 views
1

我试图通过一个串行端口与一个控制机械门的PLC进行通信,以实现业界的任务。由于对这个主题并不是非常有经验并且很着急,所以我没有意识到存储旧设置并将它们恢复到程序退出的重要性。在更改termios结构中的某些字段后,即使在使用完全相同的端口函数打开后,我也不再能够从端口读取任何内容,而我使用的端口函数与其他端口(ttyD0)完全相同,可以很好地适用于这些设置。任何建议如何我可以恢复ttyD1回到工作状态?在linux中恢复串口

用于打开端口的代码如下:

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

您可以使用'stty'('man stty')来获取/设置终端线路设置。通过这种方式,您可以找出要执行的操作,然后可以使用'strace'来查看如何执行并添加到代码中。 – hochl

回答

0

只需复制你从第一tcgetattr收到的结构,并给它tcsetattr退出。