技术论坛

探讨一下smart的MODBUS库的故障检测不可靠的问题

作者 主题
至圣

经验值: 13630
发帖数: 2834
精华帖: 32
主题:【探讨】探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 楼主 2022-04-05 18:07:17

赶脚西门子smart中的MOD库的故障检测不可靠,有时候从站已经下线了,但故障码仍然是0。




国人当自强 共同努力 抵制日货
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1756065&b_id=64&s_id=0&num=25

至圣

经验值: 13630
发帖数: 2834
精华帖: 32
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 楼主 1楼 2022-04-05 18:11:41

本胖想到一个土办法:在从站中读一个肯定不为零的参数,比如版本号或者从站地址啥子的。在读这个参数之前,把保存这个参数的变量清零,读了以后,如果这个变量还是0,那就说明这个从站掉线了,后面就不再读写这个从站。

有些从站没有映射/镜像功能,要读写好几个地址不连续的参数,如果先判断一下这个从站的状态,就能大大提高这个从站有故障的情况下的轮询速度。


国人当自强 共同努力 抵制日货
以下网友喜欢您的帖子:

  
至圣

经验值: 24344
发帖数: 4846
精华帖: 6
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 2楼 2022-04-05 19:08:12

       二楼好思路,是感觉有些通讯功能的诊断信息不如心跳抖动来的简单粗暴有效。5毛钱的阿司匹林抵过一通检测化验和开的进口高档药。


谨慎低调
以下网友喜欢您的帖子:

  
至圣

经验值: 13630
发帖数: 2834
精华帖: 32
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 楼主 3楼 2022-04-05 20:11:50
以下是引用ABBCCC在2022-04-05 19:08:12的发言 >2楼

       二楼好思路,是感觉有些通讯功能的诊断信息不如心跳抖动来的简单粗暴有效。5毛钱的阿司匹林抵过一通检测化验和开的进口高档药。

要是本胖说了算,所有的从站都应该带心跳,心跳的频率应该可以根据轮询的周期设置。


国人当自强 共同努力 抵制日货
以下网友喜欢您的帖子:

  
至圣

经验值: 17408
发帖数: 6225
精华帖: 18
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题
推荐帖


只看楼主 4楼 2022-04-05 21:03:05




假如DONE=V352.0,ERR=VB370,那么MB0才是里需要的。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 24344
发帖数: 4846
精华帖: 6
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 5楼 2022-04-05 23:10:11

4楼提醒的很对。有些信息在梯形图上一闪而过,人都来不及观察,有些信息存在时间短的甚至在监控的在线梯形图里根本就不体现,只能用些手段给它雁过留声,人过留名。


谨慎低调
以下网友喜欢您的帖子:

  
至圣

经验值: 67540
发帖数: 14782
精华帖: 100
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题
推荐帖


只看楼主 6楼 2022-04-06 07:47:41

你用的地址不吉利。换个地址试试。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 12573
发帖数: 2503
精华帖: 31
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 7楼 2022-04-06 11:00:04

你这是没看库帮助文件,自己坑自己。

帮助文件里面都说了,只有在Done=1的上升沿周期的Error值才是有效的,其它时间段内的Error值是不受当前的MSG控制的。



 
以下网友喜欢您的帖子:

  
至圣

经验值: 13630
发帖数: 2834
精华帖: 32
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 楼主 8楼 2022-04-06 11:24:56
以下是引用Zaxife在2022-04-06 11:00:04的发言 >7楼

你这是没看库帮助文件,自己坑自己。

帮助文件里面都说了,只有在Done=1的上升沿周期的Error值才是有效的,其它时间段内的Error值是不受当前的MSG控制的。


我当时特意的用DONE的上沿,把故障码传送到一个MB保存,也不能保证可靠的检测故障。

多数时候又是可以的。


国人当自强 共同努力 抵制日货
以下网友喜欢您的帖子:

  
至圣

经验值: 13630
发帖数: 2834
精华帖: 32
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 楼主 9楼 2022-04-06 11:27:28
以下是引用芳季在2022-04-06 07:47:41的发言 >6楼

你用的地址不吉利。换个地址试试。

我刚才的回帖丢了。我当时用的是西门子的例程,用的是M变量(地址好吧)。


国人当自强 共同努力 抵制日货
以下网友喜欢您的帖子:

  
至圣

经验值: 19280
发帖数: 3866
精华帖: 1
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 10楼 2022-04-07 11:22:32

例程没错,就是没告诉你用的是什么型号的PLC。


弘扬中华传统美德,无私奉献为根本,助人为乐为根源。
以下网友喜欢您的帖子:

  
版主

经验值: 25991
发帖数: 11808
精华帖: 43
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 11楼 2022-04-07 21:28:43

Modbus搞心跳?这个逻辑不通。

