産業用ArduinoにHMIを接続する方法
Modbus RTUまたはI²Cでリアルタイムのフィールド入出力やプロセス値をタッチスクリーンHMIに公開する方法と、レジスタマッピング例を紹介します。
読了 7 分
目標:オペレータ画面でのリアルタイムI/O表示
HMIをMPINO産業用Arduinoに接続するとは、コントローラの物理世界、すなわち入力、リレー、トランジスタ、アナログチャネルをオペレータパネルから可視化し制御可能にすることを意味します。HMIはリアルタイムの入力状態を表示し、オペレータが出力を指令できるようにし、アナログ値をトレンド表示します。これらすべてをオペレータがコントローラに直接触れることなく行います。
MPINOはほぼすべてのHMIが標準対応するプロトコルであるRS-485ベースのModbus RTUを通じてI/OをHMIに公開するのが一般的です。さらに列挙したすべてのモデルにオンボードI²Cバスが備わり、パネルアーキテクチャにより適合する場合はローカル周辺機器や補助プロセッサへの近距離接続に使用できます。
パターンはモデルの大きさに関わらず同一です。小型のMPINO-8A8R-Sを配置するのであれ、完全実装のMPINO-16A8R8Tを配置するのであれ、レジスタおよびコイルマップを公開し、ILIB Modbusスレーブを実行し、HMIオブジェクトをそれらのアドレスにバインドします。本ガイドの残りはそのマッピングとそれを支えるファームウェアを案内します。
伝送方式の選択:Modbus RTUかI²Cか
オペレータHMIにはRS-485ベースのModbus RTUがほぼ常に正しい伝送方式です。長くノイズ耐性のあるケーブル上で動作し、すべての主要HMIブランドがModbus RTUドライバを含み、要求応答モデルが入力読み取りとコイル書き込みに直接対応します。MPINOのオートディレクショントランシーバとILIBスレーブスタックは、管理すべきドライバイネーブルタイミングなしにMPINOを清浄なModbusノードにします。
I²Cは別の役割に適します。これは同一パネルやボード上の通信、例えばMPINOとローカルディスプレイコントローラ、エキスパンダ、または監視用マイクロコントローラ間の通信のための近距離マルチデバイスバスです。列挙したすべてのMPINOがシリアルインタフェースとともにI²Cを公開するため、設計者はHMIへの長距離Modbusリンクと近傍機器へのローカルI²Cリンクを組み合わせられます。
HMIがコントローラからある程度離れた独立型オペレータパネルである場合はModbus RTUを選択してください。これが典型的な産業事例です。I²Cは、短い到達距離と単純な2線バスが制約ではなく利点となる、キャビネット内に密結合された周辺機器に限定してください。
レジスタおよびコイルマップの設計
レジスタマップは各アドレスが正確に何を意味するかを定義するため、HMI統合における最も重要な成果物です。ファームウェアを書く前に配置し、公開されたインタフェースとして扱ってください。HMIが読み取るのみの入力はディスクリート入力と入力レジスタに、HMIが指令する出力はコイルと保持レジスタに置きます。
MPINO-8A8Rの明確なマップは次のとおりです。コイル0-7が8つのリレーを駆動し、ディスクリート入力0-7が8つのデジタル入力を報告し、入力レジスタ0-3がEXTERNAL基準ADCの生の0-1023カウントとして4つのアナログチャネルを運びます。HMI作成者が表示スケーリングを正しく構成できるよう、各レジスタの隣に単位とスケーリングを文書化してください。
MPINO-16A8R8Tのようなより豊富なコントローラは同じ方式を拡張します。16のデジタル入力はディスクリート入力0-15、リレーはコイル0-7、8つのトランジスタ出力はコイル8-15、4つのアナログ入力と2つのNTCチャネルは入力レジスタ、2つのアナログ出力は保持レジスタに置きます。安定し適切にラベリングされたマップは、HMI統合担当者がファームウェア開発と並行して作業できるようにします。
ファームウェア:入力の読み取りとリレーコイルの書き込み
マップが固定されると、ファームウェアは簡潔なループに帰着します。リアルタイムのデジタルおよびアナログ入力をスレーブのディスクリート入力および入力レジスタテーブルにコピーし、poll呼び出しでマスタをサービスし、マスタが書き込んだコイル値を物理的なリレーとトランジスタ出力に適用します。
以下のスケッチはModbus RTUスレーブとして動作するMPINO-16A8R8Tに対してまさにこれを実装します。16のディスクリート入力と4つのアナログ入力レジスタを更新し、HMIマスタがそれらを読みコイルを書けるようpoll()を呼び出し、コイル0-15から8つのリレーと8つのトランジスタ出力を駆動します。MPINOアナログフロントエンドが正しいADC読み取りのために要求するanalogReference(EXTERNAL)に留意してください。
この構造は毎スキャンで入力データを新鮮に保ち、poll直後にオペレータ指令を決定論的に適用するため、HMIが表示するものと指令するものが物理I/Oと緊密に同期します。
#include <ILIB.h>
// MPINO-16A8R8T Modbus RTU slave for HMI access
ModbusSlave mb;
const uint8_t DI[16] = {22,23,24,25,26,27,28,29,
30,31,32,33,34,35,36,37};
const uint8_t RELAY[8] = {38,39,40,41,42,43,44,45};
const uint8_t TR[8] = {46,47,48,49,2,3,4,5};
const uint8_t AI[4] = {A0,A1,A2,A3};
void setup() {
analogReference(EXTERNAL); // required for MPINO analog
for (uint8_t i=0;i<16;i++) pinMode(DI[i], INPUT);
for (uint8_t i=0;i<8;i++) pinMode(RELAY[i], OUTPUT);
for (uint8_t i=0;i<8;i++) pinMode(TR[i], OUTPUT);
mb.begin(1, 19200); // slave id 1
}
void loop() {
// Inputs -> discrete inputs 0..15
for (uint8_t i=0;i<16;i++)
mb.setDiscreteInput(i, digitalRead(DI[i]));
// Analog -> input registers 0..3 (raw 0..1023)
for (uint8_t i=0;i<4;i++)
mb.setInputRegister(i, analogRead(AI[i]));
mb.poll(); // HMI reads inputs, writes coils
// Coils 0..7 -> relays, 8..15 -> transistor outputs
for (uint8_t i=0;i<8;i++) digitalWrite(RELAY[i], mb.getCoil(i));
for (uint8_t i=0;i<8;i++) digitalWrite(TR[i], mb.getCoil(8+i));
}HMI側の構成
HMIでbaud rate、データビット、パリティ、ストップビットがMPINOのbegin()呼び出しと正確に一致するModbus RTUシリアルドライバを作成します。MPINOをスレーブアドレスで機器エントリに追加し、公開されたアドレスを指すタグを作成します。入力ランプ用のディスクリート入力タグ、出力ボタン用のコイルタグ、アナログ表示用のレジスタタグです。
画面ウィジェットをこれらのタグにバインドします。モーメンタリまたはメンテインドのプッシュボタンはコイルを書き込み、表示灯はディスクリート入力を読み取り、数値表示やトレンドは入力レジスタを読み取りマップに文書化したスケーリングを適用します。コイルは読み書き可能なため、HMIはリレーを指令すると同時に確認のため指令された状態を読み戻せます。
適切なポーリング間隔(一般に100-500 ms)を設定し、隣接アドレスをグループ化してHMIが単一のModbusトランザクションで読み取るようにします。これはバストラフィックを最小化し、ATmega128またはATmega2560がコントローラの全I/Oを処理する際も画面更新を滑らかに保ちます。
検証、安全、実際の値
パネルをオペレータに引き渡す前に、マッピングされたすべての点をエンドツーエンドで検証してください。各物理入力をトグルして対応するHMIランプが追従することを確認し、各HMIボタンを押して対応するリレーまたはトランジスタ出力が動作することを確認します。アナログ表示が各チャネルに印加した既知の基準を追従し、文書化したスケーリングが正しい工学単位を生成することを検証します。
HMIアラームやインターロックが実際の値のように作用しうるプレースホルダやゼロ値をMPINOが公開しないようにしてください。setup()で出力を定義された安全状態に初期化し、通信喪失時に最後の指令状態を無期限にラッチせず機械を安全な状態に置くようコイルロジックを設計してください。
人員の安全に影響しうる出力については、HMI-Modbus経路のみに依存しないでください。ハードワイヤの非常停止と安全インターロックをコントローラおよびネットワークから独立して維持してください。MPINOとそのHMIは監視制御と可視性を提供し、機能安全は専用のハードワイヤ安全回路の領域に留まります。
対象コントローラ

MPINO-16A8R8T
MPINO-16A8R8T 産業用Arduinoコントローラ
関連ガイド
FAQ
HMIをMPINOにModbus RTUで接続すべきですか、I²Cで接続すべきですか?▾
独立型オペレータHMIにはRS-485ベースのModbus RTUを使用してください。長くノイズ耐性のあるケーブル上で動作し、すべての主要HMIが対応します。I²CはMPINOとディスプレイコントローラやエキスパンダなどのローカル周辺機器間の近距離キャビネット内接続に限定してください。
HMIはMPINOのリレーをどのように指令しますか?▾
HMIはそのリレーにマッピングされたModbusコイルを書き込みます。ファームウェアでILIBスレーブは8つのリレーに対しコイル0-7を公開し、poll()後にスケッチがmb.getCoil(i)でdigitalWrite()を呼び出すため、HMIのボタン押下が物理リレーを励磁または消磁します。
HMIでアナログ値を読み取れますか?▾
はい。各アナログチャネルを入力レジスタにマッピングすると、ファームウェアがEXTERNAL基準の0-1023 ADCカウントを公開し、HMIが文書化したスケーリングを適用して工学単位を表示します。MPINO-16A8R8Tは2つのNTC温度チャネルも同じ方式で公開します。

