FactoryTalk View中在导航按钮上按所显示画面显示报警信息

往往在项目的实施过程中,有这样的需求:需要在导航按钮上显示该页面的报警状态,以提示操作人员,该页面有报警,需要操作人员注意或者消除故障,如下图所示。那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

发表评论