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

题外话

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

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

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


Control 脚本执行流程

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

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

流程图

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

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

OK ,让我们操练起来

1) 创建全局变量 tag1

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

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

2) Control Manager 引用并修改

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

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

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

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

3) 创建第一个测试用panel

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

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


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


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

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

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

重点

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

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

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

4) 创建嵌入式panel并测试

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

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

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

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

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

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

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

思考?

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

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


欢迎扫码 关注我们

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

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

上一篇:[转]C#究竟能给开发者带来什么


下一篇:Oracle中的SQL%ROWCOUNT