恭喜,你发布的帖子
发布于 2023-04-02 16:18:35
62楼
宝冬大侠,以前自己也用S7-1200PLC做modbusRTU轮询和自由口通讯,但一直有一些问题没弄清楚,请教一下。先不说是基于哪种形式或理念的轮询方式,单就只针对西门子的指令库中的modbus_master指令,如果根据西门子对该指令的帮助文件说明,在modbus_master指令一直调用的情况下,用本次通讯任务的Done或Error脉冲去触发下一个通讯任务,不论在什么故障情况下都应该有error位的产生,通讯不会卡在那里,但实际上由出现的卡死现象,不知道是什么原因?对于一个通讯报文,既有在CM1241中设置的“报文开始条件”(默认是以任意字符)又有”完成接收条件“(默认是通过消息超时识别200ms),还有Comm_Load的从站超时检测和重发次数等手段,那么最多就是从站掉站或者因为干扰导致接收报文错误,总应该有个故障信号吧。modBus RTU通讯并不抽象,测试时用示波器测量 ,发送的请求报文时间、从站响应报文时间、接收报文的时间都能测量出来,但就是找不到卡死的原因,不得不人为加一个超时检测,当然超时检测的时间到大于重发报文的总时间。另一个问题是关于modbus_master指令的Blocked_Proc_Timeout 参数,在测试的时候各种操作,例如向一个从站一直发报文,然后断开该modbus_master的EN端,又立即向下一个从站发报文等等,反正是没试出Blocked_Proc_Timeout 参数的效果,倒是16#8200出现几次,16#80C9这个故障一直没试出来。谢谢
我给你个建议,严格按照官方例程做程序,不要自己随意加什么超时检测。你要是还有问题就看我的签名。
请填写推广理由:
分享
只看
楼主