• 23824阅读
  • 34回复

modbus-RTU串行调试工具 [复制链接]

上一主题 下一主题
离线huzhiwen28
 

只看楼主 倒序阅读 楼主  发表于: 2010-11-16
— 本帖被 XChinux 执行加亮操作(2011-01-06) —
欢迎访问我的博客
嵌入式设备


20120407软件升级
1)T15取消,在实际的modbusRTU通讯中,T15很少使用
2)设计和代码做了简化
3)工程修改,文件名修改

升级心得:
1)串口T15对于跑windows的PC机来说,很难做到,而且实际上很多的modbus对于T15都不关心,只关心帧分段,即T35,而且T35也是毫秒级别的,并不是理论的3.5个波特率时间,最常用的是5ms,例如PLC和变频器做modbus通讯就是如此。
2)之所以采用异步串口API是因为,异步API才支持串口的同时读写
3)采用多媒体定时器是因为要提高windows系统内部的时钟调度频率,否则windows只能做到10ms级别的调度
4)需要修改串口驱动的FIFO属性(减少接收FIFO或者提高其响应到1ms),否则,收到的数据会被系统缓存,导致时间帧分割不准

将来软件计划:
准备使用lua语言,将modbus数据处理逻辑开放给使用者,QT只负责处理驱动和帧分割

  ========================================================================================
新鲜出炉的modbus-RTU 串口调试工具,希望可以给各位带来工作上的方便。

软件特征:
1)modbus-RTU标准实现,不是类似于其他的伪实现
2)CPU占用率很低,最高不超过15%
3)响应速度比较快,这个受限于window系统的中断响应速度,没办法
4)适应性强,可以自由设置t3.5的时间,适应不同的设备
5)实时性能还可以,经和 plc通讯测试,不再出现超时现象。
工程是2003 + qt环境实现的,主要采用了window api的串口事件来读数据。

附件为工程文件

注意,为了提高实时性能,串口的接收FIFO请设置为1
modbusRTU_slave.rar (62 K) 下载次数:424 slave工程
modbusRTU_master.rar (65 K) 下载次数:463 master工程

modbusbin.rar (3225 K) 下载次数:529 执行程序



http://blog.sina.com.cn/tonyhuzhiwen
https://github.com/huzhiwen28/
专注于工业嵌入设备开发
离线huzhiwen28

只看该作者 1楼 发表于: 2010-11-17
看来这个论坛很少有搞工业控制的啦
http://blog.sina.com.cn/tonyhuzhiwen
https://github.com/huzhiwen28/
专注于工业嵌入设备开发
离线bluesealycn
只看该作者 2楼 发表于: 2010-12-01
下载了,谢谢!
离线bluesealycn
只看该作者 3楼 发表于: 2010-12-01
请问LZ有使用说明吗?谢谢!
离线lmw0417
只看该作者 4楼 发表于: 2010-12-16
非常谢谢了!
离线davis45
只看该作者 5楼 发表于: 2010-12-16
一直做解析modbus协议的程序,下载看看,谢谢分享
谢谢大家的指教
离线rzy103874
只看该作者 6楼 发表于: 2011-01-06
我想学习,希望得到版主的支持,
离线yeguoxiong

只看该作者 7楼 发表于: 2011-01-10
不错,值得学习。
离线jackhan2006
只看该作者 8楼 发表于: 2011-01-13
我想学习一下!
离线loopolike

只看该作者 9楼 发表于: 2011-01-27
回 1楼(huzhiwen28) 的帖子
我就是搞工业控制的啊,只不过以前没有用QT而已
离线luckywizard
只看该作者 10楼 发表于: 2011-02-08
我想学习一下!
离线gaohang_tbea
只看该作者 11楼 发表于: 2011-02-10
这个很给力,顶一下
离线huzhiwen28

只看该作者 12楼 发表于: 2011-03-28
很长时间没有上来看看,最近对modbus的应用小有新的,迟点会放一个升级的版本上来。
http://blog.sina.com.cn/tonyhuzhiwen
https://github.com/huzhiwen28/
专注于工业嵌入设备开发
离线huzhiwen28

只看该作者 13楼 发表于: 2011-04-18
新版本,上传了,老版本删除了。
新版本中加入线程优先级,另外实时性也更为好。
新版本依旧是2003+ QT编译。
http://blog.sina.com.cn/tonyhuzhiwen
https://github.com/huzhiwen28/
专注于工业嵌入设备开发
离线yeguoxiong

只看该作者 14楼 发表于: 2011-04-18
之前版丢包率蛮高的。
离线yeguoxiong

只看该作者 15楼 发表于: 2011-04-18
报错率挺高的。
离线yeguoxiong

