Java-приложение на PLCnext Control
В Java 9 появился новый инструмент под названием jlink. был представлен. Он объединяет модули и создает полноценный образ среды выполнения. С одной стороны, весь 32-битный ARM JDK может работать на PLCnext Control. Но с jlink и модулей можно сократить ресурсы, необходимые для вашего Java-приложения. Он создает пакет только с теми частями JDK, которые необходимы для вашего приложения.
Предпосылки
- JDK для вашей хост-системы
- JDK для контроллера
Бинарные файлы OpenJDK для многих платформ можно найти, например. на AdoptOpenJDK. Для этого руководства мы выбрали Linux arm32 jdk-12.0.2+10. для контроллера и его подвески для хост-системы Windows x64. Мы используем следующее расположение JDK:
C:
---Java
|
+---jdk-12.0.2
| ...
|
---jdk-12-ARM-32bit
...
Создать модуль приложения
В этом примере мы просто печатаем Hello World на консоли. Чтобы использовать jlink мы должны поместить это маленькое приложение в модуль. Моей отправной точкой в терминале является папка «HelloWorld» и папка src со следующей структурой.
HelloWorld
---src
---de.plcnext.hello
| module-info.java
|
---de
---plcnext
---hello
HelloWorld.java
Это наш небольшой пример кода в файле HelloWorld.java:
package de.plcnext.hello;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello PLCnext world!");
}
}
И модуль-info.java необходим для создания модуля:
module de.pxc.hello { }
После создания исходной папки компилируем наш проект. Для этого мы используем следующую команду на терминале.
C:Javajdk-12.0.2binjavac.exe -d .modulesde.plcnext.hello .srcde.plcnext.hellodeplcnexthelloHelloWorld.java .srcde.plcnext.hellomodule-info.java
Папка модулей и классы Java созданы:
HelloWorld
---modules
---de.plcnext.hello
| module-info.class
|
---de
---plcnext
---hello
HelloWorld.class
Чтобы протестировать наш модуль в хост-системе, мы можем запустить его с помощью следующей команды:
C:Javajdk-12.0.2binjava.exe --module-path .modules -m de.plcnext.hello/de.plcnext.hello.HelloWorld
Это должно вывести Hello PLCnext world!
.
Как использовать jlink
Теперь мы хотим получить это на нашем устройстве без целых 300 МБ JDK. Для этого мы используем jlink без каких-либо дополнительных параметров на первом шаге. Но для начала нам нужна еще одна информация, какие дополнительные модули нужны. Это мы узнаем, проанализировав наш модуль с помощью jdeps.
C:Javajdk-12.0.2binjdeps.exe --module-path ".modules" --add-modules "de.plcnext.hello"
Это говорит нам, что нам нужно java.base
дополнительно к нашему модулю. Как module-path
мы выбираем путь к нашему приложению и путь к jmods нашей целевой платформы JDK. В этом случае C:Javajdk-12-ARM-32bitjmods
.
Теперь наш вызов jlink выглядит так:
C:Javajdk-12.0.2binjlink.exe --module-path ".modules;C:Javajdk-12-ARM-32bitjmods" --add-modules "de.plcnext.hello,java.base" --output HelloWorldjre
Результатом является HelloWorldjre
папка размером всего около 45 МБ. Мы копируем это в наш контроллер. В этом примере на /opt/plcnext/projects/java/
. Нам нужно сделать файл «java» в бинарной папке HelloWorldjre исполняемым через chmod +x java
и запускаем наш модуль
./java -m de.plcnext.hello/de.plcnext.hello.HelloWorld
Приложение должно запускаться и выводиться, как раньше Hello PLCnext world!
. Используя некоторые дополнительные параметры jlink, вы можете еще больше сократить пакет (в этом примере до 28 МБ), используя --strip-debug
, --no-header-files
, --no-man-pages
и --compress=2
. Где сжатие больше всего безопасно, но может снизить производительность в конце.
Промышленные технологии
- Цепи управления
- Операторы Java
- Java-интерфейс
- Java-проба с ресурсами
- Java-аннотации
- Java 10 — совместное использование данных классов
- 5 преимуществ дистанционного управления производством
- Управление устройством PLCnext Control через SNMP
- Как создать простое консольное приложение PLCnext на C#
- Управление кластером на PLCnext?