Generieren Sie PDF-Berichte aus PLCnext mit Python und der REST-API
Ich wurde des Öfteren gefragt, wie mit PLCnext ein PDF-Bericht mit Prozessdaten aus dem SPS-Programm erstellt werden kann. Eine einfache Möglichkeit ist die Verwendung eines Python-Skripts, das Prozessdaten über die REST-API sammelt und das PDF auf dem Gerät erstellt. Die Erstellung 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 vom Funktionsblock verwendet wird, der Python ausführt.
sudo passwd plcnext_firmware --> assign a new password su plcnext_firmware curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3 get-pip.py -
Installieren Sie die erforderlichen Python-Bibliotheken:
python3 -m pip-Installationsanfragen
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,'Monthly 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')
##################################
Read data from the 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']
###############
Timestamp
###############
now = datetime.now()
current_time = now.strftime("%m.%d.%Y %H:%M:%S")
################
Create 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 = 'The power of the pump is ' + str(value) + ' W'
pdf.cell(200, 10, 'Report '+current_time, ln=True)
pdf.cell(200, 10, txt = mes, ln=True)
pdf.output('Report.pdf')
-
Erstellen Sie ein neues SPS-Projekt.
-
Erstellen Sie im Projekt eine Variable, auf die über die REST-API zugegriffen werden kann. Für lokale Variablen muss die Variable „HMI“ 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 Befehl PBCL_LinuxShell 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-Bericht wird im Ordner /opt/plcnext/ gespeichert. Für die lokale Variable xRetain muss das Retain-Tag überprüft werden.
Hinweis:
Der Makers Blog zeigt Anwendungen und User Stories von Community-Mitgliedern, die nicht von Phoenix Contact getestet oder überprüft wurden. Die Nutzung erfolgt auf eigene Gefahr.
Industrietechnik
- Verstärkung Ihres Betonsilos/-lagers mit Stahl
- NIST Cybersecurity Framework 2.0:Stärkung der digitalen Verteidigung von Pennsylvania
- Wie wichtig ist die Fertigung in Philadelphia?
- Sumpner-Test oder Back-to-Back-Test an einem Transformator
- Alles, was Sie über die Härte von Materialien wissen müssen
- Save-A-Lot entdeckt eine einfache Methode zur Steigerung der Effizienz von Distributionszentren
- Digitalisierung von Produktionsanlagen
- 5 Wege zur Senkung der Herstellungskosten
- Wo stehen wir mit IIoT und Smart Warehousing?
- Teil II:Das Wertversprechen von Software-Upgrades