13.S7-1500 OPC UA 报警与条件(Alarms & Conditions)
通过报警信息可以快速检测自动化系统中的过程控制错误,并准确定位和清除这些错误,有助于大幅缩短工厂停机时间,所以报警信息对自动化系统非常重要。OPC UA 信息模型“Alarms & Conditions”提供不限平台的标准化消息处理方式。
自固件版本 V2.9 起,S7-1500 CPU的 OPC UA支持OPC UA信息模型“报警和条件”。通过OPC UA服务器可以访问控制器的报警信息。在介绍之前有必要先了解一下西门子S7-1500 PLC的诊断系统,这样可以更好地熟悉OPC UA 的报警与条件。
13.1 西门子诊断系统简介
西门子的诊断系统主要分为两大类即系统诊断和过程诊断,过程诊断基于应用程序,也可以称作为基于程序报警。
-
系统诊断
系统诊断就是对西门子PLC硬件系统的诊断,例如对CPU故障、DP/PN站点的丢失与恢复、I/O模块的插以及断路短路等故障的诊断。现场模块故障后将诊断事件发送到CPU,CPU分析故障并调用诊断功能,然后生成报警文本并发送给HMI显示,诊断的原理参考图70。
图70
S7-1500的系统诊断功能由内部的固件完成,不需要程序块的协助(对比S7-300/400),所以即使CPU在停止模式也可以发送诊断信息到显示设备。系统诊断在CPU的属性中自动激活,不能修改,如图71所示。
图71
通过报警文本信息,例如“PLC_1站点第五插槽模块DI_16第三通道短路”,可以快速定位故障点并排除故障,CPU发送的报警信息和格式由系统预先定义,不能修改,只能切换显示的语言。报警信息可以在HMI(西门子大部分操作面板)、S7-1500的显示器和WEB服务器(通过浏览器)中显示。
-
过程诊断
过程诊断是与用户应用相关的诊断,例如I0.0连接到一个超限位开关,如果IO.0为1表示超限位故障,然后在HMI中显示报警信息。这样的报警文本需要在HMI中编辑,然后按照一定的间隔扫描I0.0的状态,通常是500ms,大多数工程师使用这样的方式生成报警信息,但是这样有很多问题,第一大量快速扫描监控点需要占用通信带宽;第二快速的报警信号容易丢失,例如低于500ms的报警信号,这样还需要在程序中做一些工作;第三报警信息更改时需要PLC与HMI双方工程师的协调,也有可能需要在多台HMI中修改。目前西门子推荐使用事件触发的方式发送报警信息,只有故障时才由PLC发送报警信息到外围显示设备,主要有三种方式:
1) 使用PROGRAM ALARM程序块发送
在PLC程序中调用程序块,信号为1时触发报警信息的发送,如图72所示。
图72
2) 使用Prodiag生成报警信息
Prodiag是一个可选软件,不需要编程,还可以简单地组合产生报警的条件,减少编程工作量,例如启动电机按钮按下,两秒后电机未启动的电机启动失败报警,则需要两个信号和一个定时器,使用Prodiag简单组合就可以实现,设置界面如图73所示。
图73
3) 使用Graph生成报警信息
使用Graph编程,对互锁和监控条件进行监控,如果条件未满足则发送报警信息。图74为未满足互锁条件而触发的报警。
图74
13.2 S7-1500 UA 报警与条件与PLC报警的匹配
S7-1500 CPU 的 OPC UA 服务器支持的控制器报警有两种,第一是系统诊断“System Diagnostics ”;第二是基于程序的报警“Program Alarms”。在基于程序的报警中包含三种类型即Graph、Process Diagnostics和UserProgram。
从OPC UA“System Diagnostics ”节点可得到PLC系统诊断发送的报警信息;从OPC UA “Graph”节点可以得到PLC Graph发送的报警信息;从OPC UA “Process Diagnostics”节点可以得到PLC ProDiag发送的报警信息;从OPC UA “UserProgram”节点可以得到PLC PROGRAM ALARM发送的报警信息。如图75所示。
图75
也就是说,OPC UA服务器支持上述提到的几种PLC报警类型。可按常规方式对这些报警进行组态和编程,无需额外考虑在OPC UA客户端上使用这些报警的规则。这些报警类型不仅可通过 HMI 设备、Web 浏览器、CPU 显示屏或 TIA博途工程师站显示,而且也可在支持OPC UA报警和条件的所有 OPC UA 客户端中显示。简单地说就是将PLC支持的系统诊断和过程诊断无缝映射到了OPC UA的服务器中。
13.3 S7-1500 UA 事件
说到报警,可能会有疑问,什么是报警?报警包括哪些信息?这里可以分两类,第一类是现场的一些信息,例如电机启动、停止等,这些信息只是一些通知,HMI采集这些信息用于归档设备的正常运行状态,这些信息通常称为事件(Event),事件是不需要操作人员确认的;第二类是现场设备的故障信息,例如电机轴温度高、电机过载以及水位超限等信息,这些信息通常称为报警(Alarm),报警信息可以确认也可以不确认。以PROGRAM ALARM程序块的过程报警为例,点击PROGRAM ALARM程序块,在属性标签中可以设置报警类别,如图76所示。
图76
如果没有勾选“仅供参考”则是报警信息,然后可以选择信息是否需要确认。如果勾选“仅供参考”,则该信息为事件。
上述介绍的其它几种诊断报警信息,可以在PLC项目树下的“公共数据”栏中查看和设置类别(有的不能设置)。
按OPC UA术语,事件和报警都称为“事件”(事件和报警在显示中是分开的,报警是带有状态的)。事件包含哪些条目呢?参考规范 OPC 10000-5:OPC 统一架构,第 5 部分:信息模型(版本 1.04),事件类型BaseEventType包括的字段信息如表1(没有列出包含子类型的节点)所示。
表1
如果熟悉PROGRAM ALARM程序块报警,可能会发现,OPC UA的事件信息并不能覆盖PROGRAM ALARM程序块报警的所有信息,例如可选文本、关联值和显示类别等信息,如图77所示。
图77
这样从类型 BaseEventType 就派生出来“SimaticEventType”类型。好处就是原来在 HMI设备上显示的PLC报警信息,也可由OPC UA客户端在 OPC UA 服务器的地址空间中进行订阅(报警信息是订阅的方式),就是报警信息无缝映射到了OPC UA客户端。表2为类型为“仅供参考”报警的SimaticEventType字段信息。
表2
“Severity”事件的严重度在OPC UA中定义为1~1000,而在S7-1500 PLC中使用的是优先级0~16与之对应,对应关系参考表3。
表3
13.4 S7-1500 UA 条件
条件就是报警带有的状态信息,例如报警时进入的(Incoming)还是离开的,是确认的还是未确认的等,所以条件和报警是不可分割的。OPC UA 客户端也会从 BaseEventType 派生而来的类型ConditionType获得事件报警的状态,但是 ConditionType 的特性不足以完全映射 OPC UA 服务器中 SIMATIC 报警的特征。OPC UA 定义进一步派生的事件类型AcknowledgeableConditionType 和 AlarmConditionType。AcknowledgeableConditionType 可为 ConditionType 特性补充“是否确认”的特征 (AckedState)。 AlarmConditionType 又进一步在 ConditionType 和 AcknowledgeableConditionType 特性基础上增添了“ActiveState”特征,按照SIMATIC报警系统来说,这是一个进入的状态,指示故障已存在或已发生。
SimaticAlarmConditionType 从 AlarmConditionType 衍生而来,其中包含用于映射 SIMATIC 消息的状态和确认情况的所有事件字段。图78显示了“SimaticAlarmConditionType”类型的事件是如何在 OPC UA 的“BaseEventType”基础上一步步扩展而来的(从UaExpert查看)。
图78
表3为类型SimaticAlarmConditionType包含确认和状态的字段信息,这些信息将补充到事件报警中,例如具有SimaticEventType类型的报警信息。
心得体会:
SimaticEventType类型源于BaseEventType类型,没有条件信息(就是状态),例如是否激活、是否确认等信息,所以SimaticEventType类型的消息就是“仅供参考”的事件,不需要确认。SimaticAlarmConditionType类型消息也是源于BaseEventType类型,除了报警文本还带有状态信息。SimaticAlarmConditionType类型消息字段应该是表2+表3。在简单点,SimaticEventType类型消息是事件,而SimaticAlarmConditionType类型消息是报警。如果有误解希望大家指正。
13.5 S7-1500 UA 报警与条件的示例
下面以示例的方式介绍 S7-1500 UA 报警与条件的配置过程,示例中使用PROGRAM ALARM程序块触发报警,然后在OPC UA客户端UaExpert软件显示报警信息并确认。具体配置步骤如下:
1) 在TIA博途中插入一个S7-1500 V2.9版本的CPU,在CPU属性中使能OPC UA服务器、Alarms & Conditions以及确认功能,如图79所示。然后在“运行系统许可证”栏中选择购买的运行许可证。
图79
2)创建一个FB块,例如FB1,然后在FB块调用PROGRAM ALARM程序块,赋值触发信号,例如TRIG1和TRIG2,在SD_X中分配报警时刻的过程值,例如Tag_3/4,如图80所示。
图80
3) 点击其中一个调用的PROGRAM ALARM,在属性中设置报警类别为确认,优先级为14,对应OPC UA 严重程度值为860(参考表3),编写相应报警文本和附加报警文本,如图81所示。
图81
4) 以相同的方法设置第二个PROGRAM ALARM的属性,设置报警类别为不需要确认并勾选“仅供参考”选项,优先级为2,对应OPC UA 严重程度值为150(参考表3),编写相应报警文本和附加报警文本。
5) 在OB1中调用FB1,编译后下载到PLC中,修改变量Tag_3/4的值并置位变量“TRIG1/2”。
6) 打开客户端软件UaExpert,建立与PLC的连接(参考前面的章节)。点击“Document”,右键快捷菜单添加“Event View”视图,然后将“SimaticAlarmsAndConditions”节点拖放到“Event View”视图,最后勾选“SimpleEvents”和“ConditionsType”选项,点击“Apply”按钮确认,如图82所示。
图82
7) 在“Event”标签栏中可以看到触发的两条报警信息,如图83所示。
图83
“Event”标签栏中相当于归档信息,有无确认和“仅供参考”的信息都会进入该栏中。在详细视图中可以看到附件信息和相关过程值。两条报警信息的EventType是不相同的,SimaticEventType直接从BaseEventType类型派生,所以不带有状态信息。
8) 在“Alarms”标签栏中只能显示SimaticAlarmConditionType类型报警信息,勾选“仅供参考”的SimaticEventType类型信息则不能显示。点击显示的报警信息,右键快捷菜单选择“Acknowledge”可以确认该条报警信息。信息确认后显示绿色对勾标志,参考图84。
图84
注意:
将关联的过程值直接添加到PROGRAM ALARM的报警文本中,在OPC UA客户端不能显示。
所以说目前使用PROGRAM ALARM产生的报警并不能完全在OPC UA客户端显示。看看后续版本是否更新。
13.6 S7-1500 UA 报警与条件存储器的限制
一个S7-1500 CPU的 OPC UA服务器存储报警消息的限制与CPU的类型有关,例如CPU 1511~1513,程序消息数量是100条,系统诊断消息数量是50条;CPU 1515~1516,程序消息数量是200条,系统诊断消息数量是100条;CPU 1517~1518,程序消息数量是400条,系统诊断消息数量是200条。这里的限制是指SimaticAlarmConditionType类型报警消息的数量,系统诊断也会有该类型消息,例如CPU从运行切换到停止模式,将触发无确认的SimaticAlarmConditionType类型报警消息(停机报警,是故障信息),同时产生一条SimaticEventType类型消息(状态切换信息);从停止再切换到运行模式,SimaticAlarmConditionType类型报警离开(停机故障复位),同时再产生一条SimaticEventType类型消息。
与系统诊断和过程诊断的划分相同,CPU和OPC UA服务器消息的存储器也是分开的,它们使用不同的存储器。在报警激增的情况下,OPC UA服务器存储的报警与条件信息可能达到了上限(与程序相关的过程报警或系统诊断信息),新来的报警信息不会丢失而是进入未处理报警的存储器中缓存,通过OutstandingProgramAlarms指示未进入OPC UA服务器消息的数量,同时触发超过最大信息数量的过载报警。之后即使报警信息低于储存器的最大限制,新到来的报警信息也不会进入OPC UA服务器的信息存储器中,必须调用“ConditionRefresh”方法来将未进入的报警再次提供给 OPC UA 报警和条件系统(通过点击图84中的图标调用更新方法),原理图参考图85。
图85
为避免报警数量围绕最大值上下波动而导致过载报警频率出现(每次出现后还需要调用更新方法恢复),所以这里采用迟滞信号延缓报警的触发,迟滞信号可以在“OverloadHysteresis”节点中查看。例如,最大报警数量是400,OverloadHysteresis 迟滞值为3。过载报警的数量在达到 400 时触发报警,但只有在下降到 397 以下时才会取消。如果报警数量再次增加,仍需超过 400 才会触发报警。除了存储器中报警数量下降到397以下,还需要OutstandingProgramAlarms等于0才能消除过载报警。
未处理报警信息(未进入OPC UA服务器储存器)、过载迟滞、最大报警数量以及当前存储器中程序报警数量等信息可以通过“SimaticAlarmsAndConditions”下的节点读出,如图86所示。
图86
【声明:本文/视频版权归西门子1847工业学习平台所有,未经允许,不得转载。】