往往在项目的实施过程中,有这样的需求:需要在导航按钮上显示该页面的报警状态,以提示操作人员,该页面有报警,需要操作人员注意或者消除故障,如下图所示。那Rockwell 的上位机软件FactoryTalk View该如何处理呢?
1.创建报警
创建报警时候应注意,每个报警需按照设备所在界面进行分组。如:
Alarm
├─L1Grp1
│ ├─L2Sub1
│ │ ├─L3Sub1
│ │ └─L3Sub2
│ ├─L2Sub2
│ ├─L2Sub3
│ └─L2Sub4
└─L1Grp2
2.函数调用
我们需要用到这几个函数:
2.1 AE_HighPriorityActive(AlarmName)
返回一个1—4的integer,以代表当前所指定的报警,处于”报警”状态的最高级值。
1: 低
2: 中
3: 高
4: 紧急
如果返回值是0,表示指定的报警中没有处于报警状态。
2.2 AE_InAlmUnackedCount(AlarmName)
返回一个1—报警总数的integer,以代表当前所指定的报警,处于”报警”状态且未确认的数量。
2.3 AE_InAlmAckedCount(AlarmName)
返回一个1—报警总数的integer,以代表当前所指定的报警,处于”报警”状态且已确认的数量。
2.4 配置函数中的AlarmName
AlarmName有两种配置方式:
相对路径,类似以下的样子
• /::
• //::
AreaPath 包括应用程序和区域路径,但不包括应用程序名称。表示定义在警报服务器下的区域。它必须以前斜杠字符开始,并且不包含应用程序名称。
GroupPath 包括应用程序、区域路径、组路径,但不包括应用程序名称。表示定义在警报服务器的区域或应用程序下的组。它必须以前斜杠字符开始,并且不包含应用程序名称。
AlarmName 指定单个报警名称,或使用通配符 ? 和 *(问号和星号)指定多个警报。
示例
/Area1/SubArea1::[CLX]Program:LineProgram.MixingTank1 指定单个警报。
/Area1/SubArea1::[CLX]Program:LineProgram.MixingTank* 指定以 MixingTank 开始并在指定区域和子区域中的所有警报。
/Area1/SubArea1::* 指定子区域 1 中包含的所有警报。
/Area/SubArea:NGServer::[CLX]Program:LineProgram.MixingTank* 指定以 MixingTank 开始且位于指定区域和组中的所有警报。
/Area/SubArea:TagServer:Group.Sub Group1::* 指定子组 1 中包含的所有警报。
绝对路径,类似以下的样子
• [::]<AlarmName>
AlarmName 指定单个警报名称,或使用通配符 ? 和 *(问号和星号)指定与显示相同的区域中包含的多个警报。
示例
[CLX12]Program:Line1Program.MixingTank1 指定单个警报
[CLX12]Program:Line1Program.MixingTank1* 指定以 MixingTank1 开始的所有警报
* 指定与显示相同的区域中包含的所有警报
回到我们的例子,如果要展示L1Grp1下L2Sub1下L3Sub2内的所有报警,我们可以这么写:
*L1Grp1.L2Sub1.L3Sub2*::*
使用通配符,可以屏蔽各不确定的报警字符串。
3.配置画面
最后,参照PlantPAX的模板,我们可以做成全局画面进行调用
第一个画面按钮的背景色的动画加上:
If (AE_HighPriorityActive( "*#101.#1010*::*" ) == 1) AND (AE_InAlmUnackedCount( "*#101.#1010*::*") > 0) Then 3 Else If (AE_HighPriorityActive( "*#101.#1010*::*" ) == 1) AND (AE_InAlmUnackedCount( "*#101.#1010*::*") == 0) AND (AE_InAlmAckedCount( "*#101.#1010*::*") > 0) Then 2 Else If (AE_HighPriorityActive( "*#101.#1010*::*" ) == 2) AND (AE_InAlmUnackedCount( "*#101.#1010*::*") > 0) Then 5 Else If (AE_HighPriorityActive( "*#101.#1010*::*" ) == 2) AND (AE_InAlmUnackedCount( "*#101.#1010*::*") == 0) AND (AE_InAlmAckedCount( "*#101.#1010*::*") > 0) Then 4 Else If (AE_HighPriorityActive( "*#101.#1010*::*" ) == 3) AND (AE_InAlmUnackedCount( "*#101.#1010*::*") > 0) Then 7 Else If (AE_HighPriorityActive( "*#101.#1010*::*" ) == 3) AND (AE_InAlmUnackedCount( "*#101.#1010*::*") == 0) AND (AE_InAlmAckedCount( "*#101.#1010*::*") > 0) Then 6 Else If (AE_HighPriorityActive( "*#101.#1010*::*" ) == 4) AND (AE_InAlmUnackedCount( "*#101.#1010*::*") > 0) Then 9 Else If (AE_HighPriorityActive( "*#101.#1010*::*" ) == 4) AND (AE_InAlmUnackedCount( "*#101.#1010*::*") == 0) AND (AE_InAlmAckedCount( "*#101.#1010*::*") > 0) Then 8 Else If (AE_NormalUnackedCount( "*#101.#1010*::*" ) > 0) Then 1 Else 0
再改一下1—9对应的颜色显示。按钮显示画面就正常制作即可。
同理其他按钮把1010改一下。如果是三级按钮,就在#1010后面继续扩展即可。
调用的时候如下图配置按钮。
版权声明:本文内容来源于网络搜集无法获知原创作者,仅供个人学习用途,若侵犯到您的权益请联系我们及时删除。邮箱:1370723259@qq.com