ループ処理

作成されたロボット制御プログラムが、マルチタスクで構成され、さらに無限ループをする複数のタスクが存在する場合、システムが不安定となり、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