打印

modbus系列 1,16功能码的问题

[复制链接]
3206|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
3htech|  楼主 | 2013-12-18 21:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
3htech|  楼主 | 2013-12-19 09:53 | 只看该作者
已经沉下去了……

使用特权

评论回复
板凳
受不了了| | 2013-12-19 12:29 | 只看该作者
出错了我就不应答,让对方再发一次

使用特权

评论回复
地板
lws| | 2013-12-19 13:25 | 只看该作者
“寄存器数量和数据区的字节数不对应”这应该算数据不完整吧,按MODBUS-RTU协议,从机认为这是一种错误,发送83。原文是“If the slave device takes the requested action without error, it returns the same
code in its response. If an exception occurs, it returns:
1000 0011 (Hexadecimal 83)”,用modbus-slave软件调试一下就知道了

使用特权

评论回复
5
3htech|  楼主 | 2013-12-19 14:24 | 只看该作者
lws 发表于 2013-12-19 13:25
“寄存器数量和数据区的字节数不对应”这应该算数据不完整吧,按MODBUS-RTU协议,从机认为这是一种错误,发 ...

这倒是提醒了我。本来我想用PLC调试的,忘记还有这个slave软件了。

使用特权

评论回复
6
3htech|  楼主 | 2013-12-19 14:38 | 只看该作者
本帖最后由 3htech 于 2013-12-19 14:39 编辑

经modbus slave测试,对于16功能码
1,只要寄存器数量和数据区字节数对应,无论帧长度多少,都返回正确。
看下面的例子:
Tx:01 10 00 00 00 01 02 11 22 2A 19   数据区为0x1122
Rx:01 10 00 00 00 01 01 C9

008-Tx:01 10 00 00 00 01 02 89 01            数据区0个字节
009-Rx:01 10 00 00 00 01 01 C9

010-Tx:01 10 00 00 00 01 02 01 02 03 04 DA 93  数据区4个字节。
011-Rx:01 10 00 00 00 01 01 C9


虽然这种情况发生的概率很低,但个人觉得也并不合适。这并非是个安全的方法。

使用特权

评论回复
评论
lws 2013-12-19 16:07 回复TA
有点奇怪,按理说 008-TX下,不会出现009-RX这种结果啊 
7
受不了了| | 2013-12-19 15:44 | 只看该作者
去下载一个比较常见品牌的触摸屏的编程软件,随便做个画面,然后在线模拟就能试出来了,不过一般16功能码都不太会用到

使用特权

评论回复
8
3htech|  楼主 | 2013-12-21 15:42 | 只看该作者
lws 发表于 2013-12-19 13:25
“寄存器数量和数据区的字节数不对应”这应该算数据不完整吧,按MODBUS-RTU协议,从机认为这是一种错误,发 ...

对于这个16功能码,我已经做了处理,如果帧长度小于11B(1B地址、1B功能码、2B寄存器地址、2B长度、1B数据区字节数、2B数据,2B CRC),我认为帧出错,丢弃该帧并且不进行应答。

如果帧长度大于11B,如果寄存器长度和数据区字节数以及帧长度三者无法对应,则返回数据非法。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我是一颗小白菜~!

20

主题

416

帖子

3

粉丝