Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Industriële technologie

Java & GraalVM Native Image: Databaseconnectiviteit verbeteren in manufacturing-apps

Tegenwoordig is het landschap van applicaties in de manufacturing-industrie verdeeld in een starre hiërarchie. Vanaf management met ERP-systemen tot planningsystemen met MES, supervisiesystemen met SCADA, tot controlsystemen gerealiseerd met PLC's en fieldsystemen aan de bodem.

Terwijl de meeste systemen voor management, planning en supervisie geïmplementeerd zijn in high-level object-georiënteerde programmeertalen, worden controlsystemen volledig geïmplementeerd met low-level-talen waarbij C de dominante programmeertaal is.

Deze abrupte verandering van high-level naar low-level hiërarchieniveau creëert verschillende problemen. Volledig andere tools en ecosystemen zijn nodig. Voor de implementatie moeten volledig andere ontwikkelaars met een andere manier van denken worden ingeschakeld om een taak te implementeren. Interfaces moeten gedefinieerd worden tussen de twee werelden of systemen. Alleen omdat er geen mogelijkheid is om door te gaan met een high-level programmeertaal bekend van het supervisieniveau op het controleniveau. Dit is nu veranderd. Door containertechnologie op het controleniveau in een PLC te gebruiken, kunnen we programmeertalen zoals Java op dit hiërarchieniveau gebruiken en de starre hiërarchies doorbreken.

Java is een wijd gebruikte, high-level, object-georiënteerde programmeertaal. Het heeft een levendige community en ecosysteem van bibliotheken en frameworks die extra functionaliteit bieden, zodat je bestaande tools en oplossingen kunt benutten om je applicatie sneller en efficiënter te bouwen.

We laten zien hoe Java beschikbaar is op een Phoenix Contact PLCnext om de ontwikkeling van een applicatie te vereenvoudigen die op PLCnext draait en direct communiceert met een database om toepassingsrelevante informatie op te halen en op te slaan en op een webinterface te presenteren. Een van de populairste frameworks in Java is Hibernate. Het vereenvoudigt het proces van het mappen van Java-objecten op relationele databasetabellen, wat de hoeveelheid boilerplate-code voor databasebewerkingen vermindert. Hibernate biedt een hoog niveau van abstractie, zodat ontwikkelaars met objecten kunnen werken in plaats van direct met SQL-query's. Dit kan leiden tot snellere ontwikkelcycli en verminderde ontwikkelinspanning. Hibernate abstraheert de verschillen tussen verschillende databasevendors weg, wat het makkelijker maakt om tussen databases te schakelen zonder significante codewijzigingen. Dit artikel beschrijft de integratie van Hibernate voor het verbinden van software op PLC's met databases.

Moderne Java-applicatie op PLCnext

Om een moderne Java-applicatie te beginnen te implementeren, raden we aan om applicatieframeworks zoals Quarkus of Spring Boot te gebruiken. Deze frameworks vereenvoudigen de configuratie van het project en het dependency management.

Voor dit voorbeeld starten we onze applicatie met behulp van Quarkus' Using Hibernate ORM and Jakarta Persistence Guide. Een voorbeeld van de broncode is te vinden op het GitHub-project hibernate-orm-quickstart.

We beginnen met het wijzigen van de broncode van de applicatie. We kunnen de Java-klasse Fruit.java veranderen in Event.java en een nieuw veld date toevoegen.

Voorbeeld van code Event.java:

