MODBUS RTUからMySQLデータベースへのログ記録方法
MODBUS RTUシリアルデバイスをポーリングし、レジスタデータをMySQLデータベースに直接エクスポートする完全ガイド。
1. プロトコル設定: MODBUS RTU
通信タイプ: アクティブポーリング(RS485/COM上のマスター/スレーブ)
MODBUSはデータをバイナリで送信するため、パーサーは特定の保持レジスタ(例:40001)または入力レジスタを抽出する必要があります。センサーが32ビット浮動小数点数を使用している場合、隣接する2つの16ビットレジスタを読み取り、正しいバイトスワップ(エンディアン)を適用して浮動小数点数を再構築するようにパーサーを設定します。
シリアル接続にこの基本設定を適用してください:
{
"port": "COM3",
"baud_rate": 9600,
"data_bits": 8,
"stop_bits": 1,
"parity": "none",
"protocol": "modbus_rtu_serial",
"poll_interval_ms": 1000
}
データをクエリして解析するためのMODBUS RTUプラグインの選択

MODBUS RTUクエリキュー:異なるレジスタを読み取るためのカスタム設定
MODBUS RTU を MySQL に接続する準備はできましたか?
2. データベース設定: MySQL
Data Loggerを実行するマシンにMySQL Connector/ODBCがインストールされている必要があります。MySQLサーバーインスタンスを指すシステムDSNを作成してください。
次のSQLスクリプトを使用してターゲットテーブルを作成してください。 テーブルロックなしで高頻度の同時挿入を処理するには、InnoDBエンジンの使用をお勧めします。
CREATE TABLE sensor_data ( id INT AUTO_INCREMENT PRIMARY KEY, log_timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, device_id VARCHAR(50), register_value FLOAT ) ENGINE=InnoDB;

データをエクスポートするMySQLプラグイン。

MySQLデータベース接続設定。

カスタムパラメータ付きのINSERT SQL文のキュー。
3. プロトコル固有のトラブルシューティング
- タイムアウトまたはCRCエラー: TCPとは異なり、シリアルMODBUS RTUは厳密なタイミングに依存しています、RS485のA/B配線が逆接続されていないこと、ソフトウェアのボーレートとデバイスIDがスレーブデバイスと完全に一致していることを確認してください。
- デバイスが「Illegal address」エラーコードを返す: MODBUSリクエストで関数#4の代わりに関数#3を使用してみてください。それ以外の場合、正しいレジスタアドレスを使用していることを確認してください。絶対オフセット(40001のような論理アドレスではなく)を指定してみてください。
- 複数の値を1行のデータ行としてエクスポートしたいのに、ロガーが1値ずつ書き込む: MODBUSプラグイン設定で「すべてのデータを一度にエクスポート」オプションを有効にする必要があります。
4. データベース固有のトラブルシューティング
- MySQLサーバーが切断されました: シリアルデバイスが一晩中アイドル状態の場合、MySQLは接続を切断します。Data LoggerのODBCエクスポートモジュールで「接続を維持」設定を有効にしてください。
- デバイスのデータ行を挿入または更新するにはどうすればよいですか?: 「SQL Database Pro」プラグインでは任意のSQLクエリを使用できます。MySQLでは、次のSQLを簡単に実行できます:「INSERT INTO ....... ON DUPLICATE KEY .... UPDATE ....」。
- 各デバイスのデータを異なるテーブルに書き込みたいのですが、どうすればよいですか?: 「SQL Database Pro」プラグインでは、SQLにプレースホルダーを使用できます。例えば「INSERT INTO SerialData%DEVICE_ID% (....)」のようにします。SQLを実行する前に、ロガーは%DEVICE_ID%を解析データの対応する値に置き換え、実際の宛先テーブルは異なります(SerialData1、SerialData2など)。