Hasilkan Laporan PDF dari PLCnext Menggunakan Python dan REST API
Saya cukup sering ditanya bagaimana laporan PDF dengan data proses dari program PLC dapat dibuat dengan PLCnext. Cara mudahnya adalah dengan menggunakan skrip Python yang mengumpulkan data proses melalui REST API dan membuat PDF di perangkat. Pembuatan skrip dipicu oleh blok fungsi di IEC61131 pada PLC.
Berikut langkah-langkah yang diperlukan:
-
Instal pip pada PLC untuk user "plcnext_firmware". Ini adalah pengguna yang digunakan oleh blok fungsi yang mengeksekusi Python.
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
-
Instal pustaka Python yang diperlukan:
python3 -m permintaan pemasangan pip
python3 -m pip instal fpdf
- Buat skrip Python dan salin ke folder /opt/plcnext/ di 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) # 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')
-
Buat proyek PLC baru.
-
Dalam proyek, buat variabel yang dapat diakses melalui REST API. Untuk variabel lokal, tag "HMI" harus dipilih.
-
Impor perpustakaan PLCnextBase ke dalam proyek. Pustaka tersedia di PLCnext Store.
-
Buat program yang menggunakan perintah PBCL_LinuxShell untuk menjalankan skrip Python. Perlu diketahui bahwa PLC akan melakukan pemanasan setelah eksekusi pertama FB.
- Unduh dan mulai programnya. Skrip dijalankan melalui variabel xExecuteScript. Laporan pdf disimpan di folder /opt/plcnext/. Variabel lokal xRetain harus mencentang tag penahannya.
Catatan:
Blog Pembuat menampilkan aplikasi dan kisah pengguna anggota komunitas yang tidak diuji atau ditinjau oleh Phoenix Contact. Gunakan dengan risiko Anda sendiri.