搜索
写经验 领红包

wicc脚本程序(wicc的脚本编程有什么用)

导语:什么是WinCC的脚本线程,引起线程堵塞的原因有哪些?

WinCC同一时间只能处理一个动作。如果有多个动作要执行,则需要排队——先发生的动作先执行,后发生的动作后执行。一旦某个或多个动作执行时间较长,就会影响后面动作的执行,最终可能导致整个动作队列越排越长。

WinCC中脚本队列的最大长度是5000条,如果排队的脚本动作超过5000条,WinCC会给出错误信息。

一、脚本线程

WinCC的脚本分为3类:全局脚本动作、画面运行系统的属性任务和事件任务。WinCC在处理这3类脚本时,是分成3个线程处理的,即有3条动作脚本队列,相互不影响。另外,VBS脚本与C脚本运行在不同的线程里。所以,WinCC一共有6条脚本处理线程。

WinCC提供的脚本诊断工具apdiag.exe可让我们更好的理解脚本线程。脚本诊断工具位于WinCC的安装目录下的"uTools"文件下,如图1所示。

如图2所示,在"apdiag.exe"工具打开"输出窗口",然后执行菜单命令"Info->Count of Actionos in RequestQueue",即可查看当前脚本线程的排队情况。

如图3所示,为某一时刻的线程队列,我们在每一条线程中都通过编程,人为让其发生"堵塞",以方便我们认识"线程"。其中:

"PDLRuntimeSystem"为画面运行系统的线程,包括"属性任务"和"事件任务"两条线程;"红线"部分为"属性任务"线程,当前有146条动作在排队;"绿线"部分为"事件任务"线程,当前有19条脚本等待执行;"GSC_RT"为全局脚本线程,也就是全局脚本编辑器中定义的动作。当前有422个动作等待执行。

WinCC中不同的"线程"之间是相互独立的,以图3为例,当前全局脚本线程已经有422条动作等待执行,比较"拥塞"了。但即使这样,其他相对"轻松"的线程也不会为它分担负荷。"线程"之间互不干涉,老死不相往来。

"apdiag.exe"是一款诊断脚本的强大工具,至于它的用法,我们之后再做详细讨论。

二、导致线程堵塞的原因

"线程"堵塞会严重"拖慢"画面,影响系统的性能,我们在工程应用中,要尽量避免线程堵塞的发生。那么有哪些因素会导致线程堵塞呢?

1、触发动作的循环时间太短

若触发动作的"循环时间"设置的太短,动作就会频繁触发执行,若一次动作尚未执行完成,下一次动作就"触发"了,则在本次动作未执行完之前,下一次动作只能在"线程队列"中等待。这样,每次动作都将滞后,从而形成"堵塞"。

这是同一个动作引发的堵塞情况。

2、脚本中使用多次循环

脚本中过多的使用"循环"语句,会使得动作的"一次"执行时间太长,在此期间,其他动作可能等待执行,但由于本动作尚未执行完,从而可能引发堵塞。

这是一个动作的编程不当,导致其他动作堵塞的情况。

3、使用了Sleep()、beep()等函数

sleep()、beep()等函数会使本脚本中断,直到该函数执行完成,才继续执行脚本程序。这势必会引起其他动作的堵塞。

4、使用了"弹窗"或需要其他程序响应

如图4所示,在"圆1"的鼠标事件中,配置了C动作。鼠标点击"圆1"弹出一个弹窗"消息框",需用户点击确认,才会释放该线程。在点击"确定"前,"事件任务"线程中的其他动作都将在线程队列中等待,从而引发线程堵塞。

<<上一篇《WinCC的同步读写与异步读写》

本文内容由小玥整理编辑!