PDF-Reports aus PLCnext mit Python und REST-API generieren
Ich wurde häufig gefragt, wie ein PDF-Report mit Prozessdaten aus dem SPS-Programm mit PLCnext erstellt werden kann. Ein einfacher Weg ist die Verwendung eines Python-Skripts, das Prozessdaten über die REST-API sammelt und das PDF auf dem Gerät erstellt. Die Ausführung des Skripts wird durch einen Funktionsbaustein in IEC61131 auf der SPS ausgelöst.
Hier sind die notwendigen Schritte:
Installieren Sie pip auf der SPS für den Benutzer „plcnext_firmware“. Dies ist der Benutzer, der von dem Funktionsbaustein verwendet wird, der das Python-Skript ausführt.
sudo passwd plcnext_firmware --> neues Passwort vergeben su plcnext_firmware curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3 get-pip.pyInstallieren Sie die erforderlichen Python-Bibliotheken:
python3 -m pip install requests
python3 -m pip install fpdf
- Erstellen Sie ein Python-Skript und kopieren Sie es in den Ordner /opt/plcnext/ auf der SPS:
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) # optional self.set_font('Arial', 'B', 20) self.cell(0,10,'Monatlicher Report', 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') ################################## Daten von der SPS via REST lesen ################################## 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'] ############### Zeitstempel ############### now = datetime.now() current_time = now.strftime("%m.%d.%Y %H:%M:%S") ################ PDF erstellen ################ 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 = 'Die Leistung der Pumpe beträgt ' + str(value) + ' W' pdf.cell(200, 10, 'Report '+current_time, ln=True) pdf.cell(200, 10, txt = mes, ln=True) pdf.output('Report.pdf')
Erellen Sie ein neues SPS-Projekt.
Erstellen Sie im Projekt eine Variable, die über die REST-API zugänglich ist. Für lokale Variablen muss das „HMI“-Tag ausgewählt werden.
Importieren Sie die PLCnextBase-Bibliothek in das Projekt. Die Bibliothek ist im PLCnext Store verfügbar.
Erstellen Sie ein Programm, das den PBCL_LinuxShell-Befehl verwendet, um das Python-Skript auszuführen. Beachten Sie, dass die SPS nach der ersten Ausführung des FB einen Warmstart durchführt.
- Laden Sie das Programm herunter und starten Sie es. Das Skript wird über die Variable xExecuteScript ausgeführt. Der PDF-Report wird im Ordner /opt/plcnext/ gespeichert. Die lokale Variable xRetain muss das Retain-Tag gesetzt haben.
Hinweis:
Der Makers Blog zeigt Anwendungen und Benutzerberichte von Community-Mitgliedern, die nicht von Phoenix Contact getestet oder überprüft wurden. Verwendung auf eigenes Risiko.
Industrietechnik
- Warehouse Management Systeme (WMS) erklärt: Vorteile & Auswahl des richtigen Systems
- Vollständige Verbindungstabelle in E3.series 2021 erstellen – Komplettanleitung
- Polyurethan-Härte verstehen: Wie sie die Produktleistung formt
- Infografik: Engineering-Herausforderungen 2022 – Zentrale Schmerzpunkte & Lösungen
- Revolutionärer elektrooptischer Laser: 30 GHz Pulsrate für ultraschnelles Imaging & Kommunikation
- Zahlt sich CSR-Compliance wirklich aus? Erkenntnisse und Realität
- VPI: Die definitive Wahl für Motorenzuverlässigkeit in Singapurs tropischem Klima
- 5 bewährte Schritte für erfolgreiche Industrie-4.0-Proof-of-Concept-Projekte
- Geschäftseffizienz steigern: Lean & Six Sigma Methoden erklärt
- Nahtlose Supply-Chain-Zusammenarbeit: Schlüsselhindernisse überwinden