Linux 虚拟串口及 Qt 串口通信实例是本文所要介绍的内容,在实现过程中,打开了两个伪终端,然后读两个口子的数据,如果是从1号口来的,就往2号口写入数据,从2号口来的就写到1号口。

Linux下的虚拟终端

由于手上没有可以测试的串口设备,因此发了点时间找了一个Linux下的虚拟串口工具:http://fayaa.com/code/view/8500/,这个工具打开了两个伪终端,然后读两个口子的数据,如果是从1号口来的,就往2号口写入数据,从2号口来的就写到1号口。

经过我的修改后变成了这个样子:

  1. #!/usr/bin/envpython
  2. #coding=utf-8
  3. importpty
  4. importos
  5. importselect
  6. defmkpty():
  7. #
  8. master1,slave=pty.openpty()
  9. slaveName1=os.ttyname(slave)
  10. master2,slave=pty.openpty()
  11. slaveName2=os.ttyname(slave)
  12. print'\nslavedevicenames:',slaveName1,slaveName2
  13. returnmaster1,master2
  14. if__name__=="__main__":
  15. master1,master2=mkpty()
  16. whileTrue:
  17. rl,wl,el=select.select([master1,master2],[],[],1)
  18. formasterinrl:
  19. data=os.read(master,128)
  20. ifmaster==master1:
  21. print"read%ddata:"%len(data)
  22. printdata
  23. #os.write(master2,data)
  24. else:
  25. print"towrite%ddata:"%len(data)
  26. printdata.strip()
  27. os.write(master1,data.strip())

改变后 我们让1号口为读入口(串口设备读入数据的口子),2号口为写出口(串口向外面写数据),将其保存为com.py

  1. #pythoncom.py
  2. slavedevicenames:/dev/pts/1/dev/pts/2

意思是pts/1为1号口 pts/2为2号口

另建一个终端 #cd /dev/pts/

  1. #echo456>2

就会向2号口写数据,如果我们没有其他程序读串口的数据的话,那么就会出现4行数:

  1. towrite5data:
  2. 456
  3. read3data:
  4. 456

那么我们只要用程序读/dev/pts/1就可以模拟串口通信了

Qt下的串口通讯

Qt没有自带串口模块,只有第三方库 http://wenku.baidu.com/view/55849f4ffe4733687e21aa99.html,这篇文章介绍了简单的Qt串口通信

学着他的例子也做了一个程序,核心代码:

  1. MainWindow::MainWindow(QWidget*parent):
  2. QMainWindow(parent),
  3. ui(newUi::MainWindow)
  4. {
  5. ui->setupUi(this);
  6. com=newQextSerialPort("/dev/pts/1",QextSerialPort::Polling);
  7. com->open(QextSerialPort::ReadWrite);
  8. com->setBaudRate(BAUD9600);
  9. com->setDataBits(DATA_8);
  10. com->setParity(PAR_NONE);
  11. com->setStopBits(STOP_1);
  12. com->setFlowControl(FLOW_OFF);
  13. com->setTimeout(10);
  14. QTimer*timer=newQTimer(this);
  15. connect(timer,SIGNAL(timeout()),this,SLOT(readCOM()));
  16. timer->start(20);
  17. }
  18. voidMainWindow::readCOM()
  19. {
  20. if(com->bytesAvailable()>1)
  21. ui->showText->insertPlainText(com->readAll());
  22. }
  23. voidMainWindow::on_btnSend_clicked()
  24. {
  25. com->write(ui->edit->text().toAscii().data());
  26. }

运行结果:Qt串口写数据

收到数据:

Linux 虚拟串口及 Qt 串口通信实例(linux qt 串口编程)  串口 第1张

串口Qt写数据(下面那个终端控制)

Linux 虚拟串口及 Qt 串口通信实例(linux qt 串口编程)  串口 第2张

注意:1号口和2号口的方向问题很难分清楚,暂时这样理解了没必要深究 windows下的虚拟串口工具为VSPM,是Telnet管理的,建议先研究这个。

小结:Linux 虚拟串口 Qt 串口通信实例的内容介绍完了,希望本文对你 有所帮助!

转载请说明出处
知优网 » Linux 虚拟串口及 Qt 串口通信实例(linux qt 串口编程)

发表评论

您需要后才能发表评论