Собственный образ Java и GraalVM:улучшение возможности подключения к базе данных в производственных приложениях
Сегодняшний ландшафт приложений в обрабатывающей промышленности разделен на жесткую иерархию. Начиная с управления с использованием ERP-систем, заканчивая системами планирования с использованием MES, системами контроля с использованием SCADA и заканчивая системами управления, реализованными с помощью ПЛК и полевых систем в самом низу.
В то время как большинство систем управления, планирования и контроля реализованы на объектно-ориентированных языках программирования высокого уровня, системы управления полностью реализованы на языках низкого уровня, при этом C является доминирующим языком программирования.
Этот резкий переход с высокого уровня на низкий уровень иерархии создает несколько проблем. Нужны совершенно другие инструменты и экосистемы. Для реализации необходимо привлечь совершенно других разработчиков с другим образом мышления для реализации задачи. Должны быть определены интерфейсы между двумя мирами или системами. Только потому, что нет возможности продолжить работу с языком программирования высокого уровня, известным с уровня супервизии на уровне управления. Теперь ситуация изменилась. Например, используя контейнерную технологию на уровне управления в ПЛК, мы можем использовать такие языки программирования, как Java, на этом уровне иерархии и разрушать жесткие иерархии.
Java — широко используемый объектно-ориентированный язык высокого уровня. Он имеет активное сообщество и экосистему библиотек и платформ, которые предоставляют дополнительные функциональные возможности, позволяя вам использовать существующие инструменты и решения для более быстрого и эффективного создания вашего приложения.
Мы покажем, как Java доступна на Phoenix Contact PLCnext, чтобы упростить разработку приложения, которое работает на PLCnext и напрямую взаимодействует с базой данных для получения и хранения соответствующей информации о приложении и представления ее в веб-интерфейсе. Одна из самых популярных платформ Java — Hibernate. Он упрощает процесс сопоставления объектов Java с таблицами реляционной базы данных, сокращая объем стандартного кода, необходимого для операций с базой данных. Hibernate обеспечивает высокий уровень абстракции, позволяя разработчикам работать с объектами, а не напрямую с SQL-запросами. Это может привести к ускорению циклов разработки и сокращению усилий по разработке. Hibernate абстрагирует различия между различными поставщиками баз данных, упрощая переключение между базами данных без существенных изменений кода. В этой статье описывается интеграция Hibernate для подключения программного обеспечения, работающего на ПЛК, к базам данных.
Современное Java-приложение на PLCnext
Чтобы начать реализацию современного Java-приложения, мы рекомендуем использовать такие платформы приложений, как Quarkus или Spring Boot. Эти фреймворки упрощают настройку проекта и управление зависимостями.
В этом примере мы запустим наше приложение, используя руководство Quarkus по использованию Hibernate ORM и Jakarta Persistence Guide. Пример исходного кода можно найти в проекте github hibernate-orm-quickstart.
Начнем модифицировать исходный код приложения. Мы можем изменить класс Java Fruit.java в Event.java и добавьте новое поле date .
Пример кода Event.java :
...
@Entity
@Table(name = "Events")
public class Event {
@Id
@GeneratedValue
private Long id;
private String title;
@Column(name = "eventDate")
private LocalDateTime date;
...
Мы можем настроить URL-адрес базы данных и учетные данные, изменив файл application.properties.
Пример src/main/resources/application.properties
quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=myusername
quarkus.datasource.password=mypassword
quarkus.datasource.jdbc.url=jdbc:postgresql://myremotehost/mydatabase
quarkus.datasource.jdbc.max-size=8
quarkus.datasource.jdbc.min-size=2
quarkus.hibernate-orm.database.generation=create
...
При запуске приложения в базе данных будет создана и при необходимости инициализирована таблица. После запуска мы можем взаимодействовать с базой данных через веб-интерфейс, работающий на порту 8080 на ПЛК. Далее:
Имейте в виду, что все это происходит на уровне управления нашей иерархии без какой-либо дополнительной системы между ними.
Собственный образ GraalVM
Многие разработчики до сих пор считают, что Java требует так называемой среды выполнения Java для выполнения байт-кода Java и не обеспечивает необходимой производительности. Это уже не относится к встроенным приложениям. В этом примере мы используем технологию GraalVM Native Image для компиляции Java-кода в собственное приложение. Собственная компиляция образа GraalVM предлагает убедительное решение для решения проблем времени запуска и потребления памяти в приложениях Java, особенно в средах с ограниченными ресурсами, таких как встроенные системы. Заблаговременно компилируя приложения Java в собственные исполняемые файлы, GraalVM значительно сокращает время запуска и затраты памяти по сравнению с традиционной JIT-компиляцией.
GraalVM от MicroDoc обладает уникальной способностью генерировать двоичные файлы для встраиваемых устройств. На момент написания этого руководства GraalVM поддерживает 32-битные и 64-битные процессоры ARM и x86.
Чтобы заранее скомпилировать наше Java-приложение для ПЛК, AXC F 1152 мы можем использовать GraalVM от MicroDoc и настроить некоторые параметры компилятора в файле application.properties .
...
quarkus.native.additional-build-args=--target=linux-arm,-H:CompilerBackend=llvm,-H:+PreserveFramePointer,-Dllvm.bin.dir=/llvm/bin,--native-compiler-path=/arm-none-linux-gnueabihf-g++,-H:CAPCacheDir=/cap-cache/armv7a-linux-gnueabihf
Дополнительную информацию о процессе кросс-компиляции и отладки вы найдете в следующей статье:Сборка и отладка собственных образов Java MicroDoc GraalVM Embedded
Чтобы создать приложение, вы можете просто использовать следующую команду:
$ mvn -Pnative package
Далее запускаем симулятор PLCnext. Симулятор предоставляется в виде образа qemu. Симулятор встретит нас следующей строкой:
PLCnext Linux 2023.0 sim-axcf1152 ttyAMA0
sim-axcf1152 login:
Сгенерированные двоичные файлы можно скопировать в ПЛК с помощью команды scp. который открывает безопасную оболочку для ПЛК и передает двоичный файл в целевую систему. Вы можете запустить приложение с помощью следующей команды:
$ ./application
Используя клиент кабины PLCnext, мы также можем просмотреть текущее использование памяти и хранилища:
Однако нас также интересуют запуск и потребление памяти нашим отдельным приложением по сравнению с запуском приложения в среде выполнения Java, такой как OpenJDK. Таким образом, мы измерили оба значения, как показано в следующей таблице:
Время запуска (меньше — лучше), Использование памяти (меньше — лучше)
Собственный образ GraalVM: 0,413 с, 87 МБ
OpenJDK: 13 с, 128 МБ
GraalVM Native Image предлагает значительно улучшенную производительность с точки зрения времени запуска и использования памяти по сравнению с OpenJDK, демонстрируя свою эффективность в оптимизации потребления ресурсов для эффективного развертывания приложений.
Сводка
Использование Java на уровне управления, например ПЛК, имеет множество преимуществ. Прежде всего, в технологии нет разрыва между уровнем надзора и уровнем контроля. Одни и те же сотрудники могут внедрять приложения и получать выгоду от экосистемы Java и доступных инструментов. Во-вторых, GraalVM может компилировать код Java как собственные приложения на встроенных устройствах, таких как 32-битные и 64-битные процессоры ARM и x86. Таким образом, вашим разработчикам не нужно заботиться о базовой архитектуре, и они могут реализовать ваше приложение на объектно-ориентированном языке высокого уровня. В-третьих, благодаря поддержке контейнеров PLCnext от Phoenix Contact мы имеем доступ к интерфейсам ПЛК непосредственно в одном и том же аппаратном компоненте и можем сломать жесткую иерархию в современных приложениях обрабатывающей промышленности.
Примечание.
В блоге Makers представлены приложения и пользовательские истории членов сообщества, которые не тестировались и не проверялись Phoenix Contact. Используйте их на свой страх и риск.
Промышленные технологии
- Схема десульфатации батареи:идеальное решение для отказа батареи
- Ответит ли HDI PCB на ваши потребности!
- Как программы обучения машинистов могут восполнить пробел в навыках
- Примеры из практики Индустрии 4.0:робототехника, аддитивное производство и горизонтальная / вертикальная инте…
- Типы дефектов литья | Металлы | Отрасли | Металлургия
- Can Bus Shield:общие сведения об этом автомобильном контроллере
- Цепь защиты от перенапряжения:объяснение значения, типов и проектов своими руками
- Что нужно для обеспечения безопасности на рабочем месте
- Датчик алкоголя — распиновка и взаимодействие с Arduino
- От концепции к реальности:производственные технологии становятся мейнстримом