通过全局脚本动作返回被检查变量的状态实现对变量状态的监视,同时触发一条报警。
在该 FAQ 的第一部分创建一个检视变量的全局脚本动作藉此仅在输出窗口中输出一条信息。在第二部分配置全局脚本动作以实现即在窗口中输出消息又触发一条报警的目的。
1. 通过以下步骤创建全局脚本动作以实现仅在输出窗口中输出一条信息
. | 步骤 |
---|---|
1 | 打开全局脚本编辑器(ANSI C)创建一个新动作。 |
2 | 在动作中编写如下程序函数:#include "apdefap.h"int gscAction(void){DWORD dwState = 0;GetTagSWordState ("External_tag_1", &dwState);if (dwState == 0){//Tag status OKprintf ("Tag status Ok: [Statuscode (hex):%X]\r\n",dwState);}else{//Tag status deviantprintf ("Tag status deviant: [Statuscode (hex):%X]\r\n",dwState);}return(0);} |
3 | 设置动作的触发器为被监视的变量(这里为:“External_tag_1”,周期:根据变化)。 |
4 | 通过全局脚本/工具执行菜单命令“重新生成头文件”。 |
5 | 保存动作并关闭全局脚本编辑器。 |
6 | 打开图形编辑器创建一个新的过程画面(PDL)。 |
7 | 通过智能对象“应用程序窗口”配置“Global Script Diagnostics”。 |
8 | 保存画面并把它定义为起始画面。 |
9 | 如果没有激活,那么需要在计算机启动选项中激活全局脚本运行系统。 |
现在当启动运行系统时,一旦被监视变量的状态发生改变,关于此变量状态的一条信息就会输出到 Global Script diagnostics 窗口。
2. 通过以下步骤创建全局脚本动作,以实现输出一条消息到对话窗口的同时也触发一条报警
. | 步骤 |
---|---|
1 | 创建一个“ 二进制”类型的内部变量(该变量用于触发报警)。在本例中变量名称为 “Trigger”。 |
2 | 在报警记录中插入一条新的消息,配置内部变量“Trigger” 作为消息变量(可以根据工厂情况配置消息文本)。同时在消息属性中激活以下选项 “仅为单个确认”,“控制中央信令设备 ”和“将被归档”。 |
3 | 保存报警记录的改变然后关闭编辑器。 |
4 | 打开全局脚本(ANSI C)创建新动作。 |
5 | 在动作中编写以下程序函数:#include "apdefap.h"int gscAction(void){DWORD dwState = 0;GetTagSWordState ("External_tag_1", &dwState);if (dwState == 0){//Tag status OKprintf ("Tag status Ok: [Statuscode (hex):%X]\r\n",dwState);SetTagBit ("Trigger", FALSE);}else{//Tag status deviantprintf ("Tag status deviant: [Statuscode (hex):%X]\r\n",dwState);SetTagBit ("Trigger", TRUE);}return(0);} |
6 | 为动作触发设置一个新的变量触发。 设置动作的触发器为被监视变量(这里为:“External_tag_1”)。如果需要,可以根据应用的需求更改标准周期(2S)。在本例中,标准周期定义为变量更新及检测变化的频率。 |
7 | 通过全局脚本/工具执行菜单命令“重新生成头文件”。 |
8 | 保存动作然后关闭全局脚本编辑器。 |
9 | 打开图形编辑器创建一个新的过程画面(PDL)。 |
10 | 通过智能对象“应用程序窗口”配置“Global Script Diagnostics”, 并配置一个 WinCC Alarm Control。 |
11 | 保存画面并定义其为项目的起始画面。 |
12 | 如果没有激活,那么需要在计算机启动选项中激活全局脚本运行系统和报警记录运行系统。 |
现在当启动运行系统时,一旦被监视变量的状态发生改变,关于此变量状态的信息就会输出到 Global Script diagnostics 窗口,另外当该变量的状态不正常时也会触发一条报警。
如果希望当连接完全断开时触发一个特定的报警,可以使用下面的程序代码。为此需要组态第二个消息和第二个触发变量。
步骤 | |
---|---|
1. | #include "apdefap.h"int gscAction(void){DWORD dwState = 0;GetTagSWordState ("External_tag_1", &dwState);if (dwState == 0){//Tag status OKprintf ("Tag status Ok: [Statuscode (hex):%X]\r\n",dwState);SetTagBit ("Trigger", FALSE);SetTagBit ("Trigger_connection_interrupted", FALSE);}else if (dwState&0X0001){SetTagBit ("Trigger_connection_interrupted", TRUE);}else{//Tag status deviantprintf ("Tag status deviant: [Statuscode (hex):%X]\r\n",dwState);SetTagBit ("Trigger", TRUE);SetTagBit ("Trigger_connection_interrupted", FALSE);}return (0);} |
重要提示 当被监视的变量是一个外部变量时,需要确认在数据块(DB)中为该变量选择了正确的数据类型。 如果这里使用了错误的数据类型,就会输出不同于“1”和“0”的十六进制的消息 。