Modbusコネクタ
Modbusコネクタは、Modbusプロトコルを使用してPLCおよび産業デバイスとの通信を可能にし、シリアル(RTU)とTCP/IP接続の両方をサポートします。
コネクタタイプ:
ModbusReader- Modbusデバイスからデータを読み取るModbusWriter- Modbusデバイスにデータを書き込む
- ✅ 複数のトランスポートプロトコル(TCP、RTU、UDP、TLS)
- ✅ すべてのレジスタタイプ(Holding、Input、Coil、Discrete Input)
- ✅ 複数のデータ型(Int16/32/64、UInt16/32/64、Float32/64、ASCII)
- ✅ 設定可能なバイトおよびワード順序
- ✅ マルチデバイスネットワーク用のUnit IDサポート
トランスポートプロトコル
Section titled “トランスポートプロトコル”Meddleは以下のModbusトランスポートをサポートします:
TCP- イーサネット上のModbus TCPTCPWithTLS- TLS暗号化付きModbus TCPUDP- UDP上のModbusRTU- シリアル上のModbus RTURTUOverTCP- TCPにカプセル化されたModbus RTURTUOverUDP- UDPにカプセル化されたModbus RTU
Modbus TCP Reader
Section titled “Modbus TCP Reader”{ "type": "ModbusReader", "config": { "endpoint": "192.168.1.100:502", "transport": "TCP", "pollingRate": 1000, "defaultUnitId": 1, "defaultBitOrder": "BigEndian", "defaultWordOrder": "HighFirst" }, "variables": [ { "key": "temperature", "address": 0, "registerType": "HoldingRegister", "dataType": "Float64" }, { "key": "pressure", "address": 4, "registerType": "HoldingRegister", "dataType": "Int32" } ]}Modbus RTU Reader
Section titled “Modbus RTU Reader”{ "type": "ModbusReader", "config": { "endpoint": "/dev/ttyUSB0", "transport": "RTU", "pollingRate": 1000, "defaultUnitId": 1, "baudRate": 9600, "dataBits": 8, "parity": "None", "stopBits": 1 }, "variables": [ { "key": "sensor_value", "address": 0, "registerType": "InputRegister", "dataType": "UInt16" } ]}Modbus Writer
Section titled “Modbus Writer”{ "type": "ModbusWriter", "config": { "endpoint": "192.168.1.100:502", "transport": "TCP", "defaultUnitId": 1 }, "variables": [ { "key": "setpoint", "address": 100, "registerType": "HoldingRegister", "dataType": "Float32" }, { "key": "enable", "address": 0, "registerType": "Coil" } ]}レジスタタイプ
Section titled “レジスタタイプ”Holding Registers(読み取り/書き込み)
Section titled “Holding Registers(読み取り/書き込み)”読み取りおよび書き込みが可能な汎用レジスタ。
{ "key": "temperature", "address": 0, "registerType": "HoldingRegister", "dataType": "Float64"}機能コード: Read(03)、Write Single(06)、Write Multiple(16)
Input Registers(読み取り専用)
Section titled “Input Registers(読み取り専用)”通常センサーデータに使用される読み取り専用レジスタ。
{ "key": "sensor_reading", "address": 0, "registerType": "InputRegister", "dataType": "Int16"}機能コード: Read(04)
Coils(読み取り/書き込みブール値)
Section titled “Coils(読み取り/書き込みブール値)”デジタル出力用の単一ビットレジスタ。
{ "key": "motor_enable", "address": 0, "registerType": "Coil"}機能コード: Read(01)、Write Single(05)、Write Multiple(15)
Discrete Inputs(読み取り専用ブール値)
Section titled “Discrete Inputs(読み取り専用ブール値)”デジタル入力用の読み取り専用単一ビットレジスタ。
{ "key": "limit_switch", "address": 0, "registerType": "DiscreteInput"}機能コード: Read(02)
// 16ビット符号付き整数(-32768から32767){"dataType": "Int16"} // 1レジスタ
// 16ビット符号なし整数(0から65535){"dataType": "UInt16"} // 1レジスタ// 32ビット符号付き整数{"dataType": "Int32"} // 2レジスタ
// 32ビット符号なし整数{"dataType": "UInt32"} // 2レジスタ// 64ビット符号付き整数{"dataType": "Int64"} // 4レジスタ
// 64ビット符号なし整数{"dataType": "UInt64"} // 4レジスタ浮動小数点型
Section titled “浮動小数点型”// 32ビットfloat(4バイト){"dataType": "Float32"} // 2レジスタ
// 64ビットfloat(8バイト){"dataType": "Float64"} // 4レジスタ// ASCII文字(レジスタあたり1バイト){"dataType": "AsciiChar"} // 1レジスタバイトおよびワード順序
Section titled “バイトおよびワード順序”Modbusデバイスは異なるバイトおよびワード順序を使用できます。デバイスに合わせて設定してください:
ビット順序(バイト順序)
Section titled “ビット順序(バイト順序)”{ "defaultBitOrder": "BigEndian" // または "LittleEndian"}- BigEndian: 最上位バイトが最初(デフォルト、最も一般的)
- LittleEndian: 最下位バイトが最初
マルチレジスタ値(32ビット、64ビット)の場合:
{ "defaultWordOrder": "HighFirst" // または "LowFirst"}- HighFirst: 上位ワードが最初(デフォルト)
- LowFirst: 下位ワードが最初
変数ごとのオーバーライド
Section titled “変数ごとのオーバーライド”{ "key": "special_value", "address": 10, "registerType": "HoldingRegister", "dataType": "Float32", "bitOrder": "LittleEndian", "wordOrder": "LowFirst"}RTUシリアル設定
Section titled “RTUシリアル設定”シリアル接続でのModbus RTUの場合:
{ "endpoint": "/dev/ttyUSB0", "transport": "RTU", "baudRate": 9600, "dataBits": 8, "parity": "None", "stopBits": 1, "timeout": 1000}パラメータ:
baudRate: 1200、2400、4800、9600、19200、38400、57600、115200dataBits: 7または8parity: None、Even、OddstopBits: 1または2timeout: ミリ秒単位の読み取りタイムアウト
Unit ID(スレーブアドレス)
Section titled “Unit ID(スレーブアドレス)”Modbusは、Unit IDを使用して同じネットワーク上の複数のデバイスをサポートします:
{ "defaultUnitId": 1 // すべての変数のデフォルト}変数ごとのオーバーライド:
{ "key": "device2_temp", "address": 0, "registerType": "HoldingRegister", "dataType": "Float32", "unitId": 2 // この変数のオーバーライド}一般的なユースケース
Section titled “一般的なユースケース”1. エネルギーメーター読み取り
Section titled “1. エネルギーメーター読み取り”{ "type": "ModbusReader", "config": { "endpoint": "192.168.1.50:502", "transport": "TCP", "pollingRate": 5000, "defaultUnitId": 1 }, "variables": [ { "key": "voltage", "address": 0, "registerType": "InputRegister", "dataType": "Float32" }, { "key": "current", "address": 2, "registerType": "InputRegister", "dataType": "Float32" }, { "key": "power", "address": 4, "registerType": "InputRegister", "dataType": "Float32" }, { "key": "energy", "address": 6, "registerType": "InputRegister", "dataType": "Float64" } ]}2. PLC制御
Section titled “2. PLC制御”{ "type": "ModbusWriter", "config": { "endpoint": "192.168.1.100:502", "transport": "TCP", "defaultUnitId": 1 }, "variables": [ { "key": "motor_speed", "address": 100, "registerType": "HoldingRegister", "dataType": "UInt16" }, { "key": "motor_start", "address": 0, "registerType": "Coil" }, { "key": "motor_stop", "address": 1, "registerType": "Coil" } ]}3. マルチデバイスネットワーク
Section titled “3. マルチデバイスネットワーク”{ "type": "ModbusReader", "config": { "endpoint": "/dev/ttyUSB0", "transport": "RTU", "pollingRate": 1000, "baudRate": 9600 }, "variables": [ { "key": "device1_temp", "address": 0, "registerType": "HoldingRegister", "dataType": "Float32", "unitId": 1 }, { "key": "device2_temp", "address": 0, "registerType": "HoldingRegister", "dataType": "Float32", "unitId": 2 }, { "key": "device3_temp", "address": 0, "registerType": "HoldingRegister", "dataType": "Float32", "unitId": 3 } ]}トラブルシューティング
Section titled “トラブルシューティング”接続タイムアウト
Section titled “接続タイムアウト”解決策:
- エンドポイントアドレスとポートを確認
- ネットワーク接続を確認
- タイムアウト値を増やす
- デバイスの電源が入っていて応答していることを確認
無効なデータ
Section titled “無効なデータ”解決策:
- バイト順序を確認(
BigEndianvsLittleEndian) - ワード順序を確認(
HighFirstvsLowFirst) - データ型がデバイス仕様と一致することを確認
- レジスタアドレスが正しいことを確認
RTU通信エラー
Section titled “RTU通信エラー”解決策:
- シリアルケーブル接続を確認
- ボーレートがデバイスと一致することを確認
- パリティとストップビット設定を確認
- 適切な終端抵抗を確認
- バス衝突を避けるためにポーリング頻度を減らす
一般的なModbus例外コード:
- 01: 不正な機能
- 02: 不正なデータアドレス
- 03: 不正なデータ値
- 04: スレーブデバイスエラー
ベストプラクティス
Section titled “ベストプラクティス”- 読み取り専用から開始: 書き込み前にInput Registerでテスト
- 適切なポーリングを使用: デバイスが応答できる速度より速くポーリングしない
- 連続レジスタをグループ化: 散在した読み取りよりも効率的
- バイト順序を文書化: デバイス固有の設定に関するメモを保持
- Unit IDをテスト: 各デバイスがそのUnit IDに応答することを確認
関連コネクタ
Section titled “関連コネクタ”- OPC UA - 代替産業プロトコル
- Siemens S7 - Siemens PLC直接通信
- Filter - Modbusデータをフィルタリング
- SQL Writer - Modbusデータをデータベースに保存