Exécuter le script Python pendant CodeSys # RunTime

Cette fois, je voudrais écrire comment exécuter un script Python avec RunTime de Pi4 avec CodeSys installé.

Installation de la bibliothèque

Pour exécuter automatiquement Python Script sur Pi4, vous devez installer la bibliothèque système. https://help.codesys.com/webapp/idx-SysProcess%20Implementation-lib;product=SysProcess%20Implementation;version=3.5.16.0

SysFile Bibliothèque pour gérer le fichier

SysTypes Fichier, la structure utilisée lors de l'exécution des commandes

SysProcess Bibliothèque pour exécuter des commandes

vérifier

Vérifions maintenant si ces bibliothèques sont dans CodeSys. Cliquez sur Library Repository et appuyez sur Find. Entrez SysFile dans la recherche. Si tel est le cas, il est déjà installé. image.png

Lorsque vous appuyez sur Ouvrir, SysFile et sa version sont également affichés dans «Bibliothèques installées». image.png

Import Après avoir confirmé son installation, vous pouvez l'importer dans votre propre projet. Cliquez sur Gestionnaire de bibliothèques> Ajouter une bibliothèque. image.png Cliquez sur Avancé. image.png La fenêtre contextuelle Ajouter une bibliothèque apparaîtra. Entrez Sysfile, sélectionnez SysFile, 3.5.15.0 et cliquez sur OK. image.png

Ensuite, vous pourrez utiliser cette bibliothèque pour votre projet. image.png Insérez SysProcess de la même manière. image.png SysTypes aussi. image.png Parfois, lorsque je redémarre CodeSys, le message "L'environnement du projet n'est pas à jour" apparaît, mais je pense que "Définir tout sur le plus récent" convient. image.png

External file Pour ajouter un script Python, vous utiliserez un objet appelé «fichier externe». L'aide en ligne se trouve ici: 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

Un fichier externe est un objet qui vous permet d'ajouter n'importe quel fichier à votre vue POU ou à votre vue Périphériques. Projet> Ajouter un objet fera apparaître une fenêtre contextuelle pour le fichier externe, qui définira l'emplacement du fichier.

Et même si le fichier externe est téléchargé sur le contrôleur, il ne sera pas mis à jour dans le projet.

Ajouter un script Python

Cliquez sur Ajouter un objet> Fichier externe. image.png

Définissez ici le chemin et le nom du fichier. Après le réglage, cliquez sur «Ajouter». image.png

Vous pouvez également refaire la gestion des fichiers, le minutage de mise à jour, etc. qui ont été définis à l'avance avec Modifier l'objet. image.png

Connectez-vous et téléchargez le fichier externe. Vérifions s'il se trouve correctement à l'intérieur du contrôleur. Double-cliquez sur Device. Cliquez devant Fichier. Le chemin est PlcLogic / Application. Ouais, Hello.py est inclus.

image.png

Script Prenez simplement l'heure actuelle et enregistrez-vous telle quelle.

import datetime
print('Hello,CodeSys')
d=datetime.datetime.now()

path='log.txt'

f=open(path,"a")
f.write(str(d)+'\n')
f.close()

Correctif PI4

Tout d'abord, voici comment utiliser Vi: https://prev.net-newbie.com/linux/commands/vi.html https://jsapachehtml.hatenablog.com/entry/2014/11/23/124350

[SysProcess]
Command=AllowAll

Ajouter. image.png

programme

Programme d'initialisation

Créez un programme qui s'exécute lorsque le contrôleur passe à Arrêt> Exécuter. Cela permet de garantir à chaque fois l'autorité d'exécution du script et du dernier fichier. Il sera utilisé par les événements système. Cliquez ici pour l'aide en ligne: https://help.codesys.com/api-content/2/codesys/3.5.13.0/en/_cds_obj_task_config_sys_event/#e5ddda49857aab52c0a8640e01f6cda7-id-8eb22e41857aab52c0a8640e009f5f0b

Cliquez sur Configuration des tâches. Ouvrez l'onglet Evénements système. Ajoutez un nouvel événement avec le gestionnaire d'ajout d'événements. image.png

Capture d'écran de l'aide en ligne, mais c'est Prepare Start. Appelez avant de démarrer l'application, c'est-à-dire lorsque le contrôleur est Arrêt> Exécuter. image.png Lorsque vous appuyez sur Ajouter un gestionnaire d'événements, la fenêtre contextuelle suivante apparaît. Ici, vous décidez quel événement exécuter et quel programme exécuter. image.png Sélectionnez Préparer le départ pour l'événement. image.png Configurez le programme pour qu'il s'exécute lorsque l'événement est déclenché par un appel de fonction. Entrez simplement le nom ici et appuyez sur OK pour créer la fonction sans autorisation. image.png Créez une variable globale dans GVL. image.png Puis False la valeur initiale. image.png

Programme d'exécution

Créez un POU pour _PythonExecute. image.png

Fonction à utiliser

N'oubliez pas d'importer d'abord la bibliothèque? Vous utiliserez deux fonctions dans cette bibliothèque. Sélectionnez Gestionnaire de bibliothèque> Bibliothèque> Sélectionner une fonction> La description de la fonction est écrite à la 4ème place.

image.png

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

Fonction pour exécuter des commandes système. Notez que la sortie de la commande dépend du système d'exploitation.

SysFileCopy https://help.codesys.com/webapp/SysFileCopy;product=SysFile;version=3.5.9.0 image.png

--Return: RTS_IEC_RESULT, code d'erreur du système d'exécution --szDestFileName: Copier le chemin de destination --szSourceFileName: Copier le chemin source --pulCopied: nombre d'octets copiés

la mise en oeuvre

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

Lorsque vous l'exécutez, vous verrez d'abord que le script est copié dans /var/opt/codesys/hello.py. image.png

Ensuite, log.txt est créé. image.png

L'heure médiane du journal est enregistrée. image.png

Oui, merci pour votre travail acharné.

Recommended Posts

Exécuter le script Python pendant CodeSys # RunTime
Exécuter le script Python avec TS-220 cron
Fichier python de script
squelette de script python
Importer un script python
Exécuter périodiquement un script Python sur AWS Data Pipeline
Exécuter périodiquement un script python avec cron dans un environnement venv
UnicodeEncodeError: 'cp932' pendant le scraping Python
Exécuter automatiquement le fichier python
Exécuter des commandes depuis Python
Mémo de script DynamoDB (Python)
Exécuter la commande depuis Python
POST json avec le script Python 3
[Python] Exécuter la commande unix (sous-processus)
Exécuter des commandes externes avec python
Exécutez le script illustrator à partir de python
Recevoir des arguments d'exécution dans Python 2.7
[Python] Transmission de valeurs pendant le multi-traitement
Personnalisation du runtime Python [sitecustomize, usercustomize]