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

無料無料技术资料

这篇内容可直接阅读,适合用于基础学习和検索引流。

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

SimpleModbusの概要

SimpleModbusは、Arduinoプラットフォーム用に開発されたModbus RTUプロトコルライブラリのセットです。Google Code Archive(プロジェクトはアーカイブされている。Juan Besterによって開発され、SimpleModbusMaster(マスターライブラリ)とSimpleModbusSlave(スレーブライブラリ)の2つの独立したArduinoライブラリを含んでいる。プロジェクト名には“Simple”がありますが、Modbus RTU 通信で最も一般的に使用される関数コードをカバーする機能を提供し、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      温度(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; // 温度シミュレーション
    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 "温度";
        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プロジェクトは数年前に更新を停止し、最新のArduinoプロジェクトは以下の代替案を推奨している。

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

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

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;
}

よくある質問のチェック

通信が全く応答しない

  • MAX485 DE/REピンの方向切り替えロジックが正しいことを確認します(送信時HIGH、受信時LOW)。
  • ボーレートとスレーブアドレスがプライマリ·ステーションの構成と一致していることを確認する
  • USBからRS-485モジュール+シリアルアシスタントでバスデータを監視し、信号が存在するかどうかを確認する
  • 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 通信のコア原理(スレーブアドレス、ファンクションコード、レジスタマッピング、CRCチェック)は一貫しています。

この資料を実際のプロジェクトに活用しませんか?

ツールセンターで電文解析、CRCチェック、デバイスデバッグを行うか、要件を送信して選定と接続のアドバイスを受けましょう。

エンジニア会員

この記事を実行可能なデバッグ資料に

登録すると、高度な電文解析、資料パックのダウンロード、コード例、エンジニアリングケース、優先技術サポートが利用可能に。実際のプロジェクト納品に最適です。

高度なツール無制限
資料パックとコードパック
完全なエンジニアリングケースライブラリ
優先技術サポート窓口

发表回复

あなたのメールアドレスアドレス不会被公开。 必須項目已用 * 标注