Führen Sie Python Script während CodeSys # RunTime aus

Dieses Mal möchte ich schreiben, wie Python Script mit RunTime von Pi4 mit installiertem CodeSys ausgeführt wird.

Bibliotheksinstallation

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

prüfen

Ü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. image.png

Wenn Sie auf Öffnen klicken, werden SysFile und seine Version auch in „Installierte Bibliotheken“ angezeigt. image.png

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. image.png Klicken Sie auf Erweitert. image.png 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. image.png

Dann können Sie diese Bibliothek für Ihr Projekt verwenden. image.png Fügen Sie SysProcess auf die gleiche Weise ein. image.png SysTypes auch. image.png Wenn ich CodeSys neu starte, wird gelegentlich die Meldung "Projektumgebung ist nicht aktuell" angezeigt, aber ich denke, "Alle auf Neueste setzen" ist in Ordnung. image.png

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.

Python-Skript hinzufügen

Klicken Sie auf Objekt hinzufügen> Externe Datei. image.png

Definieren Sie hier den Dateipfad und den Namen. Klicken Sie nach dem Einstellen auf "Hinzufügen". image.png

Sie können auch die Dateiverwaltung, das Update-Timing usw. wiederholen, die zuvor mit Objekt bearbeiten festgelegt wurden. image.png

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.

image.png

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()

PI4 beheben

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. image.png

Programm

Initialisierungsprogramm

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. image.png

Screenshot der Online-Hilfe, aber Startvorbereitung. Rufen Sie vor dem Starten der Anwendung auf, dh wenn der Controller Stopp> Ausführen ist. image.png Wenn Sie auf Ereignishandler hinzufügen klicken, wird das folgende Popup angezeigt. Hier entscheiden Sie, welches Ereignis und welches Programm ausgeführt werden soll. image.png Wählen Sie Start für Ereignis vorbereiten. image.png 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. image.png Erstellen Sie eine globale Variable in GVL. image.png Dann False den Anfangswert. image.png

Ausführungsprogramm

Erstellen Sie eine POE für _PythonExecute. image.png

Zu verwendende Funktion

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.

image.png

SysProcessExecuteCommand2 https://help.codesys.com/webapp/SysProcessExecuteCommand2;product=SysProcess%20Implementation;version=3.5.16.0 image.png

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 image.png

--Return: RTS_IEC_RESULT, Fehlercode des Laufzeitsystems --szDestFileName: Zielpfad kopieren --szSourceFileName: Quellpfad kopieren --pulCopied: Anzahl der kopierten Bytes

Implementierung

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. image.png

Dann wird log.txt erstellt. image.png

Die mittlere Zeit von Log wird aufgezeichnet. image.png

Ja, danke für deine harte Arbeit.

Recommended Posts

Führen Sie Python Script während CodeSys # RunTime aus
Führen Sie das Python-Skript mit TS-220 cron aus
Skript-Python-Datei
Python-Skript-Skelett
Importieren Sie ein Python-Skript
Führen Sie Python Script regelmäßig in der AWS Data Pipeline aus
Führen Sie regelmäßig ein Python-Skript mit cron in einer venv-Umgebung aus
UnicodeEncodeError: 'cp932' während des Python-Scrapings
Führen Sie die Python-Datei automatisch aus
Führen Sie Befehle aus Python aus
DynamoDB Script Memo (Python)
Führen Sie den Befehl von Python aus
POST json mit Python 3-Skript
[Python] Unix-Befehl ausführen (Unterprozess)
Führen Sie externe Befehle mit Python aus
Führen Sie das Illustrator-Skript von Python aus
Empfangen Sie Laufzeitargumente in Python 2.7
[Python] Übergabe von Werten während der Mehrfachverarbeitung
Anpassung der Python-Laufzeit [sitecustomize, usercustomize]