请教一下,200smart和传感器之间通过modbus RTU通讯,传感器波特率是9.6K,偶校验,从站地址是1H,功能码是03H,首地址是7,数据长度是6。 用串口调试助手发送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上自带的485串口的3、8端子和传感器通讯,借用官方标准例程,部分程序如下;两个功能块的done位是1,error位是0,没有显示通讯失败或故障,但VB100~VB111里一直是0;断电把485口的3和8端子的线对调了一下,继续测试仍然没有数据。请问这是为什么,应该如何编?是不是在CPU-通信-RS485端口-地址(1~12)中的地址需要修改一下啊?我用地址1和2都测试过了,没有效果=? ? ? L60.0LD? ? ?Always_On=? ? ? L63.7LD? ? ?L60.0CALL? ?MBUS_CTRL, L63.7, 9600, 2, 0, 1000, MBUS_CTRL_Done, MBUS_CTRL_ErrorLD? ? ?Start_MBUS_MSG=? ? ? L60.0LD? ? ?Start_MBUS_MSGEU=? ? ? L63.7LD? ? ?L60.0CALL? ?MBUS_MSG, L63.7, 1, 0, 40007, 6, &VB100, Read_Register_Done, MB3另外,用万用表量485口3和8端子的电压是4.5V,但用串口调试助手正常通讯时量485线间电压的话是-0.2V~0.4V之间跳动。如果通讯不正常,为什么没有故障代码呢吗
最佳答案
平时看MBUS_MSG 指令的 Error脚没有错误码不代表正常,只有在 Done 位为1时,错误代码才有效;光看DONE 位是不行的。
1、可以用DONE的上升沿捕捉 ERROR,如果ERROR 不是 0 那可以肯定是有错的。
2、程序结构严格按下面链接的最下面结构写,你可以改,但不要改网络最前面4个网络的先后顺序;
https://www.ad.siemens.com.cn/productportal/prods/s7-200-smart-portal/200smarttop/communication/serial_port/modbus/Master/Master.htm
3、检查通讯线路,用的是不是双绞线,双绞线的屏蔽层,环压在 DP 总线连接器金属片上;另外线路有没有受到干扰,远离强电;系统接地一定要良好;
4、通讯的参数双方一定要一样。通讯伙伴也要设成 9600 8位数据位、偶校验、1位停止位,传感器地址为 1;
5、如果没有故障代码可以查找程序里VB100~VB111有没有在其他地方被调用,或者被库文件占用
提问者对于答案的评价:
谢谢,是库文件被占用了
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc345771.html