签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
判断通讯是否正常看到国外基本上使用的心跳信号。
基本上就是程序中有个变量一直在发生变化,当变量不发生变化的时候,就认为是通讯失败了、
但是还看过有的人用一个BOOL的变量,在程序中一直置位1,对方的程序中,如果变成0了,就说明通讯失败了。
我感觉用第二种方式更简单一下,通讯失败了,接收不到数据,通讯缓冲区自然就变成0了。
这种方式有什么隐患吗?
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1649287&b_id=7&s_id=0&num=12
你理解有误。
1,如果数据一直不变化,是无法判断通讯正常与否。
2,通讯本身是不会改变数据的,无论通讯正常或异常,收到什么就是什么,通讯异常没收到数据只能维持不变或不更新。
3,心跳信号原理上无外乎两种,其一是心跳信号的置位复位由一方独立维持,一般是plc侧。另一侧只是通过侦听有无变化来判读通讯状态。其二是心跳信号的置位复位由双方共同维持,一方置位,另一方复位。
两种方式各有优劣,都没有你说的隐患。
以PROFINET举例
如果通讯的数据BOOL型一直为1,那么接收方在通讯正常的情况下,也是接收到1
但是当通讯失败的时候,接收方的接收缓冲区就变成0了,这样就可以判断通讯失败了。
这样在发送方只需要置位这个标志位就行,其他也不用操作,这种方式不更简单吗?
是不是不同的通讯协议的问题。如果profinet应该不存在这个问题
但是如果使用S7通讯的话,是不是有可能会出现这种情况。‘
这个我不是太清楚
为了避免出现以“0”“1”判断通讯状态,出现断开后、状态依然保持的情况,使用了计数递增的方式!
楼主我问你,你家对面的一家,门口的拉手上塞着一张某超市的宣传单,好几天了,你说这家里面有人不?
通常情况要是有人的话随手就把宣传单拿下来了。这个动作就是一方置位,一方复位。
我又说个单方面置位复位的例子。小区门口的通知栏,是物业管理向住户展示一些通知用的。今天11月了,还是贴着劳动节游园会的通知。你说物业干什么了?
以上两点都是生活中的一点经验而已。把它写到程序里面就可以了。
第一例,双方各持两种操作,双方都要对同一个缓冲区进行读和写。双方都可以知道对方状态。有的小偷就利用这种优势,检查你家隔壁是否长期没有人。
第二例,单方面只需要一种操作,程序简单。一方只读,一方只写。问题是不能双向了解在线情况。
以上仅仅是底层原理。至于上层发生的在线就1离线就0,那么这是上层软件的功能了。这个什么情况都可以做出来。
S7通讯,不用心跳咋判断是否掉线,你DB里面的数据又不会因为掉线而改变。
引用1楼详细内容:
你这个就不是心跳信号。
所谓的心跳信号,其实就是1HZ或者0.5HZ形式的间歇跳动,也叫方波脉冲,又叫脉冲振荡。
用来检测设备间通讯交互的正常与否,这种形式是目前应用最多,也是最好用的通讯检测方式。
看图我写的这个是双向的
对于我来说,两种都差不多,也没啥隐患反正每个通讯周期都会写心跳信号。
第一种,主站每个通讯主循环改变心跳信号就好,从站直接用两次通讯状态的心跳信号是否相等,相等时定时器就开始计时、不相等定时器就清零然后把当前心跳信号给本地缓存的心跳信号。
第二种就比较简单,主站只是每个通讯周期都写心跳信号1,从站判断到心跳1就清定时器同时清零心跳信号,只要长时间主站都没写1定时器累计到一定值从站就判断主站通讯中断了。
至于主站判断从站的通讯中断?反过来就行。
用memory clock字节,假设你通讯是1s一次,那么如果通讯正常时每一个周期对方收到的数据都是不一样的,这样只要一个扫描周期就知道是否正常了,如果你用bool需要两个以上的周期才能检测出来。
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录