Schleifenverarbeitung (Loop)

Wenn das erstellte Robotersteuerprogramm aus Multi-Tasking besteht und zudem Aufgaben mit Endlosschleifen enthält, kann das System instabil werden und die Verbindung zu Epson RC+ kann getrennt werden.

Die Steuerung erkennt Aufgaben mit Endlosschleifen. Wenn eine mögliche Beeinträchtigung des Systems erkannt wird, tritt der folgende Fehler auf und das Programm wird angehalten.
Wenn der Fehler auftritt, ändern Sie das Programm und stellen Sie sicher, dass keine Endlosschleifen eingerichtet sind.
Fehlercode: 2556
Fehlermeldung: Excessive loop was detected (Es wurde eine übermäßige Schleife erkannt). Reduzieren Sie die Anzahl der Aufgaben in Schleifen oder setzen Sie „Wait“ (Warten) zurück

Führen Sie möglichst keine Verarbeitung wie Endlosschleifen oder ähnliche Verarbeitung aus.

Führen Sie in der Schleifenverarbeitung den Befehl „Wait“ oder einen ähnlichen Befehl aus und vermeiden Sie es, die CPU zu belegen, wenn Berechnungen Schleifen erfordern oder auf E/A-Signale gewartet wird.
Es ist unkritisch, wenn eine Schleife Wait-Befehle erfordert, z. B. „Wait“, Roboter-Bewegungsbefehl, „Print“ und „Wait Net“.

WICHTIGSTE PUNKTE


Eine Endlosschleife liegt in folgendem Fall vor:
Wenn in einer Schleife nur Befehle ohne „Wait“ verwendet werden, z. B. Bedienanweisung, Zuweisungsbefehl und E/A-Prüfbefehl

Beispiel 1: Ausgangsport „2“ einschalten, wenn Eingangsport „0“ EIN ist
Beispiel für ein Programm, das einen Fehler verursachen kann

               Do  
                  If Sw(0) = On Then  
                      On(2)  
                      Exit Do  
                  EndIf  
               Loop  

Korrekturbeispiel

               Wait Sw(0) = On  
               On(2)  

Beispiel 2: Ausführen einer großen Anzahl von Berechnungen in einer Schleifenstruktur
Beispiel für ein Programm, das einen Fehler verursachen kann

               For i = 0 To 10000  
                   For j = 0 To 10000  
                       a = a + 1  
                   Next  
               Next  

Korrekturbeispiel

               For i = 0 To 10000  
                   For j = 0 To 10000  
                       a = a + 1  
                   Next  
                   Wait 0.01     ' Wait ausführen, um die CPU nicht zu belegen  
               Next