现有一项目,采用MODBUS通讯协议,下位有10个从站,采用轮询方式进行查询,当出现通讯故障时,希望采用故障前值参与其他计算,请教给位大师,如何解决?
最佳答案
1、这个问题的关键是如何判定是通讯故障?
实现的方法很多,不要应用通讯模块本身来检测(通讯模块发生故障时检测不了),例如通常应用的测心跳方法,即主站与分站约定一信息位,例如,从站站S7-300可用OB35发送脉冲,主站S7-300检测该信息位,如在一定的时间内该信息位无变化,则认为无心跳了,即为通讯故障。
参见:总线通讯中的看门狗 – 心跳检测
http://www.davidrobot.com/2011/06/bus_communication_monitoring_watchdog_livebit.html?replytocom=1052
2、至于如何采用故障前的数据就容易了:
每次采用数据后将其存入一缓冲区(例如数据块等),以备用。当发生通讯故障时采用该缓冲区中的数据即可。
提问者对于答案的评价:
通讯故障的判断是比较复杂的,下位设备是第三方的设备,编程很简单,采用这种的心跳检测方式,不知是否合适?而且本项目从站比较多,既要读取数据,又要写入数据,数据有数字量和开关量,都不可以同时操作。还在琢磨着,是否有更便捷的方式呢?
专家置评
也可将FB7和FB8块的错误位考虑在内。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc236098.html