请问QT中如何实现MODBUS RTU通信协议

macangyetdl 2010-04-08 08:51:27
最近想用QT编写一个MODBUS协议,用它的RTU格式,请问高手们如何实现?
...全文
2098 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gateslu 2011-06-11
  • 打赏
  • 举报
回复
楼上大侠,为什么我在重载writedata的时候不行呢?一直提示上一级的无法创建对象。。
livezingy 2010-04-12
  • 打赏
  • 举报
回复 1
哦,还有一点忘记说了。

MODBUS RTU通讯时,其通讯数据是unsigned char,但posix_qextserialport(win_qextserialport)中的writeData函数只支持char,所以你要手动在类posix_qextserialport(win_qextserialport)中重载一下函数writeData.函数原本是这样的virtual qint64 writeData(const char *data, qint64 maxSize),你只要把它改成 virtual qint64 writeData(unsigned char *data, qint64 maxSize);函数的内容不用改。
livezingy 2010-04-12
  • 打赏
  • 举报
回复
楼主的意思是说在你的程序中实现MODBUS RTU的通讯吗?

如果是,那么你可以这么做:
1. 下载qextserialport源码(搜一下,资源到处都是)。
2. 如果是linux下的工程,将该压缩包中的posix_qextserialport,qextserialbase的.cpp以及.h文件加入到工程中,然后在工程中定义一个posix_qextserialport变量(假设变量名为RS232),即可对串口进行操作。
3. 若是在windows下,则将win_qextserialport,qextserialbase的.cpp以及.h文件加入到工程中。
4. 找一个modbus标准协议,将 Modbus CRC的两个表格放在数组中供查询,该表格用于计算CRC校验值。一般 modbus协议规范中会附CRC的计算方法。
5. 在通讯数据组织好后,计算其CRC校验值,放在组织好的通讯数据(假设通讯数据存放在TxData中)的最后,然后RS232->writeData(TxData,Count)。其中writeData是qextserialport定义的函数,Count是要写入的数据量。


huliang66 2010-04-08
  • 打赏
  • 举报
回复
我也想知道,等待高手吧。

16,174

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