WINCC 全局脚本执行是多线程还是单线程

WINCC全局脚本的执行机制本质上是单线程的,但通过特定设计可实现部分多线程效果。
一、全局脚本的核心线程机制
计划任务中的脚本
VBS脚本:所有VBS脚本在同一个线程中顺序执行,若脚本执行时间较长或数量较多,会导致后续脚本排队等待。
C脚本:所有C脚本同样在另一个独立线程中顺序执行,但与VBS线程互不干扰。
阻塞风险:若计划任务中存在耗时操作(如复杂计算、外部通信),会阻塞同线程内的其他脚本执行。
属性任务中的脚本
VBS和C各占一线程:属性任务中的VBS与C脚本分别拥有独立线程,执行时互不影响。例如,画面属性中的VBS脚本修改变量时,C脚本可同时执行其他逻辑。
二、多线程效果的实现途径
事件脚本的线程分离
触发事件中的VBS与C:事件脚本(如按钮点击、数据变化)中的VBS和C脚本分别使用独立线程,可并行执行。例如,按钮点击触发的VBS脚本更新变量时,C脚本可同时处理数据校验。
函数列表的共享线程:事件中的VBS脚本与函数列表共享同一线程,若VBS脚本执行耗时操作,会阻塞函数列表中的其他脚本。
通过.NET控件间接实现多线程
控件循环中断事件:利用.NET技术创建自定义控件,将其拖入画面后,控件的循环中断事件可单独创建线程。例如,将部分脚本放入控件的TimerClicked事件中,实现与主线程并行的执行。
资源限制:画面上仅允许放置一个此类控件,超出限制会导致画面进程异常退出。此方法适用于紧急场景,但非推荐方案。
三、实际应用中的线程分布
WINCC脚本系统共包含六个线程,具体分布如下:

file

四、优化建议与注意事项
避免耗时操作
减少全局脚本中的复杂计算、外部通信等耗时操作,防止阻塞线程。若需处理耗时任务,可考虑拆分为多个短任务或使用异步机制。
合理分配脚本类型
将实时性要求高的逻辑(如变量更新)放入事件脚本或属性任务,利用其独立线程特性。
将批量处理逻辑(如数据统计)放入计划任务,通过C脚本的独立线程提升效率。
谨慎使用.NET控件多线程
仅在必要时使用.NET控件实现多线程,并严格限制控件数量(画面上仅一个),避免资源冲突。
调试与监控
利用HMIRuntime.Trace语句输出脚本执行日志,定位阻塞点。
通过任务管理器监控PdlRt.exe进程资源占用,及时发现异常。

发表评论