工控網(wǎng)首頁
>

應(yīng)用設(shè)計(jì)

>

Intouch For循環(huán)語句用法

Intouch For循環(huán)語句用法

2016/3/30 9:16:24

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] ... 語句或另一個(gè) 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,總計(jì)循環(huán)50次 執(zhí)行 FOR 循環(huán)時(shí), 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)時(shí)請記住以下規(guī)則: 1.FOR 循環(huán)可以嵌套。最大嵌套級數(shù)取決于可用的內(nèi)存與系統(tǒng)資源。 2.對于每個(gè) FOR 語句,必有一個(gè) 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)不會(huì)開始。

強(qiáng)制結(jié)束循環(huán) 您可以通過調(diào)用語句  EXIT FOR;  在任何時(shí)間退出循環(huán)。此語句使腳本繼續(xù)執(zhí)行緊接著循環(huán) NEXT 語句后的其他語句。 示例 下面的代碼段使用循環(huán)將大量的虛擬記錄插入數(shù)據(jù)庫表。如果插入記錄時(shí)發(fā)生錯(cuò)誤,則放棄循環(huán)以防止產(chǎn)生更多錯(cuò)誤。 FORCounter = 1 TO 1000 ResultCode= SQLInsert(ConnectionID, "BatchDetails","BindList1"); IFResultCode <> 0 THEN LogMessage("Errorcreating records!Aborting..."); EXIT FOR; ENDIF; NEXT;

循環(huán)對其它運(yùn)行時(shí)進(jìn)程的影響 執(zhí)行 FOR 循環(huán)時(shí), WindowViewer 中的所有其它運(yùn)行時(shí)進(jìn)程都暫停。包括以下進(jìn)程: 1.屏幕更新(動(dòng)畫鏈接、值顯示、趨勢等)。到循環(huán)完成之前不會(huì)發(fā)生任何移動(dòng),因此不能給動(dòng)畫對象使用 FOR循環(huán)。 2. I/O 通訊。例如,如果修改 FOR 循環(huán)中 I/O 標(biāo)記的值,則只有最終的迭代后面的值才會(huì)寫入 I/O 設(shè)備。 3. 其它腳本,包括異步 QuickFunction。 您可以通過將 FOR 循環(huán)放入異步 QuickFunction 來避免暫停其它運(yùn)行時(shí)進(jìn)程。

循環(huán)執(zhí)行的時(shí)間限制 為避免無限循環(huán),程序設(shè)置了一個(gè)時(shí)間限制, FOR 循環(huán)必須在這個(gè)時(shí)間限制內(nèi)完成執(zhí)行否則WindowViewer 會(huì)自動(dòng)終止循環(huán)它,并將一條關(guān)于終止的消息寫入 Log Viewer中。默認(rèn)缺省的循環(huán)時(shí)間限制為 5 秒??梢酝ㄟ^向應(yīng)用程序目錄中的 intouch.ini文件添加下面這行以對它進(jìn)行自定義循環(huán)時(shí)間: LoopTimeout=x 將 x 替換成以秒為單位的時(shí)間限制。 備注:時(shí)間限制僅在循環(huán)的 NEXT 結(jié)束循環(huán)語句中檢查。因此,循環(huán)的第一次總是會(huì)執(zhí)行,即便它花費(fèi)的時(shí)間比時(shí)間限制更長。

For循環(huán)的示例 以下腳本通過一個(gè)簡單的循環(huán)與一個(gè)間接標(biāo)記,使用 0 值來初始化 100 個(gè)標(biāo)記(Tag001 到 Tag100): DIMCounter AS INTEGER;   FOR Counter = 1 TO 100 IndirectInteger.Name= "Tag" + Text(Counter, "000"); IndirectInteger.Value= 0;   NEXT; 以下腳本通過兩個(gè)嵌套的循環(huán)與一個(gè)間接標(biāo)記,使用 0 來初始化 1000 個(gè)標(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)型

新大陸自動(dòng)識別精彩亮相2024華南國際工業(yè)博覽會(huì)

派拓網(wǎng)絡(luò)被Forrester評為XDR領(lǐng)域領(lǐng)導(dǎo)者

智能工控,存儲強(qiáng)基 | 海康威視帶來精彩主題演講

展會(huì)|Lubeworks路博流體供料系統(tǒng)精彩亮相AMTS展會(huì)