如何使用标准函数 “AXC_SetFilter()”?

说明:
此记录说明的是如何使用标准函数“AXC_SetFilter()”在运行状态下的 WinCC 报警控件中设置消息过滤器。只有以下列出的消息可以使用消息过滤器:n

  • 分配的消息类型为“报警”,“警告”或“PLC过程控制消息”。n
  • 在用户文本块 tb1 中包含字符串“TI4711”(“资源”)。n
  • 在用户文本块 tb2 中包含字符串“area1”(“区域”)。n
  • 没有使用“报警隐藏”功能设置隐藏(在 WinCC V6.2 中可用到报警隐藏功能)。

下图列出了相关脚本。n

如何使用标准函数 “AXC_SetFilter()”?
图. 01n

此脚本 可提供文本文件形式的下载并可导出动作。n

如何使用标准函数 “AXC_SetFilter()”? WinCC_AXC_SetFilter.zip ( 3 KB ) n

下表对重要的程序语句进行了说明。
n

编号 说明
1 “memset(&scSelect , 0, sizeof(scSelect));”
C脚本内部函数“memset()”重置过滤器结构。被过滤器结构占用的内存用 0 预置。 n

“memset(&scError , 0, sizeof(scError));”
C脚本内部函数“memset()”重置差错结构。被差错结构占用的内存用 0 预置。

2“strcpy (scSelect.szFilterName, “MySelection”);”
“strcpy()”函数将名称“MySelecton”赋给过滤器结构成员“szFilterName”。这个名称是任意的并且对于过滤器没有实际的影响。
3“scSelect.dwFilter = MSG_FILTER_CLASS | MSG_FILTER_TEXT | MSG_FILTER_VISIBLEONLY ;”
常量“MSG_FILTER_CLASS”,“MSG_FILTER_TEXT”和“MSG_FILTER_VISIBLEONLY”按位进行逻辑“或”运算并将结果赋给结构成员“dwFilter”。结构成员“dwFilter”现在包含的信息是过滤消息类别和用户文本块。常量“MSG_FILTER_VISIBLEONLY”确保只显示那些没被使用“报警隐藏”功能隐藏的信息。 n

注意:

  • “MSG_FILTER_HIDDENONLY” and “MSG_FILTER_VISIBLEONLY” n
    • 常量“MSG_FILTER_HIDDENONLY”确保只显示那些使用“报警隐藏”功能进行隐藏的消息。n
    • 常量“MES_FILTER_HIDDENONLY”和“MSG_FILTER_VISIBLEONLY”在 WinCC V6.2 中可用。n
    • 如果既不使用常量“MSG_FILTER_HIDDENONLY”也不使用常量“MSG_FILTER_VISIBLEONLY”,那么隐藏的与可见的消息都会被显示。
  • “MSG_FILTER_TEXT_EQUAL”
    同时也可使用常量“MSG_FILTER_TEXT_EQUAL”来检验被使用的用户文本块是全等的。
4 “scSelect.dwMsgClass = 0x0001 | 0x0002 | 0x0008 ;”
消息类别值按位进行逻辑”或”运算并将结果赋给结构成员“dwMsgClass”。结构成员”dwMsgClass”现在所包含的信息是过滤消息类别“类别 1”(报警),“类别 2”(警告)和“类别 4”(PLC过程控制消息)。 n

注意:

  • 消息类别是按位编码的。这意味着结构成员“dwMsgClass”中的一位恰好赋予一个消息类别。如果被置位,这意味着相应类别的报警消息将会在 WinCC 报警控件中显示。这里消息类别数对应于结构成员“dwMsgClass”的位数。请注意消息类别数从 1 开始而位数则从 0 位开始。n
  • 可以按照以下做法确定一个消息类别的位数: n
    • 打开报警记录编辑器。n
    • 选择想要确定其数值的消息类别,点击鼠标右键弹出菜单,选择其“属性”选项。
      “组态消息类别”窗口打开。

      如何使用标准函数 “AXC_SetFilter()”?
      图. 02
      n

    • 第一个选项卡的名称中包含了消息类别数。在图. 02 中可以看到消息类别为”PLC过程控制消息”代表的消息类别为“类别 4”。第 3 位被分配给类别 4,用十六进制数值 0x008 表示。
5 “scSelect.dwMsgType[0] = 0x00000001 | 0x00000002 ;”
消息类型值按位进行逻辑“或”运算并将结果赋给结构成员“dwMsgType”的第一个数组成员。第一个数组成员现在包含的信息是消息类别“类别 1”中的消息类型“类型 1”和“类型 2”被显示。 n

