Java および GraalVM ネイティブ イメージ:製造アプリのデータベース接続を強化
今日の製造業におけるアプリケーションの状況は、厳格な階層に分かれています。 ERP システムを使用した管理から始まり、MES を使用した計画システム、SCADA を使用した監視システム、最後に PLC とフィールド システムで実現される制御システムに至るまで。
管理、計画、監督のためのほとんどのシステムは高レベルのオブジェクト指向プログラミング言語で実装されていますが、制御システムは完全に低レベル言語で実装されており、C が主なプログラミング言語です。
この高レベルから低レベルの階層レベルへの突然の変更により、いくつかの問題が発生します。まったく異なるツールとエコシステムが必要です。実装には、異なる考え方を持つまったく異なる開発者を招いてタスクを実装する必要があります。インターフェイスは 2 つの世界またはシステムの間に定義する必要があります。監視レベルで知られている高級プログラミング言語を制御レベルで使い続けることは不可能だからです。これは現在では変わりました。たとえば、PLC の制御レベルでコンテナ テクノロジーを使用すると、この階層レベルで Java などのプログラミング言語を使用し、厳格な階層を打ち破ることができます。
Java は、広く使用されている高レベルのオブジェクト指向プログラミング言語です。追加機能を提供するライブラリとフレームワークの活気のあるコミュニティとエコシステムがあり、既存のツールやソリューションを活用してアプリケーションをより迅速かつ効率的に構築できます。
PLCnext 上で実行され、データベースと直接通信してアプリケーション関連情報を取得および保存し、それらを Web インターフェイス上に表示するアプリケーションの開発を簡素化するために、Phoenix Contact PLCnext で Java を使用する方法を示します。 Java で最も人気のあるフレームワークの 1 つは Hibernate です。これにより、Java オブジェクトをリレーショナル データベース テーブルにマッピングするプロセスが簡素化され、データベース操作に必要な定型コードの量が削減されます。 Hibernate は高レベルの抽象化を提供し、開発者が SQL クエリを直接操作するのではなくオブジェクトを操作できるようにします。これにより、開発サイクルが短縮され、開発労力が軽減される可能性があります。 Hibernate は、異なるデータベース ベンダー間の違いを抽象化し、コードを大幅に変更することなくデータベース間の切り替えを容易にします。この記事では、PLC 上で実行されているソフトウェアをデータベースに接続するための Hibernate の統合について説明します。
PLCnext 上の最新の Java アプリケーション
最新の Java アプリケーションの実装を開始するには、Quarkus や Spring Boot などのアプリケーション フレームワークを使用することをお勧めします。これらのフレームワークにより、プロジェクトの構成と依存関係の管理が簡素化されます。
この例では、Quarkus の「Using Hibernate ORM and Jakarta Persistence Guide」を使用してアプリケーションを起動します。ソース コードの例は、github プロジェクト hibernate-orm-quickstart にあります。
アプリケーションのソースコードの修正を開始します。 Java クラス Fruit.java を変更できます。 Event.java に 新しいフィールド date を追加します。 .
コード Event.java の例 :
...
@Entity
@Table(name = "Events")
public class Event {
@Id
@GeneratedValue
private Long id;
private String title;
@Column(name = "eventDate")
private LocalDateTime date;
...
ファイル application.properties を変更するデータベース URL と資格情報を構成できます。
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
...
アプリケーションが開始されると、データベース内にテーブルが作成され、必要に応じて初期化されます。起動後、PLCnext のポート 8080 で実行されている Web インターフェイスを使用してデータベースと対話できます。
これはすべて、間に追加のシステムが存在することなく、階層のコントロール レベルで行われることに注意してください。
GraalVM ネイティブ イメージ
多くの開発者は、Java バイトコードを実行するにはいわゆる Java ランタイム環境が必要であり、必要なパフォーマンスが提供されないと今でも信じています。これは組み込みアプリケーションには当てはまりません。この例では、GraalVM ネイティブ イメージ テクノロジを使用して、Java コードをネイティブ アプリケーションにコンパイルします。GraalVM のネイティブ イメージ コンパイルは、Java アプリケーション、特に組み込みシステムなどのリソースに制約のある環境における起動時間とメモリ消費の課題に対処するための魅力的なソリューションを提供します。 GraalVM は、Java アプリケーションを事前にネイティブ実行可能ファイルにコンパイルすることにより、従来の Just-In-Time (JIT) コンパイルと比較して起動時間とメモリ オーバーヘッドを大幅に削減します。
MicroDoc の GraalVM には、組み込みデバイス用のバイナリを生成する独自の機能があります。このチュートリアルを書いている時点では、GraalVM は 32 ビットおよび 64 ビットの ARM および x86 プロセッサをサポートしています。
PLC AXC F 1152 を対象とした Java アプリケーションを事前にコンパイルするには 、MicroDoc の GraalVM を使用し、ファイル 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
クロスコンパイルとデバッグのプロセスの詳細については、次の記事を参照してください:MicroDoc GraalVM Embedded の Java ネイティブ イメージのビルドとデバッグ
アプリケーションを構築するには、次のコマンドを使用するだけです:
$ mvn -Pnative package
次に、PLCnext シミュレータを起動します。シミュレーターは qemu イメージとして提供されます。シミュレータは次の行を表示します:
PLCnext Linux 2023.0 sim-axcf1152 ttyAMA0
sim-axcf1152 login:
生成されたバイナリは、コマンド scp を使用して PLC にコピーできます。 これにより、PLC へのセキュア シェルが開かれ、バイナリがターゲット システムに転送されます。次のコマンドを使用してアプリケーションを開始できます。
$ ./application
PLCnext コックピット クライアントを使用すると、現在のメモリとストレージの使用状況を確認することもできます。
ただし、OpenJDK などの Java ランタイム環境でアプリケーションを実行する場合と比較した、単一のアプリケーションの起動とメモリ消費にも関心があります。したがって、次の表に示すように両方の値を測定しました。
起動時間 (短いほど良い)、メモリ使用量 (短いほど良い)
GraalVM ネイティブ イメージ: 0.413 秒、87 MB
OpenJDK: 13 秒、128 MB
GraalVM ネイティブ イメージは、OpenJDK と比較して起動時間とメモリ使用量の両方の点でパフォーマンスが大幅に向上しており、アプリケーションを効率的にデプロイするためのリソース消費の最適化における有効性を示しています。
概要
PLC などの制御レベルで Java を使用すると、複数の利点があります。まず第一に、監督レベルと制御レベルの間には技術の削減はありません。同じ従業員がアプリケーションを実装し、Java エコシステムと利用可能なツールの恩恵を受けることができます。第 2 に、GraalVM は、32 ビットおよび 64 ビットの ARM および x86 プロセッサなどの組み込みデバイス上で Java コードをネイティブ アプリケーションとしてコンパイルできます。したがって、開発者は基礎となるアーキテクチャに配慮する必要がなく、高レベルのオブジェクト指向言語でアプリケーションを実装できます。第三に、フエニックス・コンタクトの PLCnext のコンテナ サポートのおかげで、同じハードウェア コンポーネント内で PLC のインターフェイスに直接アクセスできるようになり、現在の製造業界のアプリケーションの厳格な階層を打ち破ることができます。
注:
Makers Blog には、フエニックス・コンタクトによってテストまたはレビューされていないアプリケーションとコミュニティ メンバーのユーザー ストーリーが表示されます。ご自身の責任で使用してください。
産業技術