Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched.
Close
Ich möchte einen Rubik's Cube mit Roboter, Kamera und Pi lösen.
Mit der Kamera lese ich den Status des Würfels ein, der Roboter führt die benötigten Bewegungen mit dem Würfel aus und der Pi ist für die Steuerung und
Berechnung zuständig.
Das einlesen des Würfels klappt ohne Probleme und auch das Verdrehen des Würfels via Roboter.
Auf dem Pi läuft die neuese Codesys-Version 3.5.14.0 Außerdem habe ich eine Shell-Datei, die mir bei Übergabe des aktuellen Status des Würfels den Lösungsweg
für den Roboter in ein Textdokument auf den Pi schreibt. Dieses lese ich bei Codesys mit dem Befehl SysProcess._(pszCommand:='/home/pi/list.sh'..., aus und übergebe den Lösungsweg an den Roboter.
Lasse ich das Programm einmal durchlaufen funktioniert alles ohne Probleme.
Nun zum Problem:
Wenn ich nun jedoch ein zweites mal den Würfel lösen lassen möchte bekomme ich in Codesys die Fehlermeldung: "AUSNAHMEFEHLER" beim erneuten Aufrufversuch des Shell Skriptes.
Starte ich den Pi ein mal mit "sudo reboot" neu, lässt sich der Würfel wieder lösen. Starte ich allerdings nur die Codesys-Runtime mit "sudo restart CodesysControl" neu,
so bekomme ich wieder den gleichen Fehler.
Dies lässt natürlich vermuten, dass sich das Shell - Skript nicht richtig beendet o.ä.. Allerdings kann ich das Shell-Skript direkt über die Shell des Pi mehrmals hintereinander
und sogar mehrmals parallel ohne Probleme laufen lassen. Außerdem konnte ich nach einmaligem Durchlauf des (Codesys)Programms keine Zombie Prozesse via "htop" entdecken.
Daher vermute ich, dass bei der Codesys - Shell - Kommunikation etwas fehlschlägt.
Das Shell-Skript rufen wir bei Codesys über den Befehl SysProcess._(pszCommand :=algorithm_command, pszSTDOut:=test_string,..... auf. (siehe Screenshot)
Beim trouble-shooting habe ich zusätzlich festgestellt, dass jedes Unterprogramm genau zwei mal direkt hintereinander durchlaufen wird, obwohl ich eine standardmäßige Schrittkette für die Aufrufe der Unterprogramme verwende. (siehe Screenshot)
Allerdings werden die Unterprogramme auch im ersten Durchlauf zwei mal durchlaufen.
Über neue Lösungsansätze würde ich mehr sehr freuen
Da dies mein erster Eintrag in diesem Forum ist, hoffe ich das ich nichts vergessen habe. Falls ihr noch mehr Informationen oder Screenshots benötigt sagt mir doch bitte bescheid.
Vielen Dank im Voraus und beste Grüße
Lars
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi,
denke du musst ins SPS Log schauen um mehr info über die Exception zu bekommen.
SysProcess auch in einer eigenen Task aufrufen - machst du das?
Diese while für SysProcess ? Eher nicht mach doch ne State Machine mit Case damit da nicht alles blockiert.
Nur so ein paar Ansätze.
Grüße
Edwin
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo Lars
schau mal in die DoDeSys-Hilf: IEC-Aktionrn werden zweimal aufgerufen
Abarbeitungsreihenfolge in AS
Grundsätzliches Verhalten der Elemente
Aktiver Schritt: Ein aktiver Schritt ist ein Schritt, dessen Aktionen gerade ausgeführt werden. Im Online-Betrieb stellt CODESYS aktive Schritte in blau dar.
Initialschritt: Im ersten Zyklus nach Aufruf einer AS-POU wird der Initialschritt automatisch aktiv und die Schrittaktion wird ausgeführt.
CODESYS führt IEC-Aktionen mindestens zweimal aus. Das erste Mal nach Aktivwerden des Schrittes, das zweite Mal - aber erst im nächsten Zyklus - nach Deaktivieren des Schrittes.
Gruss Reinhard
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Originally created by: Lars P.
Liebe Community,
ich habe bei Codesys folgendes Problem:
Ich möchte einen Rubik's Cube mit Roboter, Kamera und Pi lösen.
Mit der Kamera lese ich den Status des Würfels ein, der Roboter führt die benötigten Bewegungen mit dem Würfel aus und der Pi ist für die Steuerung und
Berechnung zuständig.
Das einlesen des Würfels klappt ohne Probleme und auch das Verdrehen des Würfels via Roboter.
Auf dem Pi läuft die neuese Codesys-Version 3.5.14.0 Außerdem habe ich eine Shell-Datei, die mir bei Übergabe des aktuellen Status des Würfels den Lösungsweg
für den Roboter in ein Textdokument auf den Pi schreibt. Dieses lese ich bei Codesys mit dem Befehl SysProcess._(pszCommand:='/home/pi/list.sh'..., aus und übergebe den Lösungsweg an den Roboter.
Lasse ich das Programm einmal durchlaufen funktioniert alles ohne Probleme.
Nun zum Problem:
Wenn ich nun jedoch ein zweites mal den Würfel lösen lassen möchte bekomme ich in Codesys die Fehlermeldung: "AUSNAHMEFEHLER" beim erneuten Aufrufversuch des Shell Skriptes.
Starte ich den Pi ein mal mit "sudo reboot" neu, lässt sich der Würfel wieder lösen. Starte ich allerdings nur die Codesys-Runtime mit "sudo restart CodesysControl" neu,
so bekomme ich wieder den gleichen Fehler.
Dies lässt natürlich vermuten, dass sich das Shell - Skript nicht richtig beendet o.ä.. Allerdings kann ich das Shell-Skript direkt über die Shell des Pi mehrmals hintereinander
und sogar mehrmals parallel ohne Probleme laufen lassen. Außerdem konnte ich nach einmaligem Durchlauf des (Codesys)Programms keine Zombie Prozesse via "htop" entdecken.
Daher vermute ich, dass bei der Codesys - Shell - Kommunikation etwas fehlschlägt.
Das Shell-Skript rufen wir bei Codesys über den Befehl SysProcess._(pszCommand :=algorithm_command, pszSTDOut:=test_string,..... auf. (siehe Screenshot)
Beim trouble-shooting habe ich zusätzlich festgestellt, dass jedes Unterprogramm genau zwei mal direkt hintereinander durchlaufen wird, obwohl ich eine standardmäßige Schrittkette für die Aufrufe der Unterprogramme verwende. (siehe Screenshot)
Allerdings werden die Unterprogramme auch im ersten Durchlauf zwei mal durchlaufen.
Über neue Lösungsansätze würde ich mehr sehr freuen
Da dies mein erster Eintrag in diesem Forum ist, hoffe ich das ich nichts vergessen habe. Falls ihr noch mehr Informationen oder Screenshots benötigt sagt mir doch bitte bescheid.
Vielen Dank im Voraus und beste Grüße
Lars
Hi,
denke du musst ins SPS Log schauen um mehr info über die Exception zu bekommen.
SysProcess auch in einer eigenen Task aufrufen - machst du das?
Diese while für SysProcess ? Eher nicht mach doch ne State Machine mit Case damit da nicht alles blockiert.
Nur so ein paar Ansätze.
Grüße
Edwin
Hallo Lars
schau mal in die DoDeSys-Hilf: IEC-Aktionrn werden zweimal aufgerufen
Abarbeitungsreihenfolge in AS
Grundsätzliches Verhalten der Elemente
Aktiver Schritt: Ein aktiver Schritt ist ein Schritt, dessen Aktionen gerade ausgeführt werden. Im Online-Betrieb stellt CODESYS aktive Schritte in blau dar.
Initialschritt: Im ersten Zyklus nach Aufruf einer AS-POU wird der Initialschritt automatisch aktiv und die Schrittaktion wird ausgeführt.
CODESYS führt IEC-Aktionen mindestens zweimal aus. Das erste Mal nach Aktivwerden des Schrittes, das zweite Mal - aber erst im nächsten Zyklus - nach Deaktivieren des Schrittes.
Gruss Reinhard