回复:MODBUS轮询时假如某个站断电请问如何跳过这个站?

Zane

版主 西门子1847工业学习平台

  • 帖子

    21052
  • 精华

    399
  • 被关注

    1484

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

发布于 2018-06-06 23:51:35

8楼

展开查看
以下是引用燕藏锋西门在2018-06-06 08:53:47的发言 >楼主

最近我写了个S7-1200PLC与二十来个温控表MODBUS通讯的程序,但是遇到一个问题,假如在通讯过程中,某个从站断电,就无法继续轮询下一个站而卡在这里。

   我的程序是这样子做的,首先发送第一个站的温度实际值读取命令,得到一个温度实际值,这个命令的完成位,也就是此次MODBUS-MASTER命令的DONE位为1的时候再触发第二个站的读取命令,如果所有的站在线,这没有问题。但是如果某个站不在线,那么当次的MODBUS-MASTER命令的DONE位就无法为1,从而就触发不了下一步轮询命令。

  我的做法是监视每一次的DONE位,如果超时比如一秒钟,就判断为此站掉线,就跳到下一个轮询,但是这严重影响了整个通讯速率。

 原来所有的从站在线的话,控制某个站启动,几乎肉眼看不到时间差,你发送启动信号,这个站就启动了,但是加了上述的判断条件后,假如我让某个站断电,然后我控制另外的站启动,这个时候它启动反应就特别久了,好几秒甚至十几秒才有反应。因为每次轮询到断电的站,程序上就得等一个时间才跳到下一站往下轮询。

 请问下,怎么处理这种问题呢?

DONE信号不来,ERROR信号会来呀,因此判断一次通讯结束不能只用DONE信号,还需判断ERROR信号。


另外,MODBUS-RTU通讯是基于任务的通讯,站地址包含在任务报文中的,如果是读写某一个站的多个不连贯参数,则需要依次触发多次通讯任务,这时遭遇到第一个参数读写任务失败后,可以考虑直接跳过这个站的其他剩余任务,否则每一次都要等到通讯延时故障触发,会耽误很多时间,导致轮询周期加长。可以考虑三次站级别的轮询失败后,永久跳过此站的通讯,直至手动复位。

Zane 注册自动化系统工程师 Always save before download
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15100条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。