接到某同事B的电话,说是一段Wincc里面的VBS脚本出现了问题:A按钮和B按钮,要求A按钮点击后,对plc某变量写1并等待5s后写0,在这5s期间如果点击B按钮,同样是对另外一个变量如此操作,则plc在5s内检测到两个变量都为1就执行一个逻辑。而同事采用了一段vbs脚本来实现5s的延时,大致如下:
其实之前我大致听闻过B同事的这件事,因为有同事K劝他用c脚本的sleep函数来实现,但是B同事说自己只会vbs不会c,于是同事K从网上搜来这段do until的代码给了他用。但是k同事也劝B同事模拟仿真测试一下,结果B同事不听,然后昨天到了现场就发现情况不对了,于是四处电话求救了。
我问了B同事的具体需求,先是建议他修改plc,把定时功能放在plc里面做,但是B同事说plc程序是老程序,不好动。
我又建议他用一个周期执行(譬如1s周期)来检测所有涉及的变量,如果有变量为1则开始计数(需要为每个变量定义一个wincc内部的整形变量用来计数),如此计数满了就算时间到。但是B同事说工作量太大....
最后我想到vbs和c脚本的进程其实是两个,于是建议他把另外一半的按钮改为c脚本。没想到后来B同事就去找了J同事,让人家帮他改C脚本。J同事给他写了一段样例,到了晚上,B同事照着样例改了一段正式的代码,又来找我,让我给他确认对不对!我说你在自己笔记本上仿真测试一下即可,我在手机上不能给你所谓“确认”代码的正确性!
今天我在自己笔记本上测试了一下c脚本和vbs脚本:
其实我还想建议他写个函数直接调用,但是想想他的情况,那就算了吧,