Ich entschuldige mich das die Frage ein wenig ausführlicher wird, aber für ein Verständnis benötige ich ein bisschen an Erklärung.
Ich möchte gerne verstehen, wie oder was der RevPI Commander an/mit dem laufenden Python Skript macht, wenn ein "SPS stop" gedrückt wird, oder besser noch auch ein Error während dem Ausführen zustande kommt?
Allgemein gesehen, geht es mir darum einen "sicheren" Shutdown auszuführen. D.h. zum Beispiel, alle Outputs auszuschalten und Subprozesse kontrolliert herunterzufahren, anstelle einfach mitten im Prozess zu "killen".
Das Setup ist wie auf dem Bild python_architecture.png. Das Ziel dabei ist verschiedene Threads laufen zu lassen um verschiedene Tasks unabhängig vom I/O loop auszuführen. Weil ich aber noch nicht herausgefunden habe, wie ich bei "SPS start" das Programm direkt in der virtuellen Umgebung starten kann, mache ich das über ein Launcher -Programm (run_main.py). Dieses startet main.py innerhalb der venv. über einen subprocess call.
Main.py erzeugt dann die Threads.
Nun zum Ablauf. Wenn dann "SPS stop" gedrückt wird, möchte ich gerne ein kontrolliertes herunterfahren auslösen. Das ist in etwa im Bild desired shutdown.png zu sehen.
So wie es jetzt aber anhand der logs im Commander aussieht, probiert der Commander die SPS zu stoppen, aber weil ich eine Verzögerung durch mein Herunterfahre probiere auszuführen, erzwingt der Commander den "kill" des Tasks? Kann man dies verhindern oder verzögern? Wie lösen andere ein kontrollieres Herunterfahren im Error-Fall?
Code: Select all
2025-03-10 14:03:17 [WARNING ] can not term plc program /var/lib/revpipyload/21.0203-ixion/run_main.py
2025-03-10 14:03:17 [WARNING ] killed plc program