Aus Codesys heraus Kommandozeilenbefehle geben

Anonymous
2014-06-13
2015-02-23
  • Anonymous - 2014-06-13

    Originally created by: nym-J 3x 1,5

    Moin,
    finde die "SPS" auf dem Raspberry echt interessant. Habe schon etwas herumgespielt.
    Nun zu meiner Frage: Ist es möglich Kommandozeilen-Befehle aus dem SPS-Programm heraus an den Raspberry zu übergeben?
    Wie z.B. :

    sudo reboot
    

    oder:

    mpg123 -@ http://... .pls
    

    um z.B. bei Tastendruck oder über die Visu einen Stream zu starten?

    Gruß

     
  • Anonymous - 2014-06-13

    Originally created by: nym-J 3x 1,5

    Danke für die schnelle Antwort.
    Ist es denn auch möglich Strings aus Codesys zu übergeben? Meine Idee ist es Werte (Temperatur etc.) über Google-Translate auszugeben.

    Beispiel Komandozeile:

    Zitat:
    mpg321 "http://translate.google.com/translate_tts?tl=de&q=Hallo. Es ist 23 Grad

    Das heißt das ich ja verschiedene Strings übergeben muss!?

    Danke und Gruß

     
  • eschwellinger

    eschwellinger - 2014-06-13

    Hi,

    ja das geht auch:
    z.B mit CONCAT den string den mal aufrufen will vor Aufruf mit SysProcess zusammen bauen,
    je nachdem was man für einen Text haben will.
    Bitte beachten das man SysProcess in einer eigenen Task aufruft!!

    Grüße
    Edwin

    PS: Vielleicht für die anderen die das auch lesen und verwenden wollen:
    Auf Pi Seite:

    sudo apt-get install alsa-utils
    sudo apt-get install mpg321
    sudo reboot
    sudo modprobe snd_bcm2835
    sudo amixer cset numid=3 1

    dann must man folgendes file editieren: /usr/share/alsa/alsa.conf:

    sudo nano /usr/share/alsa/alsa.conf
    change the line “pcm.front cards.pcm.front” to “pcm.front cards.pcm.default”

    wenn man nun in der Pi Kommandozeile mpg321 xyz.mp3 aufruft spielt er das Lied xyz ab in diesem Fall über die Buchse wo man einen Kopfhörer oder Laufsprecher anschliesen kann... wenn man es über HDMI haben will dann muss man die Konfig ändern.


    Damit man in der SPS den Befehl aufrufen kann:
    Im Config File den Abschnitt SysProcess mit dem Befehl einfügen:

    sudo nano /etc/CODESYSControl.cfg

    [SysProcess]
    Command.0=mpg321

    IMG: PCM.jpg

    IMG: PlaySoung.jpg

    Raspi_PlayMP3_triggered_byPLC.project [172.7 KiB]

     
  • Marc.Schmitz - 2014-07-28

    Hallo zusammen,
    kann ich einfach einen weiteren Systembefehl aus /usr/bin als Command.1
    unter [SysProcess] hinzufügen?

    Wollte mail hinzufügen.
    Der Befehl wird aber aus Codesys heraus nicht ausgeführt....
    auf der Commandozeile geht es.

    Der Plan war ein Bild von der Picam per Mail zu versenden...
    Bitte jetzt nicht den Hinweis auf das 50 Euro Plugin
    Gruß und Dank
    Marc

     
  • eschwellinger

    eschwellinger - 2014-07-28

    Hi,

    ja nein, das geht schon... gibt mir mal das Kommando welches du in der shell aufrufst,
    dann sag ich dir wie du das Setting in CODESYSControl.cfg machen musst & wie du es aufrufen solltest.

    Grüße
    Edwin

     
  • Marc.Schmitz - 2014-07-28

    Hi Edwin,
    in der Kommandozeile gebe ich folgendes ein:
    mail -s Foto -a /root/visu/bild.jpg e mustermann@mail.de e < /root/message.txt

    Gruss und Dank
    Marc

     
  • eschwellinger

    eschwellinger - 2014-07-28

    Hallo Marc,

    in CODESYSControl.cfg
    [SysProcess]
    Command.0=mail

    im CODESYS Projekt den String:

    'mail -s Foto -a /root/visu/bild.jpg e mustermann@mail.de e < /root/message.txt'

    mit sysprocess... aufrufen.
    

    Grüße
    Edwin

     
  • Marc.Schmitz - 2014-07-28

    Hallo Edwin,
    so ähnlich hab ich es gemacht...
    Nur das ich als Command.0 schon den shutdown da stehen habe.
    Hab dann versucht einen Command.1=mail anzulegen. Das scheint dann aber nicht zu gehen...
    Gruß
    Marc

     
  • eschwellinger

    eschwellinger - 2014-07-28

    Hallo Marc,

    muss gehen, was installierst du denn genau damit das commando mail dazukommt?
    mail .... kannst du an x beliebiger Stelle aufrufen oder must du in einem bestimmten Verzeichnis stehen damit das geht?
    Dann check ich das mal.

    Grüße
    Edwin

     
  • Marc.Schmitz - 2014-07-28

    Hallo Edwin,
    ich habe unter Raspberian exim4 installiert und als Satellit konfiguriert. (SmartHost)
    Genau Anleitungen findest du im Web reichlich... oder ich schreib Dir mal alles zusammen...

    Danach kann man über den Befehl mail E-Mail versenden.
    Hilfe zu mail gibt es mit "man mail".

    Mail kann an jeder Stelle aufgerufen werden. Ist aber auch in /usr/bin/ abgelegt.

    Gruss
    Marc

     
  • eschwellinger

    eschwellinger - 2014-07-28

    hm...
    dann zwei fragen was liefert SysProcess für einen Rückgabewert,
    kannst du mal cat /tmp/codesyscontrol.log ausgeben was da drin steht nachdem du SysProcess aufgerufen hast?

    Grüße
    Edwin

     
  • Marc.Schmitz - 2014-07-28

    also der return-wert ist 25... sollte 0 sein, oder?
    In der /tmp/codesyscontrol.log kommt nichts hierzu...

    Gruss
    Marc

     
  • Marc.Schmitz - 2014-07-29

    Hallo,
    die Lösung für das Mail-Problem sieht wie folgt aus...

    In /usr/bin eine Datei mailImage angelegt und mit folgendem Inhalt gefüllt:
    #!/bin/bash
    echo $2 | mail -s $1 -a /root/visu/campicture.jpg e max.mustermann@mail.de e

    Die Datei mittels "chmod +x /usr/bin/mailImage" ausführbar machen

    Dann in /etc/CODESYSControl.cfg folgenden Eintrag hinzufügen:
    [SysProcess]
    Command.0=mailImage

    Der Aufruf in ST...:
    _('mailImage "Subject" "message"',ADR(Result));

    Vielen Dank und Gruss an Edwin!

    Gruss
    Marc

     
  • Anonymous - 2014-09-10

    Originally created by: BNZ-Brennstoffzelle

    Moin

    Ich will mir eine shutdown Funktionsblock erstellen.

    Dazu habe ich mir eine FB Shutdown_Comand erstellt(ST)

    FUNCTION_BLOCK Shutdown_Comand
    VAR_INPUT
    xshutdown: BOOL;
    END_VAR
    VAR_OUTPUT
    END_VAR
    VAR
    Result: RTS_IEC_RESULT;
    Zaeler: INT;
    END_VAR

    ST:

    IF xshutdown THEN

    FOR Zaeler :=0 TO 15 DO
        GVL.Pumpe[Zaeler]:=0;
    END_FOR;
    SysProcess._('sudo shutdown -h now', ADR(Result));
    

    END_IF

    auch in der CODESYSControl.cfg habe ich
    [SysProcess]
    Comand.0=sudo shutdown -h now

    Punkt eins der Raspberry fahrt nicht runter bei ADR(Result) steht 25.
    Punkt zwei die Schleife ändert die werte für die Pumpen nicht auf null.

     
  • Lambda - 2014-09-10

    Hallo,

    bei Deiner For Schleife bei der Variable nur Pumpe[Zaehler]:=0; angeben und nicht das GLV. davor
    setzen. Wenn die Variable in der Globalen Variablen Liste steht, dann ist diese im ganzen Projekt
    verfügbar.

    Beim Raspi in der Config nur folgendes angeben

    [SysProcess]
    Comand.0=sudo

    Die 25 beim Result erhältst du, weil das kommando so nicht verstanden wird.

    Gruß Werner

     
  • eschwellinger

    eschwellinger - 2014-09-10

    Hallo Ihr,

    danke für den Beitrag (Werner),

    Die runtime ruft die Kommandos als root auf d.h es müsste reichen ins config file folgendes zu schreiben:

    [SysProcess]
    Command.0=shutdown

    In CODESYS auch das sudo weglassen, dann müsste gehen.

    Grüße
    Edwin

     
  • Giso - 2014-11-10

    Hallo zusammen,

    ich möchte mehrere Skripte aus Codesys heraus unabhängig voneinander aufrufen.
    Kann ich dies mittels Folgeeinträgen in der Conf-Datei bewerkstelligen?

    [SysProcess]
    Comand.0=script1
    Command.1=script2

    Ich habe das gerade auf diese Weise probiert, kam allerdings nicht zum Erfolg. Kann mir da jemand weiterhelfen?

    Viele Grüße
    Giso

     
  • eschwellinger

    eschwellinger - 2014-11-10

    Hi,

    das muss gehen (Schreibweise ok?):

    [SysProcess]
    Command.0=ls
    Command.1=chmod
    Command.2=ifconfig

    Grüße
    Edwin

     
  • Xarven - 2014-11-19

    Hallo,

    ist es auch möglich von CODESYS über diese Kommandozeilenbefehle eine Variable zu übergeben?

    z.b : 'echo "17=0.2" > /dev/pi-blaster'
    wobei ich hier gerne 'echo " <gpiopinname>=<value> " > /dev/pi-blaster' schreiben würde.
    Somit währen dann <gpiopinname> und <value> meine Variablen.</value></gpiopinname></value></gpiopinname>

    edit:

    Habs schon, zumindest ne schnelle Variante.
    Ich bau mir den Kommandozeilen-String erst zusammen und übergebe die Variablen dabei
    von LReal zu String und schiebe das denn erst in den execute.

     
  • eschwellinger

    eschwellinger - 2014-11-19

    Hi Xarven,
    ja geht auch,
    wenn du was nach /dev/pi-blaster schreiben must dann wäre
    das auch relative schick mit der Char Device Bibliothek gegangen da kann man ja nicht nur lessen, sondern auch schreiben.

    Hier ein Beispiel wie man lesen, schreiben geht auch:

    l viewtopic.php?f=18&t=4699#p15070 l

    Grüße
    Edwin

     
  • dentech - 2015-02-22

    Hi,

    ich bin neu bei Codesys, komme von der Siemensseite. Ich erhalte beim Aufruf von :

    [attachment=0]Unbenannt.jpg[/attachment]

    weiß jemand Rat?

    IMG: Unbenannt.jpg

     
  • eschwellinger

    eschwellinger - 2015-02-23

    Hi,

    du hast versehentlich Sys_Process_Execute_Command als int deklariert. (oben in deinem Deklararionsteil)
    Du musst die SysProcess Bibliothek im LibraryManager hinzufügen.
    Bitte als erstes unter Tools-Optionen-Features-PFeatureSets zu 'Professional' wechseln (nur dann kann man Syslibs dazumachen und auch sehen im BibliotheksManager)
    Zum hinzufügen der Bibliothek folgende Vorgehensweise:
    Im Biliotheksmanager am besten auf "Erweitert" wechseln und dann in der Suchzeile 'SysProcess' eingeben und dann auf irgend einen Baustein oder die Biliothek selber
    doppelclicken, dann wir die SysProcess Bibliothek im BibliotheksManager hinzugefügt und kann Fehlerfrei übersetzt werden.
    Bitte nicht vergessen einen Befehl in der /etc/CODESYSControl.cfg auf dem Pi freizugeben.

    Grüße
    Edwin

    IMG: Professional.jpg

    IMG: erweitert.jpg

    IMG: addSysprocess.jpg

     

Log in to post a comment.