最近小弟在处理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
望各位老师予以解答,感激不尽。

解决方案 »

  1.   

    返回数据明显是错误的
    串口通讯用的是RTU吧,那个和TCP的协议格式不一样,要查一下网关的协议转换情况
    下位机的数据地址也要去查一下,一个数据包也发不了300个浮点数,通讯协议要去确认的
      

  2.   

    对,用的RTU。网关协议转换就是Modbus RTU转Modbus TCP的。至于下位机的数据地址是30000。
    其余就不太清楚了,现在就是不知该如何去读取。
      

  3.   

    网关听说有一种是透明转换的,在TCP上跑RTU协议的,你可以试试
    然后你地址的话也应该从对应的地址去读,怎么从0001开始,按理说这样的错误应该会返回83的错误码,不该是返回一堆乱码
    你还是先在串口上用RTU来测试一下下位机的通讯状况,然后再来确认这个网关是不是正常.
      

  4.   

    网关是在正常通讯。同时我也用ModbusPoll(TCP)和ModbusSlave(RTU)软件进行过测试,接收完全正常。至于地址我也试过从30000读取,返回也是乱码。ModbusPoll测试软件显示Response Error,而不是常见的什么地址错误或者功能码错误。
    我也是才开始学习研究Modbus通讯,一知半解下遇到了难题,非常感谢你的解答。