我的问题是这样,在一个WINCC项目中有若干脚本,在执行中发现随机出现一些脚本执行很慢,有些会快,因此想了解一下脚本的执行机理,或者有没有有效的方法避免这样的问题。
我的系统是这样的:
WINCC画面中(只有一个画面)有12个串口控件,每个控件oncomm事件用来接收串口数据,脚本用来分析数据,然后通过一个函数1查询数据库信息,返回数据进一步处理。
全局脚本中有7加工完成后的全局脚本插入信息,信息插入也是通过另一个函数2插入到数据库中。

我的现象是这样的:
WINCC画面中有若干存放数据的输入/输出域(内部变量),接受的数据存放在一个Buffer中,当查询数据通过之后,把Buffer的数据转移到另一个输入/输出域中,然后清空Buffer。
因为观察到Buffer有数据,到清空Buffer的时间比较长,有2-3秒(这时间随机出现,有时候很快,有时候很慢,有的工位很快,有的很慢,其中有一个工位慢的概率比较高)。
如果此时不允许其他控件的脚本,只运行这一个慢的工位,执行速度很快,几乎秒传。
电脑运行情况:
后台数据库运行,占用CPU25%以上,内存72%,如果此时WINCC运行全部控件,CPU28%~30%以上,内存78%
我想请教的是:
1、如果我记得没错的话,WINCC的脚本系统分为全局脚本和画面脚本,在执行中互不干扰,即画面脚本的执行顺序不与全局脚本排序执行。画面周期已设定为变化时更新。画面中控件的oncomm事件,是属于画面脚本,还是全局脚本?
2、控件脚本的执行是单一往下,还是并行往下?
3、感觉脚本的执行很快,感觉好像是函数调用数据库拖了后腿,向这种多个脚本调用一个共同的函数,有没有可以优化执行时间的方法?
希望各位大神不吝赐教!