如何在 WinCC 中实现变量状态监视和连接状态监视?

n

内容
该FAQ条目处理了以下两个问题。n

监视一个变量的状态
通过全局脚本动作返回被检查变量的状态实现对变量状态的监视,同时触发一条报警。n

在该 FAQ 的第一部分创建一个检视变量的全局脚本动作藉此仅在输出窗口中输出一条信息。在第二部分配置全局脚本动作以实现即在窗口中输出消息又触发一条报警的目的。n

1.通过以下步骤创建全局脚本动作以实现仅在输出窗口中输出一条信息

No. 步骤
1 打开全局脚本编辑器(ANSI C)创建一个新动作。
2 在动作中编写如下程序函数: n

#include "apdefap.h"
int gscAction(void)
{
DWORD dwState = 0;
GetTagSWordState ("External_tag_1", &dwState);
if (dwState == 0)
{
//Tag status OK
printf ("Tag status Ok: [Statuscode (hex):%X]rn",dwState);
}
else
{
//Tag status deviant
printf ("Tag status deviant: [Statuscode (hex):%X]rn",dwState);
}
return(0);
}

3设置动作的触发器为被监视的变量(这里为:“External_tag_1”,周期:根据变化)。
4通过全局脚本/工具执行菜单命令“重新生成头文件”。
5保存动作并关闭全局脚本编辑器。
6打开图形编辑器创建一个新的过程画面(PDL)。
7通过智能对象“应用程序窗口”配置“Global Script Diagnostics”。
8保存画面并把它定义为起始画面。
9如果没有激活,那么需要在计算机启动选项中激活全局脚本运行系统。

现在当启动运行系统时,一旦被监视变量的状态发生改变,关于此变量状态的一条信息就会输出到 Global Script diagnostics 窗口。n

2.通过以下步骤创建全局脚本动作,以实现输出一条消息到对话窗口的同时也触发一条报警

No. 步骤
1 创建一个“ 二进制”类型的内部变量(该变量用于触发报警)。在本例中变量名称为 “Trigger”。
2 在报警记录中插入一条新的消息,配置内部变量“Trigger” 作为消息变量(可以根据工厂情况配置消息文本)。 n

同时在消息属性中激活以下选项 “仅为单个确认”,“控制中央信令设备 ”和“将被归档”。

3保存报警记录的改变然后关闭编辑器。
4打开全局脚本(ANSI C)创建新动作。
5在动作中编写以下程序函数: n

#include "apdefap.h"
int gscAction(void)
{
DWORD dwState = 0;
GetTagSWordState ("External_tag_1", &dwState);
if (dwState == 0)
{
//Tag status OK
printf ("Tag status Ok: [Statuscode (hex):%X]rn",dwState);
SetTagBit ("Trigger", FALSE);
}
else
{
//Tag status deviant
printf ("Tag status deviant: [Statuscode (hex):%X]rn",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 窗口,另外当该变量的状态不正常时也会触发一条报警。n

监视连接的状态
如果希望当连接完全断开时触发一个特定的报警,可以使用下面的程序代码。为此需要组态第二个消息和第二个触发变量。
n

No. 步骤
1. #include "apdefap.h"
int gscAction(void)
{
DWORD dwState = 0;
GetTagSWordState ("External_tag_1", &dwState);
if (dwState == 0)
{
//Tag status OK
printf ("Tag status Ok: [Statuscode (hex):%X]rn",dwState);
SetTagBit ("Trigger", FALSE);
SetTagBit ("Trigger_coection_interrupted", FALSE);
}
else if (dwState&0X0001)
{
SetTagBit ("Trigger_coection_interrupted", TRUE);
}
else
{
//Tag status deviant
printf ("Tag status deviant: [Statuscode (hex):%X]rn",dwState);
SetTagBit ("Trigger", TRUE);
SetTagBit ("Trigger_coection_interrupted", FALSE);
}
return (0);
}

重要提示
当被监视的变量是一个外部变量时,需要确认在数据块(DB)中为该变量选择了正确的数据类型。
如果这里使用了错误的数据类型,就会输出不同于“1”和“0”的十六进制的消息 。
关于状态代码的概述信息参见 WinCC 信息系统的以下章节(代码在输出中汇总)。.
使用 WinCC > ANSI-C for Creating Functions and Actions > ANSI-C Function Description > Standard Functions > Lists > Quality of Tags".
质量代码对其他变量也同样有效。.

更多信息
监视变量状态的脚本只能使用 ANSI-C 语言。关于不使用脚本监视变量状态的介绍在 WinCC 信息系统中以下的章节。
通讯 >通讯 - 诊断 > 变量质量 > 使用变量状态监视连接状态

关于使用全局动作进行状态监视的描述可以在 WinCC 信息系统以下的章节中找到。
通讯>通讯 - 诊断 >变量质量 >使用全局动作监视变量状态

关键字
连接故障,状态判断,变量状态, 493522, 416354, 21382197

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

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

相关推荐

发表回复

登录后才能评论