PLC通信中处理心跳信号的两种方法
当代工业控制已经越来越趋于网络化,一台设备往往不是孤立的存在,而是需要跟它的外围系统进行各种各样的通信。比如:设备要跟工厂的管理系统(MES)进行通信以传送过程数据、跟生产线进行通信以获取相关的启停信号、跟目视管理系统(ANDON)进行通信以收发一些可视化数据等等。设备在与外围系统的通信中要发送/接收一种信号,用来判断通信是处于正常状态还是中断状态。这是一种跳变的信号,只要通信正常,它就会按照某种规律变化;一旦在某段时间内检测不到这种变化,就认为通信中断了。这种跳变的信号被形象的称为"心跳信号"。
今天这篇文章,和大家分享下PLC处理心跳信号的两种方法。
1、心跳脉冲
处理心跳信号的比较简单的方法是使用脉冲。
发送方以一定的频率发送脉冲信号,接收方用该脉冲信号的取反值启动延时接通定时器(TON),并设置一个比脉冲周期长的延时时间。
如果脉冲信号处于变化状态,延时接通定时器不会到达其设定时间;
如果脉冲信号停止变化,延时接通定时器会开始计时,达到其设定时间后触发通信中断报警;
脉冲的周期不宜太短或太长,一般使用1秒的脉冲信号。
举个例子:
以DB10.DBX0.0做为心跳信号,DB10.DBX0.1做为报警信号,以心跳信号的取反值启动延时定时器,可以这样写代码:
上述代码其实有一个小的漏洞:假设DB10.DBX0.0恰好在值为1的时候发生了中断(不再变化),上述代码是不会触发报警的。
为了补上漏洞,可以在上述代码的基础上再增加一个延时接通定时器,以心跳信号触发,如下图:
这样任何一个定时器时间到了都会触发通信中断报警。
上述是以脉冲的方式处理心跳信号,还有一种方法是使用心跳计数器。
2、心跳计数器
与心跳脉冲使用布尔型变量不同,心跳计数器使用整数作为心跳值。该数值从0开始计数,每隔一定时间(通常是1秒)加1,当到达最大值后再从0开始重新计数。
对于心跳计数器的检测采用定时取样的方法,每隔一定时间(比如5秒钟)采集心跳计数器的数值,用当前值跟上一次采样的值进行比较,如果不同,说明心跳信号正常;如果两者相同,说明心跳计数器没有更新,即通信发生了中断。
关于如何定时采样,我之前写过一篇文章,请参考:西门子SCL编程实例——定时采样程序
好了,关于PLC处理心跳信号的两种方法就先介绍到这里。
我的新书《西门子S7-200 SMART PLC应用技术——编程、通信、装调、案例》已经出版,欢迎点击下面的链接查看:
#pgc-card .pgc-card-href { text-decoration: none; outline: none; display: block; width: 100%; height: 100%; } #pgc-card .pgc-card-href:hover { text-decoration: none; } /*pc 样式*/ .pgc-card { box-sizing: border-box; height: 164px; border: 1px solid #e8e8e8; position: relative; padding: 20px 94px 12px 180px; overflow: hidden; } .pgc-card::after { content: " "; display: block; border-left: 1px solid #e8e8e8; height: 120px; position: absolute; right: 76px; top: 20px; } .pgc-cover { position: absolute; width: 162px; height: 162px; top: 0; left: 0; background-size: cover; } .pgc-content { overflow: hidden; position: relative; top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); } .pgc-content-title { font-size: 18px; color: #222; line-height: 1; font-weight: bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .pgc-content-desc { font-size: 14px; color: #444; overflow: hidden; text-overflow: ellipsis; padding-top: 9px; overflow: hidden; line-height: 1.2em; display: -webkit-inline-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .pgc-content-price { font-size: 22px; color: #f85959; padding-top: 18px; line-height: 1em; } .pgc-card-buy { width: 75px; position: absolute; right: 0; top: 50px; color: #406599; font-size: 14px; text-align: center; } .pgc-buy-text { padding-top: 10px; } .pgc-icon-buy { height: 23px; width: 20px; display: inline-block; background: url(https://lf6-cdn-tos.bytescm.com/obj/cdn-static-resource/pgc/v2/pgc_tpl/static/image/commodity_buy_f2b4d1a.png); } S7-200 SMART PLC应用技术 ¥88 购买AB PLC网络心跳监测程序开发
前言:一个工业项目的网络架构复杂程度取决项目的规模,不过再复杂的网络架构,都是由一个个节点组成的,那么节点与节点之间、服务端和客户端之间、应用软件与底层设备之间通信的状态如何监测,这是一个值得关注的课题,当然,目前也有很多成熟的解决方案。那么,AB PLC之间,或者AB PLC与第三方网络设备如何实现通信状态监测呢?今天,先分享一种方法:网络心跳监测。
01
项目环境
1. 操作系统:Windows10 专业版 64位 21H1
2. 编程软件:Studio 5000 英文版 V32.01.00
3. 上位软件:FT View Studio 中文版 V11.00.00
4. 5370硬件:1769-L30ER
5. 5570硬件:1756-L72 + 1756-ENBT
02
网络心跳
1. 何为网络心跳?该词来源于人类的心跳,即一分钟跳动多少次,如果正常,那么表明活着,网络心跳正是利用这一原理,告诉通信伙伴,自己的网络状态是正常,一旦心跳停止,那么网络状态势必发生了故障.
2. 如何实现网络心跳监测程序呢?假设服务端与多个客户端进行以太网通信,服务端需要监测客户端的通信状态,方法应该有很多种,我是这样做的:
3. 上面的图片可以放大了查看,如果不想费劲,那么,就看下面的文字吧,实现网络心跳监测的程序逻辑:
客户端以一定的频率产生心跳 客户端将网络心跳数发送给服务端 服务端监测客户端心跳数,并将其存入心跳缓存 服务端将客户端心跳与心跳缓存进行比较 如果心跳 ≠ 心跳缓存,通信正常; 如果心跳 = 心跳缓存,通信故障.4. 看了上面的程序逻辑描述,是不是有了想写程序冲动呢,下面的段落,我将用【图文+视频】的方式来演示如何实现这一过程。如果,你,以前没有写过网络心跳的程序,建议:看到这里,关闭文章,自己去写一个;当然,你,也可以看完文章,再去写一个.
03
心跳程序
1. 项目情景: 1756-L72与1769-L30ER通过Ethernet/IP以太网通信,并接收它产生的心跳,并根据心跳变化来判断网络通信状态,IP地址详见下图.
2. 由于这两款控制器,都属于AB LOGIX5000系列,那么,它们之间实现通信交换数据非常方便,本文使用的方法是生产/消费者标签,1769-L30ER作为生产者,1756-L72作为消费者,在1769-L30ER项目中,控制器名称为CML30ER,在控制器标签域中配置生产型标签HeartBeat,数据类型DINT,标签类型Produced,详见下图.
3. 在1756-L72项目中,在以太网中添加1769-L30ER控制器CML30ER,在控制器标签域中,创建消费者标签HeartBeatFromCML30ER,数据类型DINT,标签类型Consumed,生产者选择CML30ER,远程标签填HeartBeat,RIP填写100ms,详见下图.
4. 本文所描述的心跳程序,具体一定的通用性,所以决定使用AOI指令进行封装,程序分为两部分:
第1部分,产生网络心跳的程序:设置心跳频率、心跳最大数等;第2部分,接收通信伙伴的心跳程序:设置通信中断时间、判断通信状态等;AOI封装块使用,如下图,建议放大查看.5. AOI封装块里第1部分,产生网络心跳的程序代码,详见下图,如果放大了还看不清楚的话,文末提供了代码下载方法.
6. AOI封装块里第2部分,接收通信伙伴的心跳,并以此判断通信状态的程序代码.
结语:综上所述,本文通过图文、理论、案例等方式方法比较详细的讲解了网络通信心跳机制,以及LOGIX5000控制器如何编写代码来实现,由于该属性具有通用性,即不仅仅限于AB PLC之间的通信,还适用于AB PLC与第三方设备通信,故使用了AOI封装的方式,便于快速移植和部署,感兴趣的朋友可以试试,也可以开发适合自己项目的代码。
相关问答
plc心跳判断程序?
PLC心跳判断程序是用于监测PLC系统是否正常运行的程序。以下是一个简单的PLC心跳判断程序的示例:1.创建一个心跳变量heartbeat,并初始化为0。2.循环执行以下...
60多岁老人健康体检都有哪些项目_千问健康
问题描述:左乳房有硬结,压痛,经过一段时间治疗,现在有所缓解,查肝功和激素水平在正常范围内.现在想做一个全身健康体检,像这个年龄一般都要做哪些检查
求解如何检测触摸屏_其他问答_系统粉
检测方法:1、检查显示器与电脑主机的连接线两端是否松动;2、尝试调整显示器上的设置按钮;3、拆开主机,将内存卡拔出后擦拭芯片再插回卡槽。如果提示...
广药发布研究成果称喝王老吉可延长10%的寿命,这可信么?
广药发布研究成果称喝王老吉可延长10%的寿命,这可信么?近日,广药集团董事长李楚源在《财富》全球论坛上表示:“国家863计划研究结果表明,喝王老吉可延长10%...
老师们!请解答一下:多功能健康手环有哪些,健康手环排名好...
[回答]宜准的外观比较大众化,平时出去运动都戴它。功能也挺多的,跑步时可以测心率,还有虚拟兔子陪练的功能,周围挺多跑步的伙伴都在使用的。千元百元的运...