SimpleModbus Arduinoライブラリの使い方:ArduinoをModbus RTUでCommunicationさせる

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

SimpleModbus Arduinoライブラリの使い方:ArduinoをModbus RTUでCommunicationさせる

SimpleModbusの概要

SimpleModbusは、Arduinoプラットフォーム用に開発されたModbus RTUプロトコルライブラリのセットです。Google Code Archive(プロジェクトはアーカイブされている。Juan Besterによって開発され、SimpleModbusMaster(マスターライブラリ)とSimpleModbusSlave(スレーブライブラリ)の2つの独立したArduinoライブラリを含んでいる。プロジェクト名には“Simple”がありますが、Modbus RTU Communicationで最も一般的に使用される関数コードをカバーする機能を提供し、Arduino初心者やラピッドプロトタイピングに最適です。

⚠️注意点は:SimpleModbusプロジェクトはアクティブに更新されません。新しいプロジェクトには、より近代的なものを推奨する。Modbus RTU for Arduinoライブラリライブラリ名は“Modbus”またはesp-modbus(ESP32プラットフォーム)しかし、SimpleModbusのコードはシンプルでわかりやすく、Modbusプロトコル実装を学ぶための入門書として貴重です。

SimpleModbusサポートされる機能

  • SimpleModbusMasterFC 01
  • SimpleModbusSlaveFC03(リードホールドレジスタ)およびFC16(ライトマルチレジスタ)をサポート
  • ハードウェア要件Arduino + RS-485変換モジュール(MAX485など)

ハードウェア接続

ArduinoはMAX485モジュールを介してRS-485バスに接続する。典型的な配線方法:

MAX 48 5ピンArduino Uno説明書は
VCC5Vパワー·パワー
GNDGND土地のこと。
RORX (D0)データ受信→ Arduino RX
DITX (D1)データ送信:ArduinoのTX
RED2受信イネーブル(低効率)
DED2送信イネーブル(高効率)、REとに同一 IOに
AAバス+WWNRS-485Aライン差動+
BBバス-RS-485Bライン(差動-)

️RS-485バスの両端に120Ωの終端抵抗(A-B間)を追加する必要があります。さもなければ、長距離通信では信号反射が発生し、データエラーにつながります。

SimpleModbusSlaveの例:Modbus RTUスレーブとしてのArduino

#include SimpleModbusSl.h>

//保持レジスタ配列を定義する(10個のレジスタ)
enum {
    TEMP_REG = 0      temperature(x 10)
    HUMIDITY_REG       湿度(x 10)
    COIL_、        //コイル状態
    SETPOINT、           //設定値
    // ...より多くのレジスタ。
    TOTAL_REGS = 10
};

unsigned int holdingRegs[TOTAL_REGS];

void setup {
    //RS-485 方向制御ピンを設定する
    pinMode 2、pinMode 2、;
    
    // SimpleModbusSlave引数
    // 1。レジスタ配列アドレス
    // 2.。レジスタの数
    // 3.。送信イネーブルピン
    // 4。送信イネーブル有効レベル
    // 5。駅からの住所
    // 6。ボーレート
    【7】。検証(0=検証なし)
    mod_ure hingRegs TOTAL_REGS
                     2,                  // TXenピン
                     HIGH、               // TXEN Highで送信
                     1,                  //駅からのアドレス
                     9600,               //ボーレート
                     0 - 0です。                 //チェックアウト
}

void loop {
    //センサデータの更新(アナログ)
    holdingRegs[TEMP_REG] = analogRead A0/ 2; // temperatureシミュレーション
    holdingRegs[HUMIDITY_REG] = analogRead A1/ 3;
    holdingRegs[COIL_STATUS] = digitalRead 3;
    
    //Modbusリクエストの処理
    mod_update;
}

SimpleModbusMasterの例スレーブデータの読み込み

#include SimpleModbusMaster.h>

#define TOTAL_NO_OF_REGISTERS 2
unsigned int holdingRegs[TOTAL_NO_OF_REGISTERS];

void setup {
    Serial.begin(96 00);
    
    // SimpleModbusMaster引数
    // 1。ローカルレジスタ配列
    // 2.。読み出し/书き込みレジスタ数
    // 3.。送信イネーブルピン
    // 4。送信イネーブル有効レベル
    mod_ure hingRegs TOTAL_NO_OF_ISTERS
                     2,      // TXenピン
                     HIGH; // TXEN Highのとき送信
}

void loop {
    //スレーブアドレス1、スタートアドレス0、2つのホールドレジスタを読み出す
    unsigned char result = modbus_read_holding_registers 1,0,2;
    
    if result == 0 {
        Serial.print "temperature";
        Serial.print holdingRegs[0] / 10.0;
        Serial.print "°C、湿度";
        Serial.print holdingRegs[1] / 10.0;
        Serial.println "%";
    (エルゼ)
        Serial.print "Modbus読み取りに失敗しました。エラーコード";
        Serial.println result;
    }
    
    delay 1000;
}

SimpleModbus vs現代の代替案

SimpleModbusプロジェクトは数年前に更新をStopし、最新のArduinoプロジェクトは以下の代替案を推奨している。

クワの名前プラットフォームは特徴は
ArduinoModbusArduino(公式サイト)Arduinoの公式メンテナンス、RTUとTCPのサポート、Arduino IDEライブラリマネージャのワンクリックインストール
Modbus-Master-Slave-for-ArduinoArduinoマスターとスレーブを同時にサポートし、機能コードは完全にカバーし、GitHubのアクティブな更新。
esp-modbusESP32 / ESP8266Modbus RTU/TCP/ASCIIをサポートするEspressif公式ライブラリ、優れたパフォーマンス
SimpleModbusArduino学習に適していますが、Stopします。

ESP32 上のModbus RTU Communication(最新のソリューション)

ESP32プラットフォームを使用している場合は、Espressif公式のesp-modbusライブラリをお勧めします。以下は最小の例です。

// ESP32はHardware Serial + MAX485を使用
#include Arduinoを含む>

//RS-485制御ピンの定義
#define RXD 2 16 //ESP 32 RX 2
#define TXD 2 17 //ESP 32 TX2
#define DE_RE 4 // RS-485 方向制御

ware

void setup {
    Serial.begin 115200;
    modbusSerial.begin(96 00、SERIAL_8 N 1、RXD 2、TXD 2);
    pinMode DE_RE、;
    digitalWrite DE_RE、LOW; //デフォルト受信モード
}

void loop {
    //Modbus RTUリクエストの送信(手動フレーム構築)
    uint8_t request[] = {
        0 x 0 1、        //駅からのアドレス
        0 x 0 3、        //関数コード(リードホールドレジスタ)
        0x00 0x00//開始アドレス
        0 x 0 0、0 x 0 2   //2レジスタを読み込む
    };
    uint16_t crc = calculateCRC request 6;
    request[6] = crc 0 xFF;
    request[7] = crc 8;
    
    送信モードに切り替えます。
    digitalWrite DE_RE、HIGH;
    delayMicroseconds 100;
    modbusSerial.write request 8;
    modbusSerial.flush;
    
    受信モードに戻る。
    digitalWrite DE_RE、LOW;
    
    //応答を待ち
    delay(500);
    while modbusSerial.available {
        Serial.printf " % 02X" modbusSerial.read;
    }
    Serial.println;
    delay 2000;
}

Arduino公式Arduino Modbusライブラリ

Arduino IDEでライブラリマネージャ(Sketch → Include Library → Manage Libraries)を開き、検索します。"ArduinoModbus"インストールできます。Arduino ModbusはModbus RTU(RS-48 5)とModbus TCP(WiFi/Ethernet)をマスターモードとスレーブモードでサポートしています。

#include Arduino RS485.h>
#include Arduino Modbus.h>

void setup {
    Serial.begin(96 00);
    
    RS-485の初期化
    RS485.begin(96 00);
    
    //Modbus RTUスレーブ(アドレス1)を起動
    Modbus RTUServer.begin(1,96 00);
    
    //保持レジスタの設定
    ModbusRTUServer.configureHoldingRegisters 0 10;
}

void loop {
    //Modbusリクエストの送信
    ModbusRTUServer.poll;
    
    //レジスタ値を更新
    int orValue = anRead A0;
    ModbusRTUServer.hingRegister0 orValue;
}

よくある質問のチェック

Communicationが全く応答しない

  • MAX485 DE/REピンの方向切り替えロジックが正しいことを確認します(送信時HIGH、受信時LOW)。
  • ボーレートとスレーブアドレスがプライマリ·ステーションの構成と一致していることを確認する
  • USBからRS-485モジュール+シリアルアシスタントでバスデータを監視し、信号がexistenceするかどうかを確認する
  • A/Bラインが反転しているかどうかを確認します(マルチメータで差動電圧を測定:AとBが正電圧になるとバスがアイドルになります)。

時折データまたはCRCエラーを失う

  • RS-485バスの両端に120Ωの終端抵抗があるかどうかを確認します
  • ボーレートを下げる試み(4800または2400)、シグナルインテグリティ要因を除外
  • バス長の短縮またはリピータの追加
  • 送信完了確認から受信切り替えまでに十分な遅延(少なくとも1文字)を残すこと。

概要まとめ

初期のArduino Modbus RTUライブラリとしてSimpleModbusは、コードが簡潔で機能が明確で、初心者がModbusプロトコルの実装原理を理解するのに適している。しかし、実際のプロジェクトでは、よりアクティブで機能的な代替手段が推奨されます。Arduinoの公式ライブラリであるArduino Modbus(汎用Arduinoプラットフォーム)またはesp-modbus(ESP32/ESP 826 6プラットフォーム)です。どのライブラリを選択しても、Modbus RTU Communicationのコア原理(スレーブアドレス、ファンクションコード、レジスタマッピング、CRCチェック)は一貫しています。

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.