只看该作者 16楼 发表于: 2011-04-18
建议研究QModbus。
离线huzhiwen28

只看该作者 17楼 发表于: 2011-04-23
新版本应该不会丢包了,注意合理设置 t1.5 和 t3.5,一般将t1.5 设置为3毫秒,t3.5设置为5毫秒肯定不会丢的了
[ 此帖被huzhiwen28在2011-04-23 19:12重新编辑 ]
http://blog.sina.com.cn/tonyhuzhiwen
https://github.com/huzhiwen28/
专注于工业嵌入设备开发
离线yeguoxiong

只看该作者 18楼 发表于: 2011-04-23
不错。很不错。
离线huzhiwen28

只看该作者 19楼 发表于: 2011-04-23
另外,注意将串口的接收FIFO设置为1,可以很好的解决数据实时性问题。
这个是经过和PLC测试,并且在实际产品中使用过的,一个modbus包时间为60-80ms,这个主要是由于modbus的机制决定的,时间帧分隔做不到高速传输。
http://blog.sina.com.cn/tonyhuzhiwen
https://github.com/huzhiwen28/
专注于工业嵌入设备开发
离线huzhiwen28

只看该作者 20楼 发表于: 2011-04-24
看了一下Qmobus的代码,感觉实时性应该会比较差,就window平台来说,其没有用高精度计时器,没有引入多媒体定时器,没有使用线程优先级。没有设置接收FIFO。而这些是modbus真正做产品的关键因素,否则只能是玩具。

而且他的代码是建立在modbus库和QextSerialPort类的基础上,modbus类我不了解,QextSerialPort这个类用在实时性强、数据量大的情况下面还是值得怀疑的,论坛中很多兄弟用过这个不知有没有做个测试,我当前用的时候感觉速度很慢,所以没有用,最后还是自己上系统API就好了。
总的来说,QMobus看起来很好,实际用的感觉如何,我表示怀疑。
http://blog.sina.com.cn/tonyhuzhiwen
https://github.com/huzhiwen28/
专注于工业嵌入设备开发
离线javaboy0531

只看该作者 21楼 发表于: 2011-07-22
支持分享
离线shaoqiaolin

只看该作者 22楼 发表于: 2011-08-08
好啊,正需要呢,看看
离线xiaoyuworld
只看该作者 23楼 发表于: 2011-10-11
很好的代码,顶了
离线juhuacha456
只看该作者 24楼 发表于: 2012-03-11
搞着呢,不过才刚开始搞
离线huzhiwen28

只看该作者 25楼 发表于: 2012-04-07
升级新版本了,搞工业串口的可以看看
http://blog.sina.com.cn/tonyhuzhiwen
https://github.com/huzhiwen28/
专注于工业嵌入设备开发
离线wangjtg
只看该作者 26楼 发表于: 2012-05-02
说的反而给他额仍然额天热呀热议
离线ltpgt
只看该作者 27楼 发表于: 2012-10-20
非常感谢
离线ysu533

只看该作者 28楼 发表于: 2012-11-09
回 楼主(huzhiwen28) 的帖子
楼主您好,
      您分享的代码对我非常有帮助, 再调试的时候发现t35 设置小于18000时会把一个完整的帧打成几帧. 这个是怎么造成的, 非常期望得到你的帮助.
离线huzhiwen28

只看该作者 29楼 发表于: 2012-11-13
回 28楼(ysu533) 的帖子
windows是非实时系统,接收和发送都是非确定性的,所以t35不能设的太小,虽好大于5毫秒,另外对于串口的fifo设置最好也改变一下,发送的fifo设置为1,这样发送大数据包的时候就不会缓冲满了再发,而是不停的发送,这样帧就不会打散
http://blog.sina.com.cn/tonyhuzhiwen
https://github.com/huzhiwen28/
专注于工业嵌入设备开发
离线ysu533

只看该作者 30楼 发表于: 2012-11-16
回 29楼(huzhiwen28) 的帖子
很高兴得到楼主的回复. 我现在用的串口读写代码和485通讯部分的都是改自楼主的, 很好用. 我说的帧打断主要出现于接收的时候. 设置fifo是不是调用SetupComm这个设置的? 另外楼主设置 COMMTIMEOUTS 结构怎么都是设的1000?
离线long5337

只看该作者 31楼 发表于: 2013-05-13
多谢楼主分享,学习下!!!
离线hzymlx

只看该作者 32楼 发表于: 2013-05-13
多谢啊
等等等
离线大官人

只看该作者 33楼 发表于: 2021-12-21
哈哈哈
离线大官人

只看该作者 34楼 发表于: 2021-12-21
SDASDSDAF
快速回复
限100 字节
 
上一个 下一个