Создание отчетов в формате PDF из PLCnext с использованием Python и REST API
Меня довольно часто спрашивали, как с помощью PLCnext можно создать отчет в формате PDF с данными процесса из программы ПЛК. Самый простой способ — использовать скрипт Python, который собирает данные процесса через REST API и создает PDF-файл на устройстве. Создание сценария инициируется функциональным блоком IEC61131 в ПЛК.
Вот необходимые шаги:
- <ли>
- Создайте сценарий Python и скопируйте его в папку /opt/plcnext/ на ПЛК: ол>
- Скачайте и запустите программу. Скрипт выполняется через переменную xExecuteScript. Отчет в формате PDF хранится в папке /opt/plcnext/. У локальной переменной xRetain должен быть отмечен тег сохранения. ол>
Установите pip на ПЛК для пользователя «plcnext_firmware». Это пользователь, который используется функциональным блоком, выполняющим 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
<ли> Установите необходимые библиотеки Python:
ол>python3 -m запросы на установку pip
python3 -m pip установить fpdf
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')
- <ли>
Создайте новый проект ПЛК.
<ли>В проекте создайте переменную, доступ к которой можно получить через REST API. Для локальных переменных необходимо выбрать тег «HMI».
ол>
- <ли>
Импортируйте библиотеку PLCnextBase в проект. Библиотека доступна в магазине PLCnext.
<ли>Создайте программу, которая использует команду PBCL_LinuxShell для выполнения сценария Python. Имейте в виду, что ПЛК выполнит горячий старт после первого выполнения FB.
ол>
Примечание.
В блоге Makers представлены приложения и пользовательские истории членов сообщества, которые не тестировались и не проверялись Phoenix Contact. Используйте их на свой страх и риск.
Промышленные технологии
- Техническое обслуживание, ориентированное на надежность:5 ключевых принципов эффективного RCM
- От фермы к фабрике к столу:промышленность по производству продуктов питания и напитков
- Поиск надежных поставщиков в США:проверенное руководство
- Могут ли сосуществовать обработка стали и защита окружающей среды
- Введение в аналоговые интегральные схемы
- Композиты и секрет облегчения деталей, обработанных на станках с ЧПУ
- Простые и сложные стальные платформы
- Эффективное отслеживание оружия — глобальная проблема
- Обсуждение пошагового процесса сборки кабелей и жгутов проводов
- Что такое подачи и скорости для станков с ЧПУ?