远方从站心在跳,PLC怎么会知道?如果PLC能测到这个心跳了,还要这个心跳干什么?直接干正事就行了。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67540
发帖数: 14782
精华帖: 100
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 12楼 2022-04-08 07:12:27

其实心跳这个概念我是不清楚的,我问问……

单方面把自己一个位不断取反。

把对方一个位一直置1。而对方发现这个位变1又会主动置0。

读对方一个位为0时,改写1。对方发现为1时置0。

哪种叫心跳?


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 5379
发帖数: 557
精华帖: 0
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 13楼 2022-04-08 11:09:42

心跳 当然是自己的

应该是源于CAN通讯

就是看看你的心在跳不


 
以下网友喜欢您的帖子:

  
至圣

经验值: 13630
发帖数: 2834
精华帖: 32
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 楼主 14楼 2022-04-08 18:07:22
以下是引用yanxiao在2022-04-07 21:28:43的发言 >11楼

Modbus搞心跳?这个逻辑不通。

远方从站心在跳,PLC怎么会知道?如果PLC能测到这个心跳了,还要这个心跳干什么?直接干正事就行了。

远方从站的心在跳,你的主站如果检测到心跳位在0/1的变化,或者说0或者1的持续时间不超过设定值,那么说明从站是正常的。

检测的方法就是通讯读取从站的“状态字”(假设这个状态字的bit15就是心跳位)。

不管心跳位为0的持续时间超过设定值还是1的持续时间超过设定值,都说明那个从站有故障,我称之为“掉线”。


国人当自强 共同努力 抵制日货
以下网友喜欢您的帖子:

  
至圣

经验值: 13630
发帖数: 2834
精华帖: 32
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 楼主 15楼 2022-04-08 18:15:22
以下是引用芳季在2022-04-08 07:12:27的发言 >12楼

其实心跳这个概念我是不清楚的,我问问……

单方面把自己一个位不断取反。

把对方一个位一直置1。而对方发现这个位变1又会主动置0。

读对方一个位为0时,改写1。对方发现为1时置0。

哪种叫心跳?

把自己的一个位不断的取反,这就是自己的心跳。但不是给自己用的,是给通讯伙伴用的。

给自己用的也有类似的,叫“看门狗”。其实原理都差不多。

看门狗一般是有一个硬件定时器,CPU中的程序要定期的“喂狗”,如果超过时间没有喂狗,这个定时器通常会产生中断(最常用的就是reset,复位)。

从站也需要读取主站的心跳,本胖的体系是FCS,现场总线控制系统,很少用远程IO。FCS是PLC网络,下位PLC如果读取不到主站的心跳,就进入“离线”模式,全自动变成半自动了。


国人当自强 共同努力 抵制日货
以下网友喜欢您的帖子:

  
至圣

经验值: 13630
发帖数: 2834
精华帖: 32
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 楼主 16楼 2022-04-08 18:18:02
以下是引用楼前在2022-04-08 11:09:42的发言 >13楼

心跳 当然是自己的

应该是源于CAN通讯

就是看看你的心在跳不

心跳当然是对方的,通讯伙伴的。


国人当自强 共同努力 抵制日货
以下网友喜欢您的帖子:

  
版主

经验值: 25991
发帖数: 11808
精华帖: 43
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 17楼 2022-04-10 19:31:07

说对了。

你确定心跳的方式是通讯,而且要对方响应。

你直接通讯干正事就行了,有无响应一样能判别从站是否掉线。

所以,在Modbus这一层级设“心跳”,完全没必要。

如果在应用层,应用层程序不关心通讯是如果实现的,设心跳来检测从站情况,供应用层使用。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 13630
发帖数: 2834
精华帖: 32
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 楼主 18楼 2022-04-10 20:11:02
以下是引用yanxiao在2022-04-10 19:31:07的发言 >17楼

说对了。

你确定心跳的方式是通讯,而且要对方响应。

你直接通讯干正事就行了,有无响应一样能判别从站是否掉线。

所以,在Modbus这一层级设“心跳”,完全没必要。

如果在应用层,应用层程序不关心通讯是如果实现的,设心跳来检测从站情况,供应用层使用。

心跳不需要对方响应啊!只是把一个bool的振荡器放入通讯变量。我觉得应该用一个字节,放入8个不同周期/频率的振荡器位。根据轮询周期选一个当心跳。


国人当自强 共同努力 抵制日货
以下网友喜欢您的帖子:

  
至圣

经验值: 17408
发帖数: 6225
精华帖: 18
回复:探讨一下smart的MODBUS库的故障检测不可靠的问题


只看楼主 19楼 2022-04-11 23:17:46

MODBUS协议里没有“心跳”一词。


 
以下网友喜欢您的帖子:

  
收起
探讨一下smart的MODBUS库的故障检测不可靠的问题
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。