接到某同事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腳本:

其實我還想建議他寫個函數直接調用,但是想想他的情況,那就算了吧,