各位大佬好,初学代码,有很多疑问请教
wincc里变量从别的地方录入后,它的数值是在不断变化的,在变量归档后可以在表格控件里显示,
如果我想对表格里的某列数据进行运算操作,实际就是把某个变量的历史值做一次运算(类似加权平均),得到一个新的数值,按这样的数据操作再录入新变量以新表格显示,这样不会对原变量进入的数值造成影响,只是用新变量在原变量基础上做了个运算然后显示而已。
但是遇到的问题是,现在现成的在线表格没法对数据操作(也有可能是我太菜),所以我就想着把原变量的归档写入ssms的一个表里,在wincc全局脚本里用vbs做运算,连接语句写完了,到了光标使用的时候有又问题了,我原本是打算用两个光标,一个用来顺序执行脚本(wincc里的vbs用不了sleep,我又想让它数值一秒计算一次,所以我用定时器和一个内部变量read,write,数值加1做的定时器),然后我开始做循环,因为牵扯到加权平均的计算,所以当时想的是能不能拿第二个光标一边定位置一边field列来写入数值,读写都是可以实现的,但是为了触发定时循环这个功能,我就使用了wincc内部变量,这样的结果是加权平均每次计算不准,我觉得可能是wincc采集值和归档值的问题,最小只能设置到500ms,这样的误差让人难以接受,所以我不能用内部变量而只能用程序自建的虚拟的变量,但是没有sleep就无法定时循环,这样我在给新变量录入值时就会数值录得很快导致我的表格不能按1s一次数据得变化走,这地方的我后来想了下,想用双层循环类似九九乘法表的程序,但是虚拟变量不能存值啊,生存期就是这个程序,我的内部变量因为在wincc里所以值是会存储的,至此我发现做不下去了。
当下考虑最简单的实现方法,想着将我原始的变量的显示放在一个控件表格中(因为很多的控件其实都没用过也不知道该怎么用,不知道有没有这样的表格控件),这个表格有类似excel里函数关联两个单元格的操作,这样通过它的脚本我将该列数值录入我的新变量,功能就实现了,但是我太菜了,各位大佬有知道的或者更有效的方法实现这个功能吗?感谢!
ps:图片中,所有的Tag均为wincc内部变量,orecordset.move是第一个光标移动位置,b是用来做循环的变量,Tag2是wincc里面拿来做定时器的内部变量,w是VBS循环索引变量,x变量无实际意义,只是为了实现累加的一个过程变量,l变量是做完加权平均后的输出变量,Tag1是L录入的用在wincc里的新变量,也就是需要的用来显示在表格里的变量。Tag9是累加算法用的储存值和循环的wincc内部变量,Tag10仅仅是我在IO域用来判断程序是否出错的变量,无意义。