... @Entity @Table(name = "Events") public class Event { @Id @GeneratedValue private Long id; private String title; @Column(name = "eventDate") private LocalDateTime date; ... 

We kunnen de database-URL en de credentials configureren door het bestand application.properties aan te passen.

Voorbeeld van 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 ... 

Wanneer de applicatie start, wordt een tabel in de database aangemaakt en geïnitialiseerd indien nodig. Na de start kunnen we met de database interacteren via een webinterface die op poort 8080 op de PLCnext draait:

Houd er rekening mee, dit alles gebeurt op het controleniveau van onze hiërarchie zonder enig additioneel systeem ertussen.

GraalVM Native Image

Veel ontwikkelaars geloven nog steeds dat Java een Java Runtime Environment vereist om Java-bytecode uit te voeren en niet de benodigde prestaties levert. Dit is niet langer het geval voor embedded-applicaties. In dit voorbeeld gebruiken we de GraalVM Native Image-technologie om Java-code te compileren naar een native applicatie. GraalVM's native image-compilatie biedt een overtuigende oplossing voor de uitdagingen van opstarttijd en geheugenverbruik in Java-applicaties, met name in resource-beperkte omgevingen zoals embedded-systemen. Door Java-applicaties ahead-of-time te compileren naar native executables, verlaagt GraalVM de opstarttijd en geheugenoverhead aanzienlijk ten opzichte van traditionele Just-In-Time (JIT)-compilatie.

MicroDoc's GraalVM heeft de unieke mogelijkheid om binaries te genereren voor embedded-apparaten. Op het moment van schrijven van deze tutorial ondersteunt GraalVM 32-bits en 64-bits ARM en x86-processoren.

Om onze Java-applicatie ahead-of-time te compileren voor de PLC AXC F 1152, kunnen we MicroDoc's GraalVM gebruiken en enkele compiler-opties configureren in het bestand 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 

Je vindt meer informatie over het proces van cross-compileren en debuggen in het volgende artikel: Building and debugging Java native images of MicroDoc GraalVM Embedded

Om de applicatie te bouwen, kun je gewoon het volgende commando gebruiken:

$ mvn -Pnative package 

Vervolgens starten we de PLCnext-simulator. De simulator wordt als een qemu-image geleverd. De simulator begroet ons met de volgende regel:

PLCnext Linux 2023.0 sim-axcf1152 ttyAMA0 sim-axcf1152 login: 

De gegenereerde binaries kunnen naar de PLC gekopieerd worden met het commando scp dat een secure shell naar de PLC opent en de binary naar het doelsysteem overbrengt. Je kunt de applicatie starten met het volgende commando:

$ ./application 

Met de PLCnext Cockpit-client kunnen we ook een kijkje nemen naar het huidige geheugen- en opslaggebruik:

We zijn echter ook geïnteresseerd in de opstarttijd en het geheugenverbruik van onze enkele applicatie vergeleken met het draaien van de applicatie in een Java Runtime Environment zoals OpenJDK. Daarom hebben we beide waarden gemeten zoals in de volgende tabel getoond:

Opstarttijd (minder is beter), Geheugengebruik (minder is beter)

GraalVM Native Image: 0,413 s, 87 MB

OpenJDK: 13 s, 128 MB

GraalVM Native Image biedt aanzienlijk verbeterde prestaties qua opstarttijd en geheugengebruik ten opzichte van OpenJDK, wat de effectiviteit aantoont in het optimaliseren van resourceverbruik voor efficiënte applicatie-implementatie.

Samenvatting

Java gebruiken op het controleniveau zoals een PLC heeft meerdere voordelen. Allereerst is er geen breuk in technologie tussen supervisie- en controleniveau. Hetzelfde team kan applicaties implementeren en profiteren van het Java-ecosysteem en de beschikbare tools. Tweedens kan GraalVM Java-code compileren als native applicaties op embedded-apparaten zoals 32-bits en 64-bits ARM en x86-processoren. Dus je ontwikkelaars hoeven geen rekening te houden met de onderliggende architectuur en kunnen hun applicatie implementeren in een high-level object-georiënteerde taal. Derdens, dankzij de containerondersteuning van Phoenix Contact's PLCnext, hebben we toegang tot de interfaces van de PLC direct in hetzelfde hardwarecomponent en kunnen we de starre hiërarchies in de huidige manufacturing-industrie-applicaties doorbreken.

Let op:

De Makers Blog toont toepassingen en gebruikersverhalen van community-leden die niet getest of beoordeeld zijn door Phoenix Contact. Gebruik ze op eigen risico.

Industriële technologie

  1. Golvorming & Modulatie uitgelegd: Essentiële concepten voor elektronica- en communicatie-ingenieursstudenten
  2. Facility Management Meesterschap: Bewezen Strategieën voor Operaties, Leiderschap en Project Excellentie
  3. Utiliteitspaal Identificatie Systemen Begrijpen: Doel, Voordelen en Implementatie
  4. Essentiële gids voor hydraulische pompontwerp: principes & toepassingen
  5. Uw inkoopprojectresultaten nauwkeurig beoordelen
  6. Black Friday 2020 Navigeren: Strategieën om de Rush en Fabrikanten’ ‘Gekke Donderdag’ Aan Te Pakken
  7. Waarom Originele OEM-onderdelen Naamarket-onderdelen Overtreffen Voor Lange-termijn Betrouwbaarheid
  8. Industrie 4.0 in Actie: Robotica, Additive Manufacturing, en Geïntegreerde Productie Case Studies
  9. Thuiswerken: De permanente transformatie van IT-inkoop
  10. Feestdagen ketensbeveiliging versterken: best practices & inzichten
  11. ROI Maximeren Met Inbound Marketing Voor Industriële Bedrijven & Fabrikanten