请教一下,200smart系列ST30自带的自由口和传感器进行modbus 485通讯,我是用官网的例程简单修改一下,发现MBUS_CTRL成功建立了通讯,done位是1,error位是0。接下来MBUS_MSG数据读取块也成功了,done位是1,error位是0,监控时左下角的DataPtr也有数据16#08000065在一闪一闪的,但监控状态图表时发现所有读取的数据都是0,然后我把485线对调了一下也是这样,然后我把串口调试助手设为9.6K,偶校验,监控了一下数据,什么都没读到。我用串口调试助手发送01 03 00 07 00 06 74 09,传感器返回数据是01 03 0C 00 A0 B3 33 00 00 00 00 01 07 01 08 96 F0;返回6个word。说明传感器正常,是plc程序的问题。下一步我找了个SB CM01信号板,把port口设为1,用信号板进行通讯,发现和刚才一样,通讯正常,读不到数;我干脆把485线全拆了,这时modbus 485通讯指令仍然显示正常,这就有点胡扯了。请问这是怎么回事?还有个小问题问一下,MBUS_CTRL成功建立了通讯,选的port口是0。接下来调用的几次MBUS_MSG功能块都是从port0口发送接收数据吗?
图片说明:
最佳答案
MBUS_MSG 指令的 Error 脚才是反应有没有错误码的,只有在 Done 位为1时,错误代码才有效;光看DONE 位是不行的。
可以用DONE的上升沿捕捉 ERROR,如果ERROR 不是 0 那可以肯定是有错的。
1、从串口测试来看,MODBUS RTU 通讯无疑;
2、从你贴出的帧来看,MBUS_MSG 的Addr 应该填写 40008,而不是 40007,这可能是主要原因。
3、程序结构严格按下面链接的最下面结构写,你可以改,但不要改网络最前面4个网络的先后顺序;
https://www.ad.siemens.com.cn/productportal/prods/s7-200-smart-portal/200smarttop/communication/serial_port/modbus/Master/Master.htm
4、检查通讯线路,用的是不是双绞线,双绞线的屏蔽层,环压在 DP 总线连接器金属片上;另外线路有没有受到干扰,远离强电;系统接地一定要良好;
5、通讯的参数双方一定要一样。通讯伙伴也要设成 9600 8位数据位、偶校验、1位停止位,传感器地址为 1。
提问者对于答案的评价:
谢谢,问题是库文件把地址占用了
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc345627.html