Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Industrietechnik

Java 9 Apps auf PLCnext Control mit Jlink optimieren

Mit Java 9 wurde das Tool jlink eingeführt. Es kombiniert Module und baut ein All-in-Runtime-Image. Einerseits kann das komplette 32-Bit-ARM-JDK auf dem PLCnext Control laufen. Mit jlink und Modulen lassen sich aber die für die Java-Applikation benötigten Ressourcen reduzieren. Es erstellt ein Bundle nur mit den notwendigen JDK-Teilen.

Voraussetzungen

OpenJDK-Binaries für viele Plattformen z. B. bei AdoptOpenJDK. Für dieses Tutorial: Linux arm32 jdk-12.0.2+10 für Controller, Pendant für Windows x64 Host. Verwendete JDK-Pfade:

C: ---Java
    | +---jdk-12.0.2
    | ...
    | ---jdk-12-ARM-32bit
    ...

Applikations-Modul erstellen

Beispiel: Hello World auf Konsole ausgeben. Für jlink muss die Applikation in ein Modul verpackt werden. Startordner: HelloWorld mit src-Struktur:

HelloWorld
---src
    ---de.plcnext.hello
        | module-info.java
        ---de
            ---plcnext
                ---hello
                    HelloWorld.java

Code in HelloWorld.java:

package de.plcnext.hello;
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello PLCnext world!");
    }
}

module-info.java für Modul-Erstellung:

module de.pxc.hello { }

Projekt kompilieren:

C:\Java\jdk-12.0.2\bin\javac.exe -d .modules de.plcnext.hello .src\de\plcnext\hello\de\plcnext\hello\HelloWorld.java .src\de\plcnext\hello\module-info.java

Ergebnis: modules-Ordner mit Java-Klassen:

HelloWorld
---modules
    ---de.plcnext.hello
        | module-info.class
        ---de
            ---plcnext
                ---hello
                    HelloWorld.class

Modul auf Host testen:

C:\Java\jdk-12.0.2\bin\java.exe --module-path .modules -m de.plcnext.hello/de.plcnext.hello.HelloWorld

Ausgabe: Hello PLCnext world!.

jlink anwenden

Auf das Gerät ohne komplettes 300 MB JDK. Erst jlink ohne zusätzliche Parameter. Zuerst herausfinden, welche zusätzlichen Module nötig sind – Analyse mit jdeps:

C:\Java\jdk-12.0.2\bin\jdeps.exe --module-path ".modules" --add-modules "de.plcnext.hello"

Ergebnis: java.base zusätzlich zum eigenen Modul nötig. Als module-path Pfad zur Applikation und zu den jmods des Ziel-JDKs wählen: C:\Java\jdk-12-ARM-32bit\jmods.

jlink-Aufruf:

C:\Java\jdk-12.0.2\bin\jlink.exe --module-path ".modules;C:\Java\jdk-12-ARM-32bit\jmods" --add-modules "de.plcnext.hello,java.base" --output HelloWorldjre

Ergebnis: HelloWorldjre-Ordner mit nur ca. 45 MB. Auf Controller kopieren (hier: /opt/plcnext/projects/java/). java-Binary in HelloWorldjre ausführbar machen (chmod +x java) und Modul starten:

./java -m de.plcnext.hello/de.plcnext.hello.HelloWorld

Ausgabe wie zuvor: Hello PLCnext world!. Mit zusätzlichen jlink-Parametern weiter reduzieren (hier auf 28 MB): --strip-debug, --no-header-files, --no-man-pages, --compress=2 (Kompression spart am meisten, kann Performance beeinträchtigen).

Industrietechnik

  1. Steuerschaltungen: Grundlagen, Anwendungen und Best Practices
  2. Java Operatoren meistern: Typen, Syntax und praktische Beispiele
  3. Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
  4. Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
  5. Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
  6. Java 10: Application Class-Data Sharing (AppCDS, JEP 310) – Schnellerer App-Start
  7. 5 Schlüsselvorteile der ferngesteuerten Produktionskontrolle für die moderne Industrie
  8. PLCnext Control-Geräte mit SNMP optimieren: Praktischer Leitfaden
  9. PLCnext Konsolenanwendung mit C# entwickeln: Einsteigerleitfaden
  10. Cluster-Management auf PLCnext: Kubernetes für die industrielle Automatisierung nutzen