ループ処理
作成されたロボット制御プログラムが、マルチタスクで構成され、さらに無限ループをする複数のタスクが存在する場合、システムが不安定となり、Epson RC+との接続が切断する可能性があります。
コントローラーでは、無限ループタスクの検出を行っています。システムに影響を与える可能性が検出された場合は、以下のエラーが発生しプログラムを停止します。
エラーが発生した場合は、プログラムを修正し無限ループとならないようにしてください。
エラーコード: 2556
エラーメッセージ: 過剰なループを検出しました。ループしているタスクを減らすか、Waitを再設定してください
無限ループ、および無限ループと同様な処理は、できるだけ行わないでください。
ループを必要とする演算や、I/O待ちを行う場合は、Wait命令などをループ処理内で実行し、CPUの占有を回避してください。
Wait命令, ロボット動作命令, Print命令, WaitNet命令など、Waitをともなう命令がループ内で使用されている場合は問題ありません。
キーポイント
無限ループは、以下の場合に発生します。
ループ内で使用されている命令が、演算命令, 代入命令, IOチェック命令などWaitが発生しない命令のみで作成されている場合。
例1: 入力ポート“0”がオンしたときに、出力ポート“2”をオンする場合
問題が発生する可能のあるプログラム例
Do
If Sw(0) = On Then
On(2)
Exit Do
EndIf
Loop
修正例
Wait Sw(0) = On
On(2)
例2: ループ構造で大量の演算を行う場合
問題が発生する可能のあるプログラム例
For i = 0 To 10000
For j = 0 To 10000
a = a + 1
Next
Next
修正例
For i = 0 To 10000
For j = 0 To 10000
a = a + 1
Next
Wait 0.01 ' Waitを実行しCPUの占有を回避
Next
← 機能制限 CV1/CV2でのカメラ検索 →