SysProcess gibt keinen Wert zurück

Anonymous
2016-03-23
2016-03-28
  • Anonymous - 2016-03-23

    Originally created by: PI-Beginner

    Hallo,

    ich möchte mit SysProcess ein Skript auf den RPi aufrufen das ein anderes Skript (lolDHT) aufruft und mir nur einen Prozesswert von einem Sensor zurück gibt.

    Allerdings bekomme ich keine Werte zurück und finde den Fehler nicht.
    Auch eine Veränderung der Zykluszeit über einen extra Task mit 10s hat keine Lösung gebracht.

    Mein SysProzess mit Task 10s:

    command1:='bash /home/pi/temp.sh';
    IF xExecuteSysP THEN
       xExecuteSysP := FALSE;
       SysProcess._(pszCommand:=command1, pszStdOut:=stdout, udiStdOutLen:= SIZEOF(stdout),pResult := ADR(Result));
       Ergebnis := stdout;
    END_IF
    

    Mein Skript temp.sh:

    \#!/bin/bash
    cd ~
    cd lol_dht22/
    WERTE=$(sudo ./loldht 7 | grep "Temp")
    Hum=$(echo $WERTE | awk '{ print $3}')
    Temp=$(echo $WERTE | awk '{ print $7}')
    \#datum=$(date +"%d-%m-%Y-%T")
    cd ~
    \#echo $datum
    \#echo $Temp
    echo $Hum
    

    Kann mir jemand einen Tipp geben wo der Fehler ist?

    Grüße
    Jan

     
  • Anonymous - 2016-03-25

    Originally created by: PI-Beginner

    Hallo,

    anders gefragt: Was für Bedingungen und Regeln gelten für "SysProcess" damit es sicher funktioniert?
    Was geht bzw was geht nicht?

    Gibt es eine andere Möglichkeit Skripte unter Linux in Codesys aus zu führen?

    Grüße

    Jan

     
  • eschwellinger

    eschwellinger - 2016-03-25

    Hi,

    versuche mal dein script zu vereinfachen.. die runtime läüft schon als root also ruf doch mal direkt deinen Befehl mit SysProcess in CODESYS auf
    "loldht" 7 und parse ihn oben in CODESYS.

    Bei deinem script kommt als Fehler '2' zurück -> ERR_PARAMETER dieses zusammen setzen der Befehle "loldht 7 | grep" wird's sein.

    Grüße
    Edwin

     
  • Anonymous - 2016-03-26

    Originally created by: PI-Beginner

    Hallo Edwin,

    ich habe jetzt das loldht-Skript direkt in den Pfad root/lol_dht22/ Kopiert.
    bzw. command1 schaut jetzt so aus: ```

    command1:='/root/lol_dht22/loldht 0';

    auch eine Variante mit

    command1:='./lol_dht22/loldht 0';

    ``` bleibt ergebnislos.

    Als Result erhalte ich immer 25 und stdout bleibt leer. Was bedeutet das?
    Task habe ich jetzt auf 5 Sekunden eingestellt weil der Sensor meist lange braucht bis er die Werte hat.

    Gruß

    Jan

     
  • eschwellinger

    eschwellinger - 2016-03-27

    Hi,
    Result 25 bedeutet keine Rechte für dieses Kommando.
    Bitte dein Befehl im /etc/CODESYSControl.cfg freishalten oder AllowAll
    alle Kommandos freischalten:

    [SysProcess]
    Command=AllowAll

    ich würde loldht direkt in /root legen oder aber alternativ /usr/bin halt irgendwo wo Linux die die Befehle finder.

    IMG: CmpErrors2Interfaces.jpg

     
  • Anonymous - 2016-03-28

    Originally created by: PI-Beginner

    Hallo Edwin,

    hab jetzt nochmal die /etc/CODESYSControl.cfg überarbeitet. Dachte ich hatte schon mal früher den SysProcess auf Command=AllowAll gesetzt. Wird dieser Eintrag bei einem Update überschrieben?

    Da ich jetzt alle Daten im Codesys habe muss ich nur noch den Luftfeuchtigkeit-Wert aus dem String extrahieren (parsen).
    Hast du ein Bespiel an dem ich mir Orientieren kann? Die Hilfe konnte mir nicht weiterhelfen

    Danke für deine Unterstützung.

    Gruß

    Jan

     

Log in to post a comment.