我在WINCC中使用OPC通道读取kepserverEX中建议的变量。但读取过程中因为通讯的问题经常读到错误信号如4999等信号并显示在画面中,有时还会记录到归档数据中,使用趋势图中突然会显示一下超高数据。
我试图建立内部变量,当读取值大于设定值时,将变量值替换为之前的数据,但基本没什么效果,代码见以下
If HMIRuntime.Tags("TT_101_PV").Read>=1200 Then
HMIRuntime.Tags("TT_101_PV").WRITE HMIRuntime.Tags("TT101").Read,1
Else
HMIRuntime.Tags("TT101").WRITE HMIRuntime.Tags("TT_101_PV").Read,1
End If
请教各位如果处理,谢谢!
最佳答案
因为TT_101_PV是你从现场读过来的数据,这个数据应该是现场仪表仪器实时刷新的吧?即使你将该值超限处理,但是很快又被OPC刷新覆盖了,因此你的办法不可行。
可以试试在全局脚本中,将该数据预处理下,再直接使用,包括归档。
假设内部变量是“TT101”写上如下脚本:
float n;
n=GetTagFloat("TT_101_PV");
if(n<1200.0)
SetTagFloat("TT101",n);
以上脚本实现功能是,只有读取的过程值小于1200.0,才将该值写到内部变量中去;如大于1200.0则该SetTagFloat指令不执行,因此TT101自然保存就是上次的正确值,该值不会刷新。
归档里直接使用TT101变量即可。
提问者对于答案的评价:
已按照建议操作,归档及画面中引用的变量均使用内部变量就OK了。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc175588.html