Dieses Mal möchte ich schreiben, wie Python Script mit RunTime von Pi4 mit installiertem CodeSys ausgeführt wird.
Um Python Script automatisch auf Pi4 auszuführen, müssen Sie die Systembibliothek installieren. https://help.codesys.com/webapp/idx-SysProcess%20Implementation-lib;product=SysProcess%20Implementation;version=3.5.16.0
SysFile Bibliothek zur Verarbeitung der Datei
SysTypes Datei, die Struktur, die beim Ausführen von Befehlen verwendet wird
SysProcess Bibliothek zum Ausführen von Befehlen
Überprüfen wir nun, ob sich diese Bibliotheken in CodeSys befinden. Klicken Sie auf Library Repository und drücken Sie Find. Geben Sie SysFile in Search ein. Wenn ja, ist es bereits installiert.
Wenn Sie auf Öffnen klicken, werden SysFile und seine Version auch in „Installierte Bibliotheken“ angezeigt.
Import Nachdem Sie bestätigt haben, dass es installiert ist, können Sie es in Ihr eigenes Projekt importieren. Klicken Sie auf Bibliotheksmanager> Bibliothek hinzufügen. Klicken Sie auf Erweitert. Das Popup der Bibliothek hinzufügen wird angezeigt. Geben Sie Sysfile ein, wählen Sie SysFile 3.5.15.0 aus und klicken Sie auf OK.
Dann können Sie diese Bibliothek für Ihr Projekt verwenden. Fügen Sie SysProcess auf die gleiche Weise ein. SysTypes auch. Wenn ich CodeSys neu starte, wird gelegentlich die Meldung "Projektumgebung ist nicht aktuell" angezeigt, aber ich denke, "Alle auf Neueste setzen" ist in Ordnung.
External file Um ein Python-Skript hinzuzufügen, verwenden Sie ein Objekt namens "Externe Datei". Die Online-Hilfe finden Sie hier: https://help.codesys.com/webapp/_cds_obj_external_file;product=codesys;version=3.5.16.0
An External File is any file that you add to the project in the POUs view or Devices view. Click Project ‣ Add Object to open the Add External File dialog and define how the file belongs to the project. An external file which was inserted in the POUs view is never downloaded to the controller. An external file which was added in the Devices view is always downloaded to the controller when an online change or a download is performed due to an IEC code change. When an external file is downloaded to the controller, it is not updated in the project
Externe Datei ist ein Objekt, mit dem Sie eine beliebige Datei zu Ihrer POE- oder Geräteansicht hinzufügen können. Projekt> Objekt hinzufügen öffnet ein Popup der externen Datei, in dem definiert wird, wo sich die Datei befindet.
Und selbst wenn die externe Datei auf den Controller heruntergeladen wird, wird sie nicht auf das Projekt aktualisiert.
Klicken Sie auf Objekt hinzufügen> Externe Datei.
Definieren Sie hier den Dateipfad und den Namen. Klicken Sie nach dem Einstellen auf "Hinzufügen".
Sie können auch die Dateiverwaltung, das Update-Timing usw. wiederholen, die zuvor mit Objekt bearbeiten festgelegt wurden.
Melden Sie sich an und laden Sie die externe Datei herunter. Lassen Sie uns überprüfen, ob es sich richtig im Controller befindet. Doppelklicken Sie auf Gerät. Klicken Sie vor Datei. Pfad ist PlcLogic / Application. Ja, Hello.py ist enthalten.
Script Nehmen Sie einfach die aktuelle Zeit und melden Sie sich so an, wie sie ist.
import datetime
print('Hello,CodeSys')
d=datetime.datetime.now()
path='log.txt'
f=open(path,"a")
f.write(str(d)+'\n')
f.close()
Zunächst erfahren Sie, wie Sie Vi verwenden: https://prev.net-newbie.com/linux/commands/vi.html https://jsapachehtml.hatenablog.com/entry/2014/11/23/124350
[SysProcess]
Command=AllowAll
Hinzufügen.
Erstellen Sie ein Programm, das ausgeführt wird, wenn Controller zu Stopp> Ausführen wechselt. Dies dient dazu, jedes Mal die Ausführungsberechtigung von Script und der neuesten Datei sicherzustellen. Es wird von Systemereignissen verwendet. Klicken Sie hier für die Online-Hilfe: https://help.codesys.com/api-content/2/codesys/3.5.13.0/en/_cds_obj_task_config_sys_event/#e5ddda49857aab52c0a8640e01f6cda7-id-8eb22e41857aab52c0a8640e009f5f0b
Klicken Sie auf Aufgabenkonfiguration. Öffnen Sie die Registerkarte Systemereignisse. Fügen Sie mit dem Add Event Handler ein neues Ereignis hinzu.
Screenshot der Online-Hilfe, aber Startvorbereitung. Rufen Sie vor dem Starten der Anwendung auf, dh wenn der Controller Stopp> Ausführen ist. Wenn Sie auf Ereignishandler hinzufügen klicken, wird das folgende Popup angezeigt. Hier entscheiden Sie, welches Ereignis und welches Programm ausgeführt werden soll. Wählen Sie Start für Ereignis vorbereiten. Stellen Sie das Programm so ein, dass es ausgeführt wird, wenn das Ereignis durch einen Funktionsaufruf ausgelöst wird. Geben Sie hier einfach den Namen ein und drücken Sie OK, um die Funktion ohne Erlaubnis zu erstellen. Erstellen Sie eine globale Variable in GVL. Dann False den Anfangswert.
Erstellen Sie eine POE für _PythonExecute.
Denken Sie daran, zuerst die Bibliothek zu importieren? Sie werden zwei Funktionen in dieser Bibliothek verwenden. Wählen Sie Library Manager> Library> Select Function> Die Beschreibung der Funktion steht an vierter Stelle.
SysProcessExecuteCommand2 https://help.codesys.com/webapp/SysProcessExecuteCommand2;product=SysProcess%20Implementation;version=3.5.16.0
Funktion zum Ausführen von Systembefehlen. Beachten Sie, dass die Ausgabe des Befehls vom Betriebssystem abhängt.
SysFileCopy https://help.codesys.com/webapp/SysFileCopy;product=SysFile;version=3.5.9.0
--Return: RTS_IEC_RESULT, Fehlercode des Laufzeitsystems --szDestFileName: Zielpfad kopieren --szSourceFileName: Quellpfad kopieren --pulCopied: Anzahl der kopierten Bytes
Interface
PROGRAM _PythonExecute
VAR
dwCopySize: DWORD;
dutResult : RTS_IEC_RESULT;
szCommand : STRING(200);
fbTimer : TON;
szStdOout : STRING(1000);
fbTimer1 : TON;
Command : STRING(200);
END_VAR
Program
(*
/etc/CODESYSControl.cfg:
[SysProcess]
Command=AllowAll
*)
IF NOT GVL.init THEN
//Copy the scripts to local
SysFile.SysFileCopy('/var/opt/codesys/hello.py'
,'/var/opt/codesys/PlcLogic/Application/hello.py'
,ADR(dwCopySize));
//Change the permission that can execute
SysProcess_Implementation.SysProcessExecuteCommand2(pszCommand:='chmod +x *.py'
, pszStdOut:=szStdOout
, udiStdOutLen:= SIZEOF(szStdOout)
, pResult := ADR(dutResult));
//Init is finished
GVL.init:=TRUE;
END_IF
//Flash Timer
fbTimer1(IN:= TRUE, PT:=T#1S);
//Command
Command:= 'sudo python hello.py';
//Timer is ON
IF fbTimer1.Q THEN
//Reset it and flash again
fbTimer1(IN:= FALSE);
//Execute
SysProcess.SysProcessExecuteCommand2(pszCommand:=Command
, pszStdOut:=szStdOout
, udiStdOutLen:= SIZEOF(szStdOout)
, pResult := ADR(dutResult));
END_IF
Wenn Sie es ausführen, sehen Sie zuerst, dass das Skript nach /var/opt/codesys/hello.py kopiert wird.
Dann wird log.txt erstellt.
Die mittlere Zeit von Log wird aufgezeichnet.
Ja, danke für deine harte Arbeit.
Recommended Posts