S7-200与C#的Modbus通讯的字节数组问题

例如,我想在上位读取地址为2的PLC I0.0的输入状态,该地址对应的是00001,那么根据一般的Modbus RTU 协议,这个字节数组应该怎么写?02 02 01 00 01 00 01 94 E2?还是02 02 01 00 01 01 B9 95?或者是别的?我发送任意符合CRC校验的字节数组返回的信息都是02 82 02 31 61 ,请大神赐教

问题补充:
官方文档说modbus地址10001 ~ 10128对应的I0.0 ~ I15.7,但实际上发命令01 00 01或00 01 00 01都是不对的,本人亲测,反而 02 02 00 00 00 02 F9 F8倒是有正确的返回值,西门子并没有提到这些东西,真是蛋疼。

图片说明:

S7-200与C#的Modbus通讯的字节数组问题   

最佳答案

楼主,见下面图片;
存储器地址是4个字节,数据个数:4个字节;
02 02 01 00 01 00 01 94 E2?
我个人认为,应该是:02 02 00 01 00 01 00 01 +RTU校验码
00 01 00 01 是存储器地址;00 01 是读取的数据个数;
200 有Modbus标准指令库,都是用MBU-MSG指令,地址就写10001,直接读取的;
------------------------------------------------------------------------------------------------------------------------------
楼主,你就想读取一个I0.0的值,02 02 00 00 00 02 F9 F8,那么00 00地址代表I0.0的地址了?真是不知道为什么。
谢谢楼主分享,非常感谢;

图片说明:

S7-200与C#的Modbus通讯的字节数组问题  

提问者对于答案的评价:
每次提问其实都是一次互相学习的过程。。。

专家置评

建议使用modbus 库指令实现

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc154711.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月6日 下午6:47
下一篇 2017年6月6日 下午6:48

相关推荐