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

Fehler mit dem Befehl _

Anonymous
2019-01-19
2019-01-20
  • Anonymous - 2019-01-19

    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

    IMG: Screenshot_SysProcess.PNG

    IMG: Screenshot_Main_Read.PNG

    IMG: Screenshot_Main.PNG

     
  • eschwellinger

    eschwellinger - 2019-01-20

    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

     
  • RasPi-User - 2019-01-20

    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

     

Log in to post a comment.