Java & GraalVM Native Image: 製造アプリでのデータベース接続性を強化
今日の製造業におけるアプリケーションの状況は、硬直した階層に分かれています。トップではERPシステムを使用する経営管理、その下でMESを使用する計画システム、SCADAを使用する監視システム、そして最下層ではPLCとフィールド システムで実現される制御システムです。
経営管理、計画、監視のほとんどのシステムが高水準のオブジェクト指向プログラミング言語で実装されているのに対し、制御システムはC言語が支配的な低水準言語で完全に実装されています。
高水準から低水準の階層レベルへのこの突然の変化はいくつかの問題を生み出します。完全に異なるツールとエコシステムが必要です。実装には、異なる考え方をする全く異なる開発者を起用する必要があります。2つの世界またはシステム間でインターフェースを定義する必要があります。制御レベルで監視レベルから知られている高水準プログラミング言語を継続する可能性がないためだけにです。これが今、変わりました。PLCなどの制御レベルでコンテナ技術を使用することで、この階層レベルでJavaのようなプログラミング言語を使用し、硬直した階層を打破できるようになりました。
Javaは広く使用されている高水準のオブジェクト指向プログラミング言語です。活気あるコミュニティと、既存のツールとソリューションを活用してアプリケーションをより迅速かつ効率的に構築できるライブラリとフレームワークのエコシステムがあります。
JavaがPhoenix Contact PLCnextでどのように利用可能か、PLCnextで実行されるアプリケーションの開発を簡素化し、データベースと直接通信してアプリケーション関連情報を取得・保存し、Webインターフェースで表示する方法を紹介します。Javaで最も人気のあるフレームワークの1つはHibernateです。Javaオブジェクトをリレーショナル データベース テーブルにマッピングするプロセスを簡素化し、データベース操作に必要な定型コードを削減します。Hibernateは高水準の抽象化を提供し、開発者がSQLクエリを直接扱うのではなくオブジェクトで作業できるようにします。これにより、開発サイクルの高速化と開発工数の削減につながります。Hibernateは異なるデータベース ベンダー間の違いを抽象化し、大幅なコード変更なしでデータベースを切り替えやすくします。この記事では、PLCで実行されるソフトウェアをデータベースに接続するためのHibernateの統合について説明します。
PLCnextでのモダン Javaアプリケーション
モダンなJavaアプリケーションの実装を開始するには、QuarkusやSpring Bootのようなアプリケーション フレームワークの使用を推奨します。これらのフレームワークは、プロジェクトの構成と依存関係管理を簡素化します。
この例では、Quarkusの「Hibernate ORMとJakarta Persistenceガイド」を使用してアプリケーションを開始します。ソースコードの例は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 Native Image
多くの開発者は、JavaがいわゆるJavaランタイム環境を必要とし、必要なパフォーマンスを提供しないと信じています。これは組み込みアプリケーションではもはや当てはまりません。この例では、GraalVM Native Imageテクノロジーを使用してJavaコードをネイティブ アプリケーションにコンパイルします。GraalVMのネイティブ イメージ コンパイルは、リソース制約のある環境(組み込みシステムなど)におけるJavaアプリケーションの起動時間とメモリ消費の課題に対する魅力的なソリューションを提供します。Javaアプリケーションを事前にネイティブ実行可能ファイルにコンパイルすることで、GraalVMは従来の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
クロスコンパイルとデバッグのプロセスについては、次の記事で詳細を確認できます: Building and debugging Java native images of MicroDoc GraalVM Embedded
アプリケーションをビルドするには、以下のコマンドを使用します:
$ mvn -Pnative package
次に、PLCnextシミュレータを開始します。シミュレータはqemuイメージとして提供されます。シミュレータは以下の行で起動します:
PLCnext Linux 2023.0 sim-axcf1152 ttyAMA0 sim-axcf1152 login:
生成されたバイナリは、scpコマンドでPLCにコピーできます。これはPLCへのセキュア シェルを開き、バイナリをターゲット システムに転送します。以下のコマンドでアプリケーションを開始できます:
$ ./application
PLCnext Cockpitクライアントを使用して、現在のメモリとストレージ使用量も確認できます:
しかし、単一アプリケーションの起動時間とメモリ消費が、OpenJDKのようなJavaランタイム環境で実行する場合と比較してどうであるかも関心があります。したがって、以下の表で両方の値を測定しました:
起動時間(短いほど良い)、メモリ使用量(少ないほど良い)
GraalVM Native Image: 0.413秒、87 MB
OpenJDK: 13秒、128 MB
GraalVM Native Imageは、起動時間とメモリ使用量の両面でOpenJDKと比較して大幅に改善されたパフォーマンスを提供し、効率的なアプリケーション展開のためのリソース消費最適化における有効性を実証しています。
まとめ
PLCのような制御レベルでJavaを使用することには複数のメリットがあります。第一に、監視レベルと制御レベルの間でテクノロジーの断絶がありません。同じ人材がアプリケーションを実装し、Javaエコシステムと利用可能なツールの恩恵を受けられます。第二に、GraalVMは32ビットおよび64ビットのARMとx86プロセッサのような組み込みデバイスでJavaコードをネイティブ アプリケーションとしてコンパイルできます。したがって、開発者は基盤となるアーキテクチャを気にせず、高水準のオブジェクト指向言語でアプリケーションを実装できます。第三に、Phoenix ContactのPLCnextのコンテナ サポートのおかげで、同じハードウェア コンポーネント内でPLCのインターフェースに直接アクセスでき、現在の製造業アプリケーションの硬直した階層を打破できます。
注記:
Makers Blogは、Phoenix Contactによってテストまたはレビューされていないコミュニティ メンバーのアプリケーションとユーザー ストーリーを紹介しています。自己責任でご利用ください。
産業技術
- ボルトメーターの負荷効果が測定に与える影響とその最小化
- フレキシブル基板ソリューション:PCB製造の品質向上とコスト効率化
- CNCアクリル加工:完全エキスパートガイド
- AGVとロボティクス駐車ソリューション:包括ガイド
- コールドメタルトランスファー(CMT)溶接:薄板シートメタル加工の賢い選択
- 精密の極意:Winndeavorが継続的学習で職人技を高める方法
- 耐久性あるエンクロージャ設計:水とゴミから電子機器を守る
- ビジネスが侵害された早期兆候を見逃さない方法
- アンダーカット設計の最適化:射出成形成功のための完全ガイド
- 金属部品の研磨表面仕上げ比較:機械・化学・電解研磨の違いと選び方
- リアルタイムAIが白黒動画を瞬時に高精度カラー化