ユーザ用ツール

サイト用ツール


ja-jp_guide:hmi_connection:arduino:modbus

Arduino IDE・Modbus RTUでHMIを接続する

HMI接続の全体の流れ · Arduino IDEの準備

Modbus RTUでは、HMIがマスターとして要求し、製品がスレーブとして応答します。このSDKではMビットがCoil、DワードがHolding Registerに対応します。アドレスを入力する前に、HMIドライバが0始まりと1始まりのどちらの番号を使うかを確認してください。

このページの例はMPINO-8A4R-S・RS-232 Serial1・局番1・9600 bps・8N1を前提としています。チャンネルと配線はHMIの配線、開発環境はArduino IDEの準備で確認してください。

1. HMI画面に指定するアドレス

画面要素 SDKメモリ Modbus要求の0始まりのアドレス 動作
通信確認の数値 D0 Holding Register 0 FC03で読み取り、0~99を繰り返す
数値入力 D1 Holding Register 1 FC06/FC16で0~9999を書き込み
返された値 D2 Holding Register 2 FC03で読み取り、D1と同じ値
試験スイッチ・ランプ M0 Coil 0 FC05/FC15でトグル書き込み、FC01で読み取り

HMIの編集ソフトが1始まりまたは4xxxxの番号を使う場合は、アドレス変換表で確認してください。数値形式、スイッチ、ランプの共通設定はHMI画面の作成でまとめて行います。

2. 新しいスケッチにコードをすべて入力する

上のアドレスで内部メモリの値をやり取りする簡単な例です。実際の入力ピンとリレー出力ピンは使用しません。

#include <Arduino.h>
 
unsigned long lastTick = 0;
 
void setup() {
  ImodbusRTUMem(16, 16);     // M0とD0~D2を含む通信メモリ
  ImodbusRTUAdr(0, 0);       // 外部アドレスも0から
  ImodbusRTUInit(Serial1, 1, 9600);
  lastTick = millis();
}
 
void loop() {
  if (M == nullptr || D == nullptr) return;
  ImodbusRTU();
 
  unsigned long now = millis();
  if (now - lastTick >= 1000UL) {
    lastTick = now;
    D[0] = (D[0] >= 99) ? 0 : D[0] + 1;
  }
 
  if (D[1] > 9999) D[1] = 9999;
  D[2] = D[1];
}

ImodbusRTUMem()は起動時にメモリを確保し、ImodbusRTU()はループごとにHMIの要求を処理します。

3. 検証と書き込みの後、HMI画面を作成する

スケッチを書き込んだら、下の画面構成例と上のアドレス表を参考にHMIの要素を配置してください。

D0 通信確認の数値、D1 入力、D2 返された値、M0 試験スイッチとランプ

  1. スケッチを保存し、Arduino IDEの検証を実行してください。
  2. ツール → ボードと書き込み用のCOMポートを確認し、書き込みを実行してください。Arduino IDEで始めるも参照してください。
  3. HMI画面の作成で、上のHolding Register 0~2とCoil 0を外部機器の要素に指定し、HMIプロジェクトを転送してください。
  4. 製品とHMIの電源を入れ、動作確認とトラブルシューティングで読み取り → 書き込み → ビットの順に試験してください。

HMIがD1とM0を書き込み、製品のD2とM0を読み返して結果を確認

正常な結果と症状別の確認箇所は動作確認とトラブルシューティングにまとめています。

ja-jp_guide/hmi_connection/arduino/modbus.txt · 最終更新: by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki