Aplicação Java no PLCnext Control
Com o Java 9, uma nova ferramenta chamada jlink foi introduzido. Ele combina módulos e cria uma imagem de tempo de execução completa. Por um lado, todo o ARM JDK de 32 bits pode ser executado em um PLCnext Control. Mas com jlink e módulos é possível reduzir os recursos necessários para sua aplicação Java. Ele cria um pacote com apenas as partes necessárias do JDK necessárias para seu aplicativo.
Pré-requisitos
- JDK para seu sistema host
- JDK para o controlador
Os binários do OpenJDK para muitas plataformas podem ser encontrados, por exemplo, no AdoptOpenJDK. Para este tutorial, escolhemos o Linux arm32 jdk-12.0.2+10 para o controlador e seu pendente para um sistema host Windows x64. Estamos usando o seguinte local dos JDKs:
C:
---Java
|
+---jdk-12.0.2
| ...
|
---jdk-12-ARM-32bit
...
Criar um módulo de aplicativo
Neste exemplo, estamos apenas imprimindo um Hello World na consola. Para usar jlink temos que colocar este pequeno aplicativo em um módulo. Meu ponto de partida no terminal é uma pasta chamada “HelloWorld” e uma pasta src com a seguinte estrutura.
HelloWorld
---src
---de.plcnext.hello
| module-info.java
|
---de
---plcnext
---hello
HelloWorld.java
Este é nosso pequeno exemplo de código no arquivo HelloWorld.java:
package de.plcnext.hello;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello PLCnext world!");
}
}
E o module-info.java é necessário para criar o módulo:
module de.pxc.hello { }
Depois de criar a pasta de origem, compilamos nosso projeto. Para isso usamos o seguinte comando no terminal.
C:Javajdk-12.0.2binjavac.exe -d .modulesde.plcnext.hello .srcde.plcnext.hellodeplcnexthelloHelloWorld.java .srcde.plcnext.hellomodule-info.java
Uma pasta de módulos e classes java são criadas:
HelloWorld
---modules
---de.plcnext.hello
| module-info.class
|
---de
---plcnext
---hello
HelloWorld.class
Para testar nosso módulo no sistema host, podemos executá-lo com o seguinte comando:
C:Javajdk-12.0.2binjava.exe --module-path .modules -m de.plcnext.hello/de.plcnext.hello.HelloWorld
Isso deve gerar
Hello PLCnext world!
. Como usar o jlink
Agora queremos colocar isso em nosso dispositivo sem todo o JDK de 300 MB. Para isso, estamos usando o jlink sem nenhum parâmetro adicional na primeira etapa. Mas primeiro precisamos de mais uma informação, quais módulos adicionais são necessários. Isso vamos descobrir analisando nosso módulo com jdeps.
C:Javajdk-12.0.2binjdeps.exe --module-path ".modules" --add-modules "de.plcnext.hello"
Isso nos diz que precisamos de
java.base
adicionalmente ao nosso módulo. Como module-path
escolhemos o caminho para nosso aplicativo e o caminho para os jmods de nossa plataforma de destino JDK. Neste caso C:Javajdk-12-ARM-32bitjmods
. Agora nossa chamada jlink se parece com isso:
C:Javajdk-12.0.2binjlink.exe --module-path ".modules;C:Javajdk-12-ARM-32bitjmods" --add-modules "de.plcnext.hello,java.base" --output HelloWorldjre
O resultado é um
HelloWorldjre
pasta com apenas cerca de 45 MB. Copiamos isso para o nosso controlador. No caso deste exemplo para /opt/plcnext/projects/java/
. Precisamos tornar o arquivo “java” na pasta binária HelloWorldjre executável via chmod +x java
e inicie nosso módulo ./java -m de.plcnext.hello/de.plcnext.hello.HelloWorld
Ele deve executar o aplicativo e a saída como antes de
Hello PLCnext world!
. Ao usar alguns parâmetros adicionais do jlink, você pode reduzir ainda mais o pacote (neste exemplo, até 28 MB) usando --strip-debug
, --no-header-files
, --no-man-pages
e --compress=2
. Onde estão os cofres de compressão mais, mas podem prejudicar o desempenho no final. Tecnologia industrial
- Circuitos de controle
- Operadores Java
- Interface Java
- Java try-with-resources
- Anotações Java
- Java 10 - Compartilhamento de dados de classe
- 5 vantagens do controle remoto de produção
- Gerenciando um dispositivo PLCnext Control via SNMP
- Como criar um aplicativo de console PLCnext simples em C#
- Clustermangement no PLCnext?