Java-toepassing op PLCnext Control
Met Java 9, een nieuwe tool genaamd jlink werd geïntroduceerd. Het combineert modules en bouwt een all-in runtime-image op. Enerzijds kan de hele 32 bit ARM JDK op een PLCnext Control draaien. Maar met jlink en modules is het mogelijk om de resources die nodig zijn voor uw Java-toepassing te verminderen. Het creëert een bundel met alleen de benodigde onderdelen van de JDK die nodig zijn voor uw toepassing.
Vereisten
- JDK voor uw hostsysteem
- JDK voor de controller
De binaries van OpenJDK voor veel platforms zijn b.v. op AdoptOpenJDK. Voor deze tutorial kozen we de Linux arm32 jdk-12.0.2+10 voor de controller en zijn hanger voor een Windows x64-hostsysteem. We gebruiken de volgende locatie van de JDK's:
C:
---Java
|
+---jdk-12.0.2
| ...
|
---jdk-12-ARM-32bit
...
Maak een applicatiemodule
In dit voorbeeld printen we gewoon een Hallo wereld op de console. jlink gebruiken we moeten deze kleine applicatie in een module stoppen. Mijn startpunt op de terminal is een map met de naam "HelloWorld" en een src-map met de volgende structuur.
HelloWorld
---src
---de.plcnext.hello
| module-info.java
|
---de
---plcnext
---hello
HelloWorld.java
Dit is ons kleine codevoorbeeld in het HelloWorld.java-bestand:
package de.plcnext.hello;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello PLCnext world!");
}
}
En de module-info.java is nodig om de module te maken:
module de.pxc.hello { }
Nadat we de bronmap hebben gemaakt, compileren we ons project. Hiervoor gebruiken we het volgende commando op de terminal.
C:Javajdk-12.0.2binjavac.exe -d .modulesde.plcnext.hello .srcde.plcnext.hellodeplcnexthelloHelloWorld.java .srcde.plcnext.hellomodule-info.java
Er worden een modulemap en java-klassen gemaakt:
HelloWorld
---modules
---de.plcnext.hello
| module-info.class
|
---de
---plcnext
---hello
HelloWorld.class
Om onze module op het hostsysteem te testen, kunnen we deze uitvoeren met de volgende opdracht:
C:Javajdk-12.0.2binjava.exe --module-path .modules -m de.plcnext.hello/de.plcnext.hello.HelloWorld
Dit zou Hello PLCnext world!
moeten opleveren .
Hoe jlink te gebruiken
Nu willen we dit op ons apparaat krijgen zonder de hele 300 MB JDK. Hiervoor gebruiken we jlink zonder extra parameters in de eerste stap. Maar eerst hebben we nog een informatie nodig, welke extra modules nodig zijn. Hier komen we achter door onze module met jdeps te analyseren.
C:Javajdk-12.0.2binjdeps.exe --module-path ".modules" --add-modules "de.plcnext.hello"
Dit vertelt ons dat we java.base
nodig hebben naast onze module. Als module-path
we kiezen het pad naar onze applicatie en het pad naar de jmods van ons doelplatform JDK. In dit geval C:Javajdk-12-ARM-32bitjmods
.
Nu ziet onze jlink-oproep er als volgt uit:
C:Javajdk-12.0.2binjlink.exe --module-path ".modules;C:Javajdk-12-ARM-32bitjmods" --add-modules "de.plcnext.hello,java.base" --output HelloWorldjre
Het resultaat is een HelloWorldjre
map met slechts ongeveer 45 MB. Wij kopiëren dit naar onze controller. In het geval van dit voorbeeld naar /opt/plcnext/projects/java/
. We moeten het "java"-bestand in de binaire map HelloWorldjre uitvoerbaar maken via chmod +x java
en start onze module
./java -m de.plcnext.hello/de.plcnext.hello.HelloWorld
Het zou de applicatie moeten uitvoeren en uitvoeren zoals eerder Hello PLCnext world!
. Door enkele aanvullende parameters van jlink te gebruiken, kunt u het pakket nog meer strippen (in dit voorbeeld tot 28 MB) door --strip-debug
te gebruiken , --no-header-files
, --no-man-pages
en --compress=2
. Waar zijn compressiekluizen het meest, maar kunnen ze uiteindelijk de prestaties schaden.
Industriële technologie
- Besturingscircuits
- Java-operators
- Java-interface
- Java proberen-met-bronnen
- Java-annotaties
- Java 10 - Klasse-gegevens delen
- 5 voordelen van productiecontrole op afstand
- Een PLCnext Control-apparaat beheren via SNMP
- Hoe maak je een eenvoudige PLCnext console applicatie in C#
- Clusterbeheer op PLCnext?
- Java-toepassing op PLCnext Control