Hallo,
wenn ich per Programm, welches in einem eigenen Task mit niedrigerer Priorität ausgeführt wird, ein Python-Skript (erstellt eine CSV Datei) mit SysProcess.SysProcessExecuteCommand2 ausführe, wird die CANbus Verbindung unterbrochen, laut Fehlermeldung vom Master (extern). Ich verstehe nicht ganz was das eine mit dem anderen zu tun hat? Wie kann ich per Programm ein Python-Skript ausführen ohne dass während der Ausführung die CANbus Verbindung unterbrochen wird?
Im CODESYS sind in den Log-Einträgen meines CANopen-Device und CANbus keine Fehler zu finden.
mein System:
RevPi Connect S: 6.1.46-rt13-v7l, Codesys Runtime 4.10.0.0, revolutionpibridge-V1.4.1.0
RevPi Con Can
Vielen Dank im Voraus!
LG
Stefan
Python Skript - CANbus
Hallo Stefan, du verwendest CODESYS mit dem RevPi Con CAN und möchtest via Python in eine CSV Datei schreiben.
Es gibt bei den Prioritäten und Prozessen generell zu beachten, dass es nicht zu Prioritäten Inversion kommt. Das kann passieren, wenn ein Betriebsmittel blockiert wird z.B. beim I/O Daten schreiben in eine Datei.
Ein Quickhack aus meiner Sicht wäre, wenn du ins TMPFS schreibst, also z.B. nach "/tmp/log.log". Denn das befindet sich im RAM Speicher.
Eine weitere Idee ist, dass Du die Linux oder CODESYS Bordmittel nutzt und hier eine Recherche machst, was typischerweise der beste Weg ist für ein Logging mit CODESYS:
https://forge.codesys.com/neighborhood
Du kannst mir gerne einen SOS-Report zukommen lassen. Wie das funktioniert, steht hier:
https://kunbus-gmbh.atlassian.net/servi ... 2036400208
Es gibt bei den Prioritäten und Prozessen generell zu beachten, dass es nicht zu Prioritäten Inversion kommt. Das kann passieren, wenn ein Betriebsmittel blockiert wird z.B. beim I/O Daten schreiben in eine Datei.
Ein Quickhack aus meiner Sicht wäre, wenn du ins TMPFS schreibst, also z.B. nach "/tmp/log.log". Denn das befindet sich im RAM Speicher.
Eine weitere Idee ist, dass Du die Linux oder CODESYS Bordmittel nutzt und hier eine Recherche machst, was typischerweise der beste Weg ist für ein Logging mit CODESYS:
https://forge.codesys.com/neighborhood
Du kannst mir gerne einen SOS-Report zukommen lassen. Wie das funktioniert, steht hier:
https://kunbus-gmbh.atlassian.net/servi ... 2036400208
Hallo Dirk,
das Python-Skript holt sich via OPCUA Empfangs-Datenobjekte, erstellt daraus eine Kurvenbahn und speichert die Daten der Bahn in eine CSV Datei. Kann das der Grund für eine Betriebsmittelblockade sein?
Ich habe dir einen SOS-Report gesendet.
das Python-Skript holt sich via OPCUA Empfangs-Datenobjekte, erstellt daraus eine Kurvenbahn und speichert die Daten der Bahn in eine CSV Datei. Kann das der Grund für eine Betriebsmittelblockade sein?
Ich habe dir einen SOS-Report gesendet.
Hallo Dirk,
habe das Python Skript mal ohne OPCUA Verbindungsaufbau ausführen lassen, die CANbus Verbindung wird nicht unterbrochen. Beim nächsten Versuch habe ich über das Skript die OPCUA Verbindung aufbauen lassen, ohne das ich Daten abrufe oder schreibe, die CANbus Verbindung wird wieder unterbrochen.
Führe ich das Skript manuell per CMD aus, tritt die CANbus Unterbrechung nicht auf.
habe das Python Skript mal ohne OPCUA Verbindungsaufbau ausführen lassen, die CANbus Verbindung wird nicht unterbrochen. Beim nächsten Versuch habe ich über das Skript die OPCUA Verbindung aufbauen lassen, ohne das ich Daten abrufe oder schreibe, die CANbus Verbindung wird wieder unterbrochen.
Führe ich das Skript manuell per CMD aus, tritt die CANbus Unterbrechung nicht auf.
Hallo stefan,
Dass die CANbus-Verbindung nur dann unterbrochen wird, wenn das Python-Skript über OPC UA eine Verbindung aufbaut und dass dies nicht geschieht, wenn das Skript manuell über die Kommandozeile ausgeführt wird, weist auf ein Timing- oder Ressourcenproblem hin. Hier sind einige spezifische Ansätze zur Untersuchung und möglichen Lösung:
Lösungsansätze
Beispiel in CODESYS (im Skript-Aufruf):
Tools wie htop, iotop oder dmesg können hier hilfreich sein
Einige Informationen kann ich von dem SOS Reports herausnehmen. Ich werde hier noch weitere Ansätze posten, nachdem ich das SOS-Report, die du geschickt hat, fertig analysiert habe
Mit freundlichen Grüßen
Ulrich Kouatang Biakoup | Field Application engineer
Dass die CANbus-Verbindung nur dann unterbrochen wird, wenn das Python-Skript über OPC UA eine Verbindung aufbaut und dass dies nicht geschieht, wenn das Skript manuell über die Kommandozeile ausgeführt wird, weist auf ein Timing- oder Ressourcenproblem hin. Hier sind einige spezifische Ansätze zur Untersuchung und möglichen Lösung:
- Unterschiedliche Prioritäten und Umgebungen:
- Timing- und Synchronisationsprobleme:
Lösungsansätze
- Überprüfung der Task-Priorität:
- Setzen der Prozesspriorität mit nice:
Beispiel in CODESYS (im Skript-Aufruf):
Code: Select all
SysProcess.SysProcessExecuteCommand2('nice -n 19 python /pfad/zum/skript.py', ...)
- Ressourcenkontrolle mit cgroups
- Verzögerung und Pausen einführen:
- Erstelle eines separaten Threads oder Prozesses:
- Analyse der Systemressourcen:
Tools wie htop, iotop oder dmesg können hier hilfreich sein
Einige Informationen kann ich von dem SOS Reports herausnehmen. Ich werde hier noch weitere Ansätze posten, nachdem ich das SOS-Report, die du geschickt hat, fertig analysiert habe
Mit freundlichen Grüßen
Ulrich Kouatang Biakoup | Field Application engineer