基于Qt5的MODBUS协议编程与实现

基于Qt5的MODBUS协议编程与实现

ID:40113217

大小:17.47 KB

页数:6页

时间:2019-07-21

基于Qt5的MODBUS协议编程与实现_第1页
基于Qt5的MODBUS协议编程与实现_第2页
基于Qt5的MODBUS协议编程与实现_第3页
基于Qt5的MODBUS协议编程与实现_第4页
基于Qt5的MODBUS协议编程与实现_第5页
资源描述:

《基于Qt5的MODBUS协议编程与实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、基于Qt5的MODBUS协议编程与实现  摘要:上位机软件编写在嵌入式系统开发中是很重要的一环,一直得到嵌入式工程师的广泛关注。文中介绍了采用最新Qt5库的串口模块解码MODBUS数据包的实现方案,详细阐述了Qt5的串口编程接口,和用有限状态机进行数据解码的实现方法,实践证明该方法编程简单、工作稳定可靠。  关键词:QT;串口通信;有限状态机;MODBUS  中图分类号:TP311.11文献标识码:A文章编号:1673-1069(2016)11-138-2  0引言  在“智能电子线路故障诊断实训装置”研制过程中,需要开发一款上位机控制软件,在一般的嵌入式

2、应用开发中,也总是会遇到各种上位机软件编写的任务,上位机软件编写的核心任务之一是串口通信。传统的上位机软件开发工具是VB6、VC++一类工具,但VB6过于陈旧不能较好支持微软新的操作系统,VC++又因为MFC的复杂而很难被嵌入式开发工程师掌握。因此本文将介绍采用Qt5的串口编程方法,既能轻松掌握,又功能强大。  1Qt5的串口通信  Qt是一个跨平台的C++和GUI开发框架,是一个模块化的C++类库,与VisualC++使用的MFC类库相比,Qt简单方便、功能完善、跨平台、扩展能力强,可以用于嵌入式开发。使用Qt编程的核心优势在于优美的信号槽机制和强大易用

3、的开发工具QtCreator。Qt目前最新版本为Qt5。Qt5中用于串口通信编程的模块是类QSerialPort和类QSerialPortInfo。  1.1串口的枚举  调用静态方法QSerialPortInfo::availablePorts()可以枚举系统中所有的串口,得到系统中可用串口的QSerialPortInfo对象列表,通过QSerialPortInfo类可以获取串口的有关信息,常用的有方法isBusy()可用于判断串口是否处于忙碌状态,方法portName()可用于获取串口的名称,也可将QSerialPortInfo对象作为输入参数调用QS

4、erialPort对象的setPort()或setPortName()方法,设置想要操作的串口设备。  1.2串口的初始设置  与在嵌入式设备上的串口开发一致,上位机中串口通信的第一步也是选择串口并对通信参数进行设置。Qt5中,用QSerialPort对象来抽象串口端口,封装串口有关的操作。构造一个QSerialPort对象后,通过setPort()或setPortName()方法选择想要操作的串口设备,然后使用open()方法打开该端口,当打开成功后,QSerialPort会尝试检测串口的当前配置,并用作为自己的初始设置,也可使用setBaudRate(

5、),setDataBits(),setParity(),setStopBits(),andsetFlowControl()方法来重新设置波特率、数据帧格式、流控模式等通信参数。将串口设置为19200波特率、8N1数据帧。  1.3串口数据的读写  串口通信的核心在于数据的收发,借助于强大的QSerialPort类,只需要使用简单的read()或write()方法,就可以读和写串口了。也可使用readLine()、readAll()读取串口接收到的数据,如果没有一次性读取完所有收到的数据,剩余的数据会存放在QSerialPort的内部数据缓存区中,新接收到的

6、数据会附加到数据缓冲区的尾部。可以使用setReadBufferSize()方法限制内部读缓冲区的大小。串口数据读取的另一个关键是读取的时机的选择,这通常有两种选择,一是用一个循环不断的读取串口直到接收到所有需要的数据,但这会阻塞掉其他任务,一般只用于非GUI的应用;另一种选择是使用Qt强大的信号槽机制,连接QSerialPort的readyRead()信号到自己的串口数据读取槽函数,这样串口一旦接收到数据,槽函数就会被调用,在这里可以编写串口接收数据的处理代码,可以在该函数中,将收到的数据存入一个数据队列,方便后续对数据的解包操作,可参考如下代码。  v

7、oidserialRead()  {  QByteArraybytes;  while(!serial->atEnd()){  bytes+=serial->read(300);  }  for(inti=0;i

8、经得到广泛的运用,下文就简要介绍一下MODBUS协议在Qt串口通信

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。