工控網首頁
>

應用設計

>

Intouch For循環語句用法

Intouch For循環語句用法

2016/3/30 9:16:24

For循環可以反復執行一段代碼。InTouch HMI 僅支持 FOR循環。FOR循環按所監視的每次循環迭代產生的遞增或遞減的數值循環變量值來進行。循環一直執行到循環變量值達到設定值。 For循環語法如下: FOR   LoopTag = StartExpression    TO   EndExpression    [STEP ChangeExpression] ... 語句或另一個 FOR 循環 ... NEXT; StartExpression, EndExpression 與ChangeExpression 共同定義迭代次數。 StartExpression 設置循環范圍的開始值。EndExpression 設置循環范圍的結束值。 STEPChangeExpression 可選擇設置每次循環迭代過程中循環標記所遞增或遞減的值;如果不指定此值,則使用缺省值1,即每次循環對LoopTag加1。 例子e.g:   FOR i=1 TO 100 STEP 2 ...........語句   NEXT; //表示每次循環i加2,總計循環50次 執行 FOR 循環時, InTouch HMI: 1 將 LoopTag 設置為 StartExpression 的值。 2 測試 LoopTag 是否大于 EndExpression。如果是,InTouch HMI 退出循環。(如果ChangeExpression 為負數,則 InTouch HMI 測試 LoopTag 是否小于EndExpression)。 3 執行循環內的語句。 4 按 ChangeExpression 的值(除非另外指定,否則設為 1)遞增 LoopTag。 5 重復步驟 2 到 4直到LoopTag達到 EndExpression的值。 使用 FOR 循環時請記住以下規則: 1.FOR 循環可以嵌套。最大嵌套級數取決于可用的內存與系統資源。 2.對于每個 FOR 語句,必有一個 NEXT 結束語句。與If...else語句相同,在同一嵌套級別中, NEXT 語句總是應用于前面最接近的 FOR 語句。 3.LoopTag必須是數值標記(或局部變量),比如整形標記。 4.StartExpression、EndExpression以及ChangeExpression必須是賦值為數值結果的有效表達式,比如整形標記。 5.如果 ChangeExpression 為正, EndExpression 必須大于 StartExpression ;反之如果 ChangeExpression 為負,StartExpression 必須大于 EndExpression。否則循環不會開始。

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

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

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

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

審核編輯(
王靜
)
投訴建議

提交

查看更多評論
其他資訊

查看更多

超越傳統直覺,MATLAB/Simulink助力重型機械的智能化轉型

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

派拓網絡被Forrester評為XDR領域領導者

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

展會|Lubeworks路博流體供料系統精彩亮相AMTS展會