Génération de rapports PDF depuis PLCnext avec Python et API REST
On m'a souvent demandé comment un rapport PDF avec des données de processus du programme PLC peut être créé avec PLCnext. Une méthode simple consiste à utiliser un script Python qui collecte les données de processus via l'API REST et crée le PDF sur le dispositif. La création du script est déclenchée par un bloc de fonctions en IEC61131 sur l'automate.
Voici les étapes nécessaires :
Installez pip sur le PLC pour l'utilisateur « plcnext_firmware ». C'est l'utilisateur utilisé par le bloc de fonctions qui exécute le Python.
sudo passwd plcnext_firmware --> attribuer un nouveau mot de passe su plcnext_firmware curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3 get-pip.pyInstallez les bibliothèques Python requises :
python3 -m pip install requests
python3 -m pip install fpdf
- Créez un script Python et copiez-le dans le dossier /opt/plcnext/ sur le PLC :
import requests import json import sys from fpdf import FPDF from datetime import datetime sys.path.append('/opt/plcnext/.local/python3.10/site-packages/') class PDF(FPDF): def header(self): self.image('Logo.png', 10, 8, 40) # optionnel self.set_font('Arial', 'B', 20) self.cell(0,10,'Rapport mensuel', border=False, ln=True, align='C') self.ln(20) def footer(self): self.set_y(-15) self.set_font('Arial', 'I', 12) self.cell(0,10,f'Page {self.page_no()}/{{nb}}',align='C') ################################## Lecture des données du PLC via REST ################################## response = requests.get('https://192.168.178.10/_pxc_api/api/variables?paths=Arp.Plc.Eclr/INST_SolarEnergy.diPower', verify=False) data = response.json() variables = data['variables'] value = variables[0]['value'] ############### Horodatage ############### now = datetime.now() current_time = now.strftime("%m.%d.%Y %H:%M:%S") ################ Création du PDF ################ pdf = PDF('P','mm','A4') pdf.alias_nb_pages() pdf.set_auto_page_break(auto=True, margin = 15) pdf.add_page() pdf.set_font('Arial', '', 12) mes = 'La puissance de la pompe est ' + str(value) + ' W' pdf.cell(200, 10, 'Rapport '+current_time, ln=True) pdf.cell(200, 10, txt = mes, ln=True) pdf.output('Report.pdf')
Créez un nouveau projet PLC.
Dans le projet, créez une variable accessible via l'API REST. Pour les variables locales, l'étiquette « HMI » doit être sélectionnée.
Importez la bibliothèque PLCnextBase dans le projet. La bibliothèque est disponible dans le PLCnext Store.
Créez un programme qui utilise la commande PBCL_LinuxShell pour exécuter le script Python. Sachez que le PLC effectuera un warmstart après la première exécution du FB.
- Téléchargez et démarrez le programme. Le script est exécuté via la variable xExecuteScript. Le rapport PDF est stocké dans le dossier /opt/plcnext/. La variable locale xRetain doit avoir l'étiquette retain cochée.
Note :
Le blog Makers présente des applications et des histoires d'utilisateurs de membres de la communauté qui ne sont pas testés ou revus par Phoenix Contact. Utilisez-les à vos propres risques.
Technologie industrielle
- Exploiter la GMAO pour Accélérer la Formation des Techniciens : Guide pour Responsables d'Établissements
- Boostez votre carrière : 4 stratégies éprouvées pour améliorer votre performance au travail
- Évitez ces 10 erreurs courantes dans les logiciels de conception électrique
- Data Lakes vs Data Warehouses : Construire un Data Estate moderne
- Scies à fil : révolutionnant la précision en fabrication semiconducteurs
- Zero Trust : la défense ultime pour la sécurité des appareils IoT
- Principaux avantages du suivi d'actifs pour la réussite de l'entreprise
- Comprendre le code G et le code M : Guide débutant pour la programmation CNC
- 4 étapes éprouvées pour optimiser l'efficacité de l'entrepôt et réduire les coûts