由于项目比较大,外部变量过两万了,且有一小部分数据需要在WINCC中处理后显示,所以需要利用全局脚本后台进行数据处理。
以前的时候由于项目比较小,所以没有感觉到问题,现在按照之前的方式做完后发现,WINCC运行系统直接崩溃了,按钮、画面、数据显示全部乱套了,将PAS文件夹下的C脚本文件剪切出去,系统就能恢复正常。
也试过调节脚本触发周期,将脚本的触发周期分开,但是用处不大
是不是WINCC的C全局脚本就不能大量的处理数据,全局VB还没试。
问题补充:
今天试着用VB进行数据处理,发现没有任何问题,个人感觉是由于我的画面切换以及画面内变量的变更全部都是用C脚本进行的。
再加上后台的全局C,导致同时运行的C太多,对资源的占用太大导致WINCC 的卡死。
不过这样的话,是不是说明WINCC的C脚本都是单线程运行的,所以才会出现上述的这种情况?
如果是,那可不可以改为多线程运行C脚本,该怎么样做?
最佳答案
此回答已完善
你的脚本是怎么写的?
你需要怎么处理?比如线性变换,可以在plc中或者wincc的变量属性中设置缩放范围.
你的读写变量怎么操作的?用组读写会比单个变量的效率高.
c和vbs都可以用组读写的概念。c语言参考:https://support.industry.siemens.com/cs/document/26712371/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%87%BD%E6%95%B0-settagmultiwait()-%E6%9D%A5%E5%86%99%E5%A4%9A%E4%B8%AA-wincc-%E5%8F%98%E9%87%8F-?dti=0&lc=zh-CN
vbs语言:
Dim group,mytag
Set group = HMIRuntime.Tags.CreateTagSet
''Add Tags to the Collection
group.Add "Motor1"
group.Add "Motor2"
''group.read''如果是要读数据,则直接用这行和下一行脚本例子。
''mytag=group(''Motor1'').value
''Set the Values of the Tags
group("Motor1").Value = 3
group("Motor2").Value = 9
''Write the Values to the DataManager
group.Write
提问者对于答案的评价:
嗯嗯,我去试试,谢谢指点
最佳答案作者回复:
c,vbs的脚本是并行的,你可以用这两种各写一部分脚本处理数据,效率会比单独一种脚本写的效率要高.
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc314914.html