抖音粉丝群1
『7x24小时有问必答』

本帖最后由 自控技术FAQ 于 2026-5-17 07:36 编辑

WINCC C脚本是大家在组态项目时常用到的功能,但在使用过程中有这样那样的疑惑或问题,经常在各论坛看到相关帖子,此文总结一些相关内容,以供学习交流。

主要内容:
1、全局脚本和画面脚本,有关执行问题
2、脚本全局C变量的使用
3、脚本中调用外部DLL

1全局脚本和画面脚本,有关执行问题

1.WINCC中的脚本分两块:画面中的脚本和全局动作脚本

只有在运行系统中需要执行全局动作脚本时,才需要在WINCC启动项中添加激活“全局脚本运行系统”。

640.jpg

就是说“全局脚本运行系统”激活与否不影响画面脚本的执行,和项目函数的调用及执行。如下图,在画面脚本中调用全局脚本中定义的项目函数add。

640.jpg
2.WINCC脚本的应用进程名为script.exe

WINCC中对于全局动作,所有脚本为同一线程。下面通过一个测试来验证。

建立两个全局动作脚本a1、a2
640.jpg
640.jpg

脚本包含错误语句:除数为0(注意:此语法错误在脚本编译时不会报错,所以说写脚本时一定要细心,即使编译通过的脚本,在执行时也可能会出现问题

两个脚本添加相同的触发器:如内部变量t2有变化时执行
(附:WINCC内部基本数据类型的变量,初始值默认为0,也可以在定义变量时设置
640.jpg
这里必须要了解的一点,由变量变化触发的全局动作脚本或画面中的脚本,在“全局脚本运行系统”被激活或该脚本所在的画面被打开时,即使触发变量的值没有变化脚本都会执行一次,在组态的时候一定要注意。


在测试画面中添加一“GSC 诊断类型的应用程序窗口”,该窗口可以打印出脚本执行的相关信息。

当执行全局动作后,从GSC诊断窗口的信息可以看出,全局动作脚本a1、a2的线程ID一样的都是15848
640.jpg
对于单线程的全局动作脚本,可以理解为如下图执行:
640.jpg

既然知道了这一点,在写脚本的时候就要注意:如果有任意一个全局动作脚本无法返回,其它全局动作脚本都将无法执行

下面以一个例子来测试:

改写a1、a2脚本如下:a1由变量t1有变化触发,使用while(1)让a1动作进入循环;a由变量t2有变化触发。并使用printf在GSC诊断窗口打印出脚本执行信息。

640.jpg
640.jpg

启动WINCC,首先点击按钮执行a1脚本,此时a1脚本执行并进入死循环。然后在点击按钮执行a2脚本,可GSC诊断窗口没有a2执行信息,说明a2脚本无法执行。




附:
在测试过程中发现,当有脚本进入死循环后,在退出WINCC运行系统时,取消激活过程会卡死。
640.jpg
一直等到弹出如下界面,选择“退出动作”,才能继续完成WINCC退出。
640.jpg

由于篇幅限制,关于脚本全局C变量的使用脚本中调用外部DLL,下篇文章分享给大家。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码