工控網(wǎng)首頁
>

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

>

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)變量值來進行。循環(huán)一直執(zhí)行到循環(huán)變量值達到設(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)標記所遞增或遞減的值;如果不指定此值,則使用缺省值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 為負數(shù),則 InTouch HMI 測試 LoopTag 是否小于EndExpression)。 3 執(zhí)行循環(huán)內(nèi)的語句。 4 按 ChangeExpression 的值(除非另外指定,否則設(shè)為 1)遞增 LoopTag。 5 重復(fù)步驟 2 到 4直到LoopTag達到 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ù)值標記(或局部變量),比如整形標記。 4.StartExpression、EndExpression以及ChangeExpression必須是賦值為數(shù)值結(jié)果的有效表達式,比如整形標記。 5.如果 ChangeExpression 為正, EndExpression 必須大于 StartExpression ;反之如果 ChangeExpression 為負,StartExpression 必須大于 EndExpression。否則循環(huán)不會開始。

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

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

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

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

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

智能工控,存儲強基 | ??低晭砭手黝}演講

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