SysProcessExecuteCommand2 blockiert Task/ CPU-Last 100%

Chris.O
2020-10-15
2020-10-15
  • Chris.O - 2020-10-15

    Hallo Forum,

    ich versuche aktuell meine Uhrzeit der SPS über einen NTP-Server zu aktuallisieren.

    Hierzu verwende ich einen Linux-Befehl "systemctl stop ntp; ntpdate <serverip>"</serverip>

    Um vorher zu prüfen, ob die Zeit auch wirklich gestellt werden muss, lese ich mir zuerst die Differenz zwischen Server und Client mittels Befehl 'ntpdate -q <serverip> | grep "time server"‘ aus. Ist die Abweichung größer 1s, wird der erste Befehl ausgeführt.</serverip>

    Das alles wird alle 20s neu überprüft, d.h. der Befehl mittels SysProcessExecuteCommand2 alle 20s ausgeführt.

    Leider kommt es immer mal wieder dazu, dass mir dann scheinbar diese Funktion die Task blockiert und meine CPU-Last auf 100% geht. Dann bricht die Verbindung zum Programmiersystem ab und ich kann das System nur noch neu starten.

    Hat jemand eine Lösung, wie ich dieses Blockieren abfangen könnte?

    Gruß Chris

     

    Last edit: Chris.O 2020-10-15
  • eschwellinger

    eschwellinger - 2020-10-15

    Hallo Chris,
    SysexecuteCommand2 ist immer ein blockierender Aufruf,
    sprich das muss immer in einer igenen low prio Task ausgeführt werden das machst du schon oder?

    Zusätzlich wurde zu SP16 was umgestellt/korrigiert was den Einfluß auf das Echtzeitverhalten verbessert.. kann es also sein das du < SP16 bist mit der Runtime?

    Grüße
    Edwin

     

    Last edit: eschwellinger 2020-10-15
  • Chris.O - 2020-10-15

    Hallo Edwin,

    Ja, die rufe ich in einer separaten Task auf.. allerdings hat die Prio5.

    Meine Main aber Prio 1

    Würde das CPU-Last mäßig was bringen, wenn ich die Prio weiter runter drehe?

     
  • eschwellinger

    eschwellinger - 2020-10-15

    ich würde definitv > 15 Prio verwenden...

     
  • Chris.O - 2020-10-15

    Ok, werde ich ausprobieren.
    Kann ich die Task dann automatisiert wieder neu starten? Wie würde ich aus diesem blockierenden Zustand wieder raus kommen?

    Eventuell mit der Funktion IecTaskReload aus der CmpIecTask library?

     

    Last edit: Chris.O 2020-10-15
  • eschwellinger

    eschwellinger - 2020-10-15

    ähm, nein die Task blockiert solange bis der Linuxbefehl fertig ist.

     

    Last edit: eschwellinger 2020-10-15

Log in to post a comment.