Intouch For循環(huán)語句用法
For循環(huán)可以反復(fù)執(zhí)行一段代碼。InTouch HMI 僅支持 FOR循環(huán)。FOR循環(huán)按所監(jiān)視的每次循環(huán)迭代產(chǎn)生的遞增或遞減的數(shù)值循環(huán)變量值來進(jìn)行。循環(huán)一直執(zhí)行到循環(huán)變量值達(dá)到設(shè)定值。 For循環(huán)語法如下: FOR LoopTag = StartExpression TO EndExpression [STEP ChangeExpression] ... 語句或另一個 FOR 循環(huán) ... NEXT; StartExpression, EndExpression 與ChangeExpression 共同定義迭代次數(shù)。 StartExpression 設(shè)置循環(huán)范圍的開始值。EndExpression 設(shè)置循環(huán)范圍的結(jié)束值。 STEPChangeExpression 可選擇設(shè)置每次循環(huán)迭代過程中循環(huán)標(biāo)記所遞增或遞減的值;如果不指定此值,則使用缺省值1,即每次循環(huán)對LoopTag加1。 例子e.g: FOR i=1 TO 100 STEP 2 ...........語句 NEXT; //表示每次循環(huán)i加2,總計循環(huán)50次 執(zhí)行 FOR 循環(huán)時, InTouch HMI: 1 將 LoopTag 設(shè)置為 StartExpression 的值。 2 測試 LoopTag 是否大于 EndExpression。如果是,InTouch HMI 退出循環(huán)。(如果ChangeExpression 為負(fù)數(shù),則 InTouch HMI 測試 LoopTag 是否小于EndExpression)。 3 執(zhí)行循環(huán)內(nèi)的語句。 4 按 ChangeExpression 的值(除非另外指定,否則設(shè)為 1)遞增 LoopTag。 5 重復(fù)步驟 2 到 4直到LoopTag達(dá)到 EndExpression的值。 使用 FOR 循環(huán)時請記住以下規(guī)則: 1.FOR 循環(huán)可以嵌套。最大嵌套級數(shù)取決于可用的內(nèi)存與系統(tǒng)資源。 2.對于每個 FOR 語句,必有一個 NEXT 結(jié)束語句。與If...else語句相同,在同一嵌套級別中, NEXT 語句總是應(yīng)用于前面最接近的 FOR 語句。 3.LoopTag必須是數(shù)值標(biāo)記(或局部變量),比如整形標(biāo)記。 4.StartExpression、EndExpression以及ChangeExpression必須是賦值為數(shù)值結(jié)果的有效表達(dá)式,比如整形標(biāo)記。 5.如果 ChangeExpression 為正, EndExpression 必須大于 StartExpression ;反之如果 ChangeExpression 為負(fù),StartExpression 必須大于 EndExpression。否則循環(huán)不會開始。
強(qiáng)制結(jié)束循環(huán) 您可以通過調(diào)用語句 EXIT FOR; 在任何時間退出循環(huán)。此語句使腳本繼續(xù)執(zhí)行緊接著循環(huán) NEXT 語句后的其他語句。 示例 下面的代碼段使用循環(huán)將大量的虛擬記錄插入數(shù)據(jù)庫表。如果插入記錄時發(fā)生錯誤,則放棄循環(huán)以防止產(chǎn)生更多錯誤。 FORCounter = 1 TO 1000 ResultCode= SQLInsert(ConnectionID, "BatchDetails","BindList1"); IFResultCode <> 0 THEN LogMessage("Errorcreating records!Aborting..."); EXIT FOR; ENDIF; NEXT;
循環(huán)對其它運(yùn)行時進(jìn)程的影響 執(zhí)行 FOR 循環(huán)時, WindowViewer 中的所有其它運(yùn)行時進(jìn)程都暫停。包括以下進(jìn)程: 1.屏幕更新(動畫鏈接、值顯示、趨勢等)。到循環(huán)完成之前不會發(fā)生任何移動,因此不能給動畫對象使用 FOR循環(huán)。 2. I/O 通訊。例如,如果修改 FOR 循環(huán)中 I/O 標(biāo)記的值,則只有最終的迭代后面的值才會寫入 I/O 設(shè)備。 3. 其它腳本,包括異步 QuickFunction。 您可以通過將 FOR 循環(huán)放入異步 QuickFunction 來避免暫停其它運(yùn)行時進(jìn)程。
循環(huán)執(zhí)行的時間限制 為避免無限循環(huán),程序設(shè)置了一個時間限制, FOR 循環(huán)必須在這個時間限制內(nèi)完成執(zhí)行否則WindowViewer 會自動終止循環(huán)它,并將一條關(guān)于終止的消息寫入 Log Viewer中。默認(rèn)缺省的循環(huán)時間限制為 5 秒。可以通過向應(yīng)用程序目錄中的 intouch.ini文件添加下面這行以對它進(jìn)行自定義循環(huán)時間: LoopTimeout=x 將 x 替換成以秒為單位的時間限制。 備注:時間限制僅在循環(huán)的 NEXT 結(jié)束循環(huán)語句中檢查。因此,循環(huán)的第一次總是會執(zhí)行,即便它花費(fèi)的時間比時間限制更長。
For循環(huán)的示例 以下腳本通過一個簡單的循環(huán)與一個間接標(biāo)記,使用 0 值來初始化 100 個標(biāo)記(Tag001 到 Tag100): DIMCounter AS INTEGER; FOR Counter = 1 TO 100 IndirectInteger.Name= "Tag" + Text(Counter, "000"); IndirectInteger.Value= 0; NEXT; 以下腳本通過兩個嵌套的循環(huán)與一個間接標(biāo)記,使用 0 來初始化 1000 個標(biāo)記(Line01_Tag001 到 Line10_Tag100): DIMLineCounter AS INTEGER; DIMTagCounter AS INTEGER; FORLineCounter = 1 TO 10 FOR TagCounter = 1 TO 100 IndirectInteger.Name = "Line" +Text(LineCounter,"00") + "_Tag" +Text(TagCounter, "000"); IndirectInteger.Value = 0; NEXT; NEXT;
提交
超越傳統(tǒng)直覺,MATLAB/Simulink助力重型機(jī)械的智能化轉(zhuǎn)型
新大陸自動識別精彩亮相2024華南國際工業(yè)博覽會
派拓網(wǎng)絡(luò)被Forrester評為XDR領(lǐng)域領(lǐng)導(dǎo)者
智能工控,存儲強(qiáng)基 | ??低晭砭手黝}演講
展會|Lubeworks路博流體供料系統(tǒng)精彩亮相AMTS展會