VB Modbus TCP数据接收疑问

neroanelli 2011-08-30 08:31:26
最近小弟在处理Modbus TCP通讯上遇到了问题,望各位老师帮忙解答。
已知下位机用串口通讯,发送300个浮点数,功能码16;中间采用隔离网关,上位机采用Modbus TCP读取数据。由于原程序是别人做的,我想从上位机自己编写程序读取数据,但是未能成功。
两则Modbus TCP通讯报文如下:
Send: 00 00 00 00 00 06 01 03 00 01 00 01 (Slave:01,功能码03,从寄存器1读取1个数据,返回数据不对啊,求解)
Receive:00 00 00 00 00 CE 01 10 07 D1 00 C8 C3 68 4D D3 43 5E 26 25 C4 5C D6 D9 42 61 15 81 42 8C 23 D7 43 01 94 FE C4 95 46 A0 42 28 8D 50 42 C8 00 00 42 02 C5 A2 00 00 00 00 44 96 26 6F 43 26 72 B0 43 0F 1F 3B 42 4D C9 BA C5 13 2E A8 C5 96 3E 5E 42 BD 0D 50 42 02 D8 10 42 8C 34 39 41 EE 1A A0 41 92 F7 CF 41 B9 F7 CF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 BF 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 8B 5C 29 40 A6 45 A2 00 00 00 00 00 00 00 00 00 00 00 00

Send: 94 00 00 00 06 01 04 00 00 00 01 (使用ModbusPoll程序读取数据通讯报文,同样报错。Slave:01;功能码04)
Receive:55 94 00 00 00 CE 01 10 03 E9 00 C8 44 77 CE 35 43 A9 E8 93 C5 C5 8A 39 43 98 1A E1 C5 A2 82 D1 43 96 FD 91 C5 A7 B0 19 43 AF B5 3F C5 92 1E BE 43 AD 64 7B C5 A7 8E AA 43 0C 15 C3 C5 9E 10 54 43 8D C0 42 C5 A9 29 A0 43 FA 63 D7 C5 8C 3F 60 44 0B 47 8D C5 56 F6 E9 43 43 4E D9 C5 9F 68 6F 43 44 61 48 C5 6F 12 D1 44 29 D9 68 C5 5B 85 C3 43 B1 3E B8 C5 7E 26 14 44 12 80 F6 C5 96 FD 19 44 2D 8C 19 C5 5A 7E D5 44 0B 78 E5 C5 73 C0 00 44 43 DF DF C5 0A DD 2B 44 42 39 48 C5 30 E2 4E 44 2C DF 3B C5 79 C1 17 44 5C 8C 8B C4 CB EE C1 44 4C 20 B4 C5 09 EF 3F 44 4B 2F BE C5 3D 9B 0A 44 4E 6B 23 C4 EB 0A C9 44 5B 98 52 C4 EC 37 F0 44 5D 99 79

根据Modbus TCP通讯协议,正常返回格式应该是:
00 00 00 00 00 07 06 03 04 xx xx xx xx
望各位老师予以解答,感激不尽。
...全文
861 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
neroanelli 2011-09-01
  • 打赏
  • 举报
回复
问题已找到,通讯没有任何问题。
下位机发送300个浮点数是以每次发送50个浮点数实现的,
笨狗先飞 2011-08-30
  • 打赏
  • 举报
回复
返回数据明显是错误的
串口通讯用的是RTU吧,那个和TCP的协议格式不一样,要查一下网关的协议转换情况
下位机的数据地址也要去查一下,一个数据包也发不了300个浮点数,通讯协议要去确认的
neroanelli 2011-08-30
  • 打赏
  • 举报
回复
有没有可能别人做的下位机发送时有自己的通讯格式??
neroanelli 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 veron_04 的回复:]

是否是你的通信命令格式不对?
[/Quote]
命令格式没问题,因为我测试过访问其他设备,一切正常。就是不知道对方编写的程序,在读取过程中有什么特殊要求没有。
贝隆 2011-08-30
  • 打赏
  • 举报
回复
是否是你的通信命令格式不对?
笨狗先飞 2011-08-30
  • 打赏
  • 举报
回复
那很怀疑下位机通讯是不是工作正常了,还有你看一下串口线的正负是不是接反了
neroanelli 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bakw 的回复:]

网关听说有一种是透明转换的,在TCP上跑RTU协议的,你可以试试
然后你地址的话也应该从对应的地址去读,怎么从0001开始,按理说这样的错误应该会返回83的错误码,不该是返回一堆乱码
你还是先在串口上用RTU来测试一下下位机的通讯状况,然后再来确认这个网关是不是正常.
[/Quote]
网关是在正常通讯。同时我也用ModbusPoll(TCP)和ModbusSlave(RTU)软件进行过测试,接收完全正常。至于地址我也试过从30000读取,返回也是乱码。ModbusPoll测试软件显示Response Error,而不是常见的什么地址错误或者功能码错误。
我也是才开始学习研究Modbus通讯,一知半解下遇到了难题,非常感谢你的解答。
笨狗先飞 2011-08-30
  • 打赏
  • 举报
回复
网关听说有一种是透明转换的,在TCP上跑RTU协议的,你可以试试
然后你地址的话也应该从对应的地址去读,怎么从0001开始,按理说这样的错误应该会返回83的错误码,不该是返回一堆乱码
你还是先在串口上用RTU来测试一下下位机的通讯状况,然后再来确认这个网关是不是正常.
neroanelli 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bakw 的回复:]

返回数据明显是错误的
串口通讯用的是RTU吧,那个和TCP的协议格式不一样,要查一下网关的协议转换情况
下位机的数据地址也要去查一下,一个数据包也发不了300个浮点数,通讯协议要去确认的
[/Quote]
对,用的RTU。网关协议转换就是Modbus RTU转Modbus TCP的。至于下位机的数据地址是30000。
其余就不太清楚了,现在就是不知该如何去读取。

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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