注意:

  • 结构成员“dwMsgType”是一个数据类型数组。每一个数组成员定义的正好是一个显示的消息类别中所包含的消息类型。数组成员的顺序对应于消息类别的编号。请注意在程序设计“C”语言中数组成员是从“0”开始计数的,因此消息类别 1 定位于数组成员“[0]”。n
  • 消息类型是按位编码的,这意味着结构成员“dwMsgType”中的一位正好对应于某一消息类别中的一个消息类型。如果相应的位被置位,那么对应的消息类别和消息类型的消息将会在 WinCC 报警控件中显示。结构成员“dwMsgType”的位数对于每一个数组成员(消息类别)而言最多对应16种不同的消息类型。这里第0位总是分配给与之有效关联的消息类别中的第一个消息类型,而15位则分配给与之有效关联的消息类别中的第 16 个(最后一个)消息类型。

    警告:
    注意在WinCC报警记录中消息类型的编号方式是跨过所有消息类别连续进行的。这就要求额外的工作,根据连续的消息类型编码确定与结构成员“dwMsgType”相关联数据位的位置。在此表下面提供的图表中给出了任意消息类型在结构成员“dwMsgType”中的确切数据位的位置。
    n

  • 在结构成员“dwMsgType”中相关数据位的位置必须通过消息过滤器设置给那些需要被显示的消息类型。一旦某一消息类别的至少一个消息类型被定义为过滤器器,那么对于其他消息类别的消息类型也必须明确指定。在这个例子中只有当消息类型根本没有作为过滤标准使用时才能完全删除结构成员“dwMsgType”从而达到同样的效果。然而请注意,如果消息类型也被指定为过滤器,那么当前有效的消息过滤器仅以选择对话框显示。
    n
  • 可以按照下列方法确定一个消息类型的位数: n
    • 打开报警记录编辑器。n
    • 选择想要确定其数值的消息类型,点击鼠标右键弹出菜单,选择“属性”选项打开“类型”对话框。

      如何使用标准函数 “AXC_SetFilter()”?
      图. 03

    • 在第一个选项卡名字中包含了消息类型的编号。从图. 03 中可以看出消息类型“Alarm High”代表消息类型“类型 1”。第 0 位被分配给消息类型 1,用十六进制数值0x0001表示。自消息类型“类型 1”被分配给第一个消息类别“类别 1”以后就没有必要任何的特定转换。
6 “scSelect.dwMsgType[1] = 0x04 | 0x08 ;”
消息类型值按位进行逻辑“或”运算并将结果赋给结构成员“dwMsgType”的第二个数组成员。第二个数组成员现在包含的信息是消息类别“类别 2”中的消息类型“类型 19”和“类型 20”被显示。 n

注意
在下面给出的图表中可以找到与消息类型相关的数据位的位置。

7“scSelect.dwMsgType[3] = 0x40 |0x80 ;”
消息类型值按位进行逻辑“或”运算并将结果赋给结构成员“dwMsgType”的第四个数组成员。第四个数组成员现在包含的信息是消息类别“类别 4”中的消息类型“类型 55”和“类型 56”被显示。 n

注意
在下面给出的图表中可以找到与消息类型相关的数据位的位置。

8“scSelect.dwTB = 0x0001 | 0x0002 ;”
用户文本块值按位进行逻辑“或”运算并将结果赋给结构成员“dwTB”。这个结构成员包含的信息是用户文本块“tb1”和“tb2”被选用。
9“strcpy (scSelect.szTB[0], “TI4711″);”
字符串“TI4711”被复制到结构成员“szTB”的第一个数组成员中。这意味着只有在用户文本块”tb1″中包含这些字符的消息才能在WinCC报警控件中显示。
10“strcpy (scSelect.szTB[1], “area1″);”
字符串“area1”被复制到结构成员“szTB”的第二个数组成员中。这意味着只有在用户文本块”tb2″中包含这些字符的消息才能在WinCC报警控件中显示。
11“bOK = AXC_SetFilter(lpszPictureName,”Control1″,&scSelect,&scError);”
函数“AXC_SetFilter()”执行在结构“scSelect”中定义的过滤标准。

下表给出的是消息类型的编号与结构成员“dwMsgType”相应数据位之间的对应关系。n

如何使用标准函数 “AXC_SetFilter()”? WinCC_AXC_SetFilter_dwMsgType_e.pdf ( 13 KB ) n

注意:
同时请参考条目号为!25288354!的信息。这将对在WinCC报警控件中进行消息过滤的各种选项有一个全面地了解。
WinCC 信息系统中也可以找到相关说明。

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc337438.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日
下一篇 2021年4月12日

相关推荐

发表回复

登录后才能评论