Cette fois, je voudrais écrire comment exécuter un script Python avec RunTime de Pi4 avec CodeSys installé.
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é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é.
Lorsque vous appuyez sur Ouvrir, SysFile et sa version sont également affichés dans «Bibliothèques installées».
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. Cliquez sur Avancé. La fenêtre contextuelle Ajouter une bibliothèque apparaîtra. Entrez Sysfile, sélectionnez SysFile, 3.5.15.0 et cliquez sur OK.
Ensuite, vous pourrez utiliser cette bibliothèque pour votre projet. Insérez SysProcess de la même manière. SysTypes aussi. 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.
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.
Cliquez sur Ajouter un objet> Fichier externe.
Définissez ici le chemin et le nom du fichier. Après le réglage, cliquez sur «Ajouter».
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.
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.
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()
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.
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.
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. 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. Sélectionnez Préparer le départ pour l'événement. 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. Créez une variable globale dans GVL. Puis False la valeur initiale.
Créez un POU pour _PythonExecute.
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.
SysProcessExecuteCommand2 https://help.codesys.com/webapp/SysProcessExecuteCommand2;product=SysProcess%20Implementation;version=3.5.16.0
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
--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
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.
Ensuite, log.txt est créé.
L'heure médiane du journal est enregistrée.
Oui, merci pour votre travail acharné.
Recommended Posts