WinCC OA-CTRL-脚本执行流程及作用域

Posted indus-eric

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WinCC OA-CTRL-脚本执行流程及作用域相关的知识,希望对你有一定的参考价值。

题外话

近日,发现了一张有助于大家理解OA架构的图,在此分享给大家

有关OA架构的文章大家可以参考 WinCC OA前言-透视OA软件架构

技术图片


Control 脚本执行流程

我们知道 control 脚本 作为OA系统里的粘合剂,帮助WinCC OA 实现了在线开发,在使用过程中难免对contrtol的执行步骤及流程有所困惑,比如全局变量该怎么设置,

今天就带领大家仔细研究下control的启动及加载流程.

流程图

技术图片

上图总结了 control 运行的流程, 我们现在假设有一个string类型的变量tag1,需要在 Control Manager 及Panels 中访问,

OK ,让我们操练起来

1) 创建全局变量 tag1

我们在项目的Liraries文件夹下 创建了globalTest.ctl文件

技术图片

2) Control Manager 引用并修改

我们在control manager 启动文件里 添加了jiang.ctl

技术图片

jiang.ctl 负责引入 刚刚创建的globalTest.ctl 库文件 并修改tag1内容,

技术图片

3) 创建第一个测试用panel

新建一个测试用panel script1.pnl 并在ScopeLib 里 引用“globalTest.ctl”,同时我们定义一个tag2

我们在initialize 事件里分别打印 tag1 及tag2


技术图片


重启Control Manager 及运行script1.pnl 注意观察LogViewer

技术图片

我们看到 全局变量 都打印出来了 但是在control manager 里面修改的内容  script1.pnl并没有拿到

重点

前几篇文章  我们说过  WinCC OA 里的Control ManagerUser Interface(本文的gedi),都是独立的进程,

OA为了让全局变量更加安全可控,并没有采用全局共享内存的方法,而是在每个进程引用全局变量的时候,分别拷贝一份副本供自己使用

因此 自定义的库文件jiang.ctl里面的tag1 才会出现上图现象,但是相同进程里的操作是同一份全局变量,我们可以做个小实验

4) 创建嵌入式panel并测试

技术图片

1)让我们新建一个script2.pnl,同样在ScopeLib里使用#uses "globalTest.ctl"引用全局变量,之后在面板里面放置一个按钮, 按钮用来打印tag1并加上标记

2) 将script2.pnl 拖拽放入script1.pnl

3) 在script1.pnl内新增一个按钮 打印tag1 并加上标记panel1 marked;

运行这个复合面板 script1.pnl 打印结果如下

技术图片

三次点击 分别都加上了各自的印记

思考?

如何在Control Manager 与 User Interface 里同时操作一个全局变量?

还记得我们说过 Control Manager 与User interface 都是通过EV 发送及接受消息的,结合之前说过的 定时器 ,相信大家一定会想到方法


欢迎扫码 关注我们

技术图片

以上是关于WinCC OA-CTRL-脚本执行流程及作用域的主要内容,如果未能解决你的问题,请参考以下文章

WinCC OA-CTRL-使用CtrlHTTP对外开放数据接口

WinCC OA-CTRL-使用CtrlHTTP对外开放数据接口

WinCC OA-CTRL-图形界面の定时器

WinCC OA-CTRL-图形界面の定时器

WinCC全局脚本的定时触发?

使用wincc vbs脚本查找进程及如何运行进程