主流 PLCにおけるModbusプログラミングの実践ガイド(シーメンス、三菱、デルタ、恵川全シリーズ)
産業オートメーションの分野では、Modbus PLCプログラミングこれは、すべてのオートメーションエンジニアが習得する必要があるコアスキルです。Siemens S 7 -1200/1500専用通信コマンド、三菱 FX5U ADPRWコマンド、デルタDVPシリーズMODRWコマンド、HUAWEI H 3 Uフリーポートプログラミングなど、Modbus Communicationの実装にはPLCの異なるブランドが大きな違いがあります。本稿ではmodbus.cnシリーズの重要な部分は、4つの主要なPLCブランドのModbusプログラミング方法を体系的に比較し、完全なラダーダイアグラム例とアドレスマッピング関係を提供し、エンジニアがクロスブランドPLCのModbus 通信開発をすばやく習得できるようにします。
各ブランドのPLC Modbus実装の比較概要
具体的なプログラミングに入る前に、まず重要な違いを理解しましょう。Modbusプロトコルの異なるブランドのPLCサポートは、“専用命令”と“フリーポートプログラミング”の2つのカテゴリにminかれています。PLCメーカーがModbusプロトコルスタックをカプセル化した専用命令方式では、エンジニアはコマンドを呼び出してパラメータを設定するだけでCommunicationを完了できます。フリーポートプログラミング方式では、エンジニアが手動でModbusメッセージフレームを構築し、シリアルポート経由でバイトごとに送受信してプロトコルを実現する必要があります。2つの方法には長所と短所があり、以下の表は視覚的な比較を示します。
| ブランド/シリーズ | 実現の方法 | コアCommand/メカニズム | 開発の難しさ | 柔軟性がある。 |
|---|---|---|---|---|
| シーメンスS 7 -1200/1500 | 専用コマンド | MB_COMM_LOAD / MB_MASTER / MB_SLAVE | 低い。 | 中では |
| 三菱 FX5U | 専用コマンド | ADPRW | 低い。 | 中では |
| 三菱 FX 3 U | 専用コマンド | ADPRWアダプタが必要 | 中では | 中では |
| デルタDVPシリーズ | 専用コマンド | MODRW | 低い。 | 中では |
| デルタASシリーズ | 専用コマンド | MODRW / M_MODRW | 低い。 | ハイ·ハイ |
| H 3 Uの略称。 | フリーポートプログラミング | RSCommand+ CRCチェック | ハイ·ハイ | ハイ·ハイ |
| 600 AMの | 専用コマンド | Modbus機能ブロック | 低い。 | 中では |
上の表からわかるように、シーメンスModbus RTUそして、三菱 Modbusコミュニケーションズすべての専用命令スキームを採用し、開発のしきい値が低い。ModbusプログラミングH 3 Uシリーズはフリーポートプログラミングが必要であり、エンジニアのプロトコル理解能力がより高くなります。デルタPLC ModbusMODRWコマンドはそのシンプルさで有名です。
シーメンスS 7 -1200/1500 Modbusプログラミングの詳細
Siemens TIA Portalプラットフォームは、3つのコアCommand、MB_COMM_LOAD(通信初期化)、MB_MASTER(マスターCommunication)、MB_SLAVE(スレーブCommunication)を含む、S 7 -1200およびS 7 -1500シリーズPLC用の完全なModbus Communicationライブラリを提供します。これらのCommandは、“Communication”Commandグループの“その他”→“”パス下にあります。
MB_COMM_LOAD- Communicationモジュールの初期化
Modbus Communicationを使用する前に、MB_COMM_LOADCommandを呼び出してCommunicationモジュールを設定する必要があります。このCommandは、シリアルポートのボーレート、検証ビット、データビット、ストップビットなどの基本パラメータを設定し、Modbusの動作モード(RTUまたはASCI I)を指定するように機能します。
| パラメータ | データ型 | 説明書は | 典型的な値 |
|---|---|---|---|
| REQ | Bool | 立ち上がりエッジのトリガー設定 | M0.0 |
| PORT | UInt | Communicationモジュールのハードウェア識別子 | 269(CM1241 RS485) |
| BAUD | UInt | ボーレート | 9600 / 19200 / 38400 / 115200 |
| PARITY | UInt | 検証ビット:0=なし1=奇数2=偶数 | 2(ダブルチェック) |
| FLOW_CTRL | UInt | フロー制御0=なし1=RTS/CTS | |
| 0RTS_ON_DLY | UInt | RTSオン遅延ms | |
| 0RTS_OFF_DLY | UInt | RTSオフ遅延ms | |
| 0RESP_TO | UInt | レスポンス·タイムアウトms | 1000 |
| MB_DB | Variant | MB_MASTER/SLAVEのバックグラウンド·データ·ブロック | 対応するコマンドのDB番号 |
| DONE | Bool | 構成完了フラグ | — |
| ERROR | Bool | エラーフラグ | — |
| STATUS | Word | ステータスコード16#0000=エラーなし | — |
MB_MASTER:Modbusマスタ通信命令
MB_MASTERコマンドは、S 7 -1200/1500をModbus RTUマスターとしてスレーブデバイスに読み書き要求を送信するように指示する。このCommandは、コード01(リードコイル)、02(リードディスクリート入力)、03(リードホールドレジスタ)、04(リード入力レジスタ)、05(书き込みシングルコイル)、06(书き込みシングルレジスタ)、15(书き込みマルチコイル)、16(书き込みマルチレジスタ)をサポートしている。
//MB_MASTERラダーパラメータの説明SCL 表示
“MB_MASTER_DB”
REQ REQ = #Start_Read //上昇エッジトリガー
MB_ADDR = 1 //送信ステーションアドレス(1- 24 7)
MODEの = 0 0= read 1= write
DATA_ADDR = 40001 //ステーションデータ開始アドレス
DATA_LEN = 10、 データの長さ(単語数)
DATA_PTR = P #DB1.DBX0.0 WORD10//ローカルデータストアポインタ
);
//通常のモデル:
// MODE=0 DATA_ADDR =40001 →機能コード03リードホールドレジスタ
// MODE=1 DATA_ADDR =40001 →関数コード06/16書き込みホールドレジスタMB_SLAVE-Modbusスレーブ通信命令
MB_SLAVECommandにより、S 7 -1200/1500はModbus RTUスレーブとして動作し、マスターの読み書き要求に応答します。このコマンドにより、マスターはPLC 内部の特定のデータ領域(コイル、ディスクリート入力、入力レジスタ、ホールドレジスタ)にアクセスできます。
//MB_SLAVEラダーパラメータの説明SCL 表示
“MB_SLAVE_DB”
MB_ADDR = 1 //駅からの住所
MB_HOLD_REG = P #DB2.DBX0.0 WORD100//レジスタマップ領域を保持
);完全なラダーの例温度センサの読み取り
以下は、Modbus温度湿度センサーを読み取るSiemens S 7 -1200の完全な手順例です。センサスレーブアドレスは1で、temperatureと湿度はそれぞれ保持レジスタ40001と40002、ボーレート96 00、偶数チェックに格納されます。
ネットワーク1通信モジュールの初期化初回スキャン呼び出し
�������������
M 0.0。 MB_COMM_ │ │ │
│--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- DONE 〜 M 0.1 〜
│ │ │ │ PORT 26 9 エラー-M 0.2
│ │ │ AUD® 96 00 STATUS®--MW 2
│ │ │ │ PARITY 2 │ │ │
│ │ │ FLW_CTRL 0 │ │ │
│ │ │ │ RESP_TO 1000 │ │ │
│ │ │ │ MB_DB MB_MASTER_DB │
└──────────────────────────────┘
ネットワーク2:センサデータの定期的な読み取り(500 msごと)
�������������
M 0.5。 MB_MASTERさん │ │ │
│--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Done's-M 1.1
│ │ │ │ MB_ADDR 1 エラー-M 1.2
│ │ │ │ MODE 0 STATUS�-MW 4
│ │ │ │ DATA_ADDR 40001 │ │ │
│ │ │ │ DATA_LEN 2 │ │ │
│ │ │ DATA_PTR P #DB3.DBX0.0WORD2
└──────────────────────────────┘
//結果を読み取る:
//DB 3.DBW 0 =温度値(実際のtemperatureは10で割る必要があります)
//DB 3.DBW 2 =湿度値(実際の湿度は10で割る必要があります)SiemensプラットフォームのModbus構成の詳細については、こちらをご覧ください。modbus.cnシーメンスCommunicationモジュールのハードウェア選択に関する関連記事。こちらもご覧いただけます。Siemens Modbus RTU完全構成チュートリアル。
三菱 FX5U Modbusプログラミング
三菱 ModbusコミュニケーションズFX5Uシリーズでは、ADPRW専用コマンドによって実現され、FX 3 U時代に追加のアダプタが必要だったソリューションから質的な飛躍があります。FX 5Uに内蔵されたRS-485ポートはModbus RTUプロトコルを直接サポートし、追加のハードウェア投資は不要です。ADPRWCommandの強力な点は、Modbus関数コードの指定とデータの送受信を1つのCommandで完了できることである。
ADPRWCommandの詳細
| オペランドの数 | 説明書は | 範囲の設定 | 例:例 |
|---|---|---|---|
| S1 | 駅からの住所 | H1-HF7(1-247) | H1 |
| S2 | 関数コードの特徴 | H1-H6, HF, H10 | H3(読み取り保持レジスタ) |
| S3 | Modbusアドレス | H0-HFFFF | H0(40001に対応) |
| S4 | データポイント数 | H 1-H 7 D0(ワード) | K2 |
| D1 | データ送受信開始デバイス | ビット/ワードデバイス | D100 |
ADPRWCommandが実行されると、PLCは自動的にModbusメッセージフレームを構築し、CRCチェックコードを計算し、メッセージを送信し、スレーブの応答を待ちます。書き込み動作機能コードH6/H10の場合は、D1で指定されたデバイス領域に送信待ちのデータが格納され、リード動作機能コードH1-H4の場合は、D1で指定されたデバイス領域に受信したデータが格納されます。
ADPRWの主な考慮事項
- アドレスオフセット規則:Modbusプロトコルのアドレスは0から番号付けされますが、ドキュメント内のアドレス(40001など)は1から始まります。ADPRWのS3オペランドでは、ホールドレジスタはH0から40001に対応し、コイルはH0から0001に対応する。
- 機能コードH3(リードホールドレジスタ)は、一度に最大125ワード(H7D)を読み取る。
- 機能コードH 10(書き込みマルチレジスタ)一度に最大123ワード(H 7 B)を書き込む。
- ADPRWCommandは実行完了型命令であり、1回のCommunicationを完了するために複数のスキャンサイクルを連続して必要とする。
- 通信状態判断は、特殊リレー SMと特殊レジスタSDで必ず行われる。
ラダー図の例:FX 5Uで周波数コンバータのパラメータを読み取る
//ネットワーク1:Communicationパラメータ設定(PLCパラメータ設定、ラダーダイアグラム不要)
//チャネル1 CH1-485内蔵
プロトコル:Modbus RTU
ボーレート:19200 bps
//データのビット:8
//ストップビット:1
//チェック:偶数チェック
//ネットワーク2:周波数コンバータの動作周波数と出力電流を読み取る
�������������
│ M 0さん [ADPRWさん 【│】│
│ ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― S1 H1 アドレス1からのアドレス。
│ │ │ │ S 2 → H 3 //関数コード:読み取り保持レジスタ
│ │ │ │S3 H100 │ //開始アドレス:40101周波数
│ │ │ │ S 4 × K 2 │ //2つの単語を読む
│ │ │ │D1 D100 │ //データはD100-D101にされる
└ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ┘
//ネットワーク3:データ処理
// D100 =動作周波数(単位は0.01Hz、100で割る必要がある)
//D 101 =出力電流(単位0.1 A、10で割る必要がある)
//ネットワーク4:動作周波数設定を書き込む
�������������
│ M 1の [ADPRWさん 【│】│
│ ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― S1 H1 アドレス1からのアドレス。
│ │ │ │ S 2 − H 6 //関数コード:単一レジスタの書き込み
│ │ │ │S3 H200 │ //宛先アドレス:40201
│ │ │ │ S 4 K 0 │ //書き込み時に無視
│ │ │ │D1 D200 │ //書き込まれたデータ
└ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ┘三菱 FX5UのModbus 通信速度は最大115,200 bpsで、マルチステーションポーリングシナリオで優れています。三菱Modbus Communicationsの詳細については、こちらをご覧ください。modbus.cn上の上の三菱 Modbus Communicationsの記事一覧。
デルタDVP/ASシリーズModbusプログラミングの詳細
デルタPLC ModbusCommunicationはDVPとASシリーズで非常にエレガントに実装されています。モードラーのCommandデルタPLCのModbus CommunicationのコアCommandであり、その設計コンセプトは“すべての問題を1つのCommandで解決する”ことです。読み書き、コイル、レジスタなど、このCommandで完了します。ASシリーズは、より多くの関数コードをサポートするM_MODRWCommandの拡張版を提供します。
MODRWCommandパラメータ説明{{MODRWこめんとぱらめーたせつめい}}
| パラメータ | 意味の意味 | DVPシリーズ | ASシリーズ |
|---|---|---|---|
| S | オンラインアプライアンスのアドレス | K1-K254 | K1-K254 |
| S1 | 関数コードの特徴 | K1/K2/K3/K4/K5/K6/K15/K16 | Ibid+拡張機能 |
| S2 | ターゲットアプライアンスのアドレス | 0-9999 | 0-65535 |
| S3 | データ長さ | 1-127 | 1-200 |
| D | ネイティブデータ開始レジスタ | Dレジスター | Dレジスター |
ラダーの例:デルタDVPがスマートメーターを読み取る
//デルタDVP-ES2はCOM2(RS-48 5)経由でスマートメーターデータを読み取る
//メータースレーブアドレス:1、ボーレート96 00、検証なし
//ネットワーク:メータデータの読み取りをトリガー
�������������
M 100 2の意味 [SET M 0]//起動時の初期化
└─ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ┘
�������������
M 1013の概要 [モードラー [1 秒クロックパルス]
│ S K1 アドレス1からのアドレス。
│ │ │ │ S 1 − K 3 //関数コード:読み取り保持レジスタ
│ │ │ │ S 2 K 0 アドレス:040001
│ │ │ │ S 3 − K 6 6文字を読む。
│ │ │ │D�D 0 //D 0-D 5への保存
└─ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ┘
//読み取り結果マップ(スマートメーターのブランド):
// D0 =電圧(単位0.1V → D0/10 =実際の電圧)
// D1 =電流単位0.01A → D1/100 =実際の電流
//D 2 =アクティブ電力(単位は1W)
//D 3 =無効電力(単位:1 Var)
//D 4 =力率(単位0.001 → D 4/1000)
// D5 =周波数(単位は0.01Hz → D5/100)デルタASシリーズM_MODRWの機能強化
デルタASシリーズPLC(AS228T-Aなど)は、MODRWに基づいてM_MODRWCommandを提供しており、主な機能強化には、32ビットデータ読み書きのサポート、文字列伝送のサポート、ビット書き込みのサポート、Communicationタイムアウトの設定、最大8つの通信命令の同時アクティブ化が含まれます。これらの拡張により、ASシリーズは複雑なModbus Communicationシナリオで明確な利点をもたらします。
//デルタASシリーズM_MODRWの例:32ビットの累積電力を読み取る
��������������
│ M 0さん [M_MODRW 【│】│
│ S K1 │ //駅からのアドレス
│ │ │ │ S 1 − K 3 //関数コード:レジスタを読み取る
│ │ │ S2 K 100 │ //開始アドレス
│ │ │ │ S 3 − K 2 //2ワード(32ビットデータ)を読み込む
│ │ │ 略称はD 100。 D 100(ローワード)、D 101(ハイワード)に格納
│ │ │ │Mode D200 │ //モード設定
└─ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ┘デルタPLCのModbusプログラミング体験は国内ブランドの中でもトップクラスであり、MODRWCommandのシンプルさは開発のしきい値を大幅に引き下げました。デルタPLC Modbus Communicationの技術的詳細については、こちらをご覧くださいmodbus.cnアクセスする。デルタPLC Modbus 通信完全ガイド。
H 3 U Modbusフリーポートプログラミングの詳細
ModbusプログラミングH3Uシリーズではユニークな点がある。専用のModbusコマンドを提供する他のブランドとは異なり、H 3 UはフリーポートCommunicationを使用しており、エンジニアはModbusメッセージフレームを手動で構築し、RSコマンドで送信する必要がある。このアプローチは、開発の難しさを増しますが、エンジニアがCommunicationプロセスを完全に制御できるため、非標準プロトコルや特殊な要件のシナリオで非常に有用です。
H 3 UフリーポートCommunicationの基本原理
H 3 UのシリアルポートCommunicationは、RSコマンド(データ送信コマンド)とRCコマンド(データ受信コマンド)に基づいています。Modbus RTU Communicationを実装するには、スレーブアドレス、ファンクションコード、データフィールド、CRCチェックコードを含むModbusプロトコル仕様に従ってメッセージフレームを手動で構築する必要があります。
CRC-16検証アルゴリズムの実装
Modbus RTUのCRCチェックコードは、フリーポートプログラミングの最も重要な部分です。以下は、H 3 U 上でCRC-16チェックを実装するラダー論理の説明です(チェック多項式:0 x A 0 01)。
CRC-16計算フロー(Modbus RTU標準アルゴリズム)
//入力:検証対象データはD 100-D 105(6バイト、CRCを除く)に格納され、バイト数はD0に格納される。
//出力:CRC16結果のハイバイトはD 200に、ローバイトはD 201に保存されます。
//
//擬似コード:
// 1。16ビットCRCレジスタを0 x FFFFに設定
// 2.。最初の8ビットデータをCRCレジスタとローバイト排他的にし、結果をCRCレジスタに格納します。
// 3.。CRCレジスタは右に1ビットシフトし、最上位ビットは0になります。
// 4。シフトビットが1の場合、CRCレジスタは0 x A 001と異なります。
// 5。手順3-4を8回繰り返します。
// 6。次のバイトを処理し、手順2 ~ 5を繰り返す
【7】。すべてのバイト処理が完了すると、CRCレジスタの値はCRC16チェックコードになります。
//H3Uラダーでの実装ループCommandを使用
// 注意:H3UはCRCチェックCommand(CRC)を内蔵しており、チェックコードを送信データの末尾に追加することができる
// CRC D100 D106K6
//機能:D 100から始まる6バイトのデータに対してCRCを計算し、結果をD 106-D 107に格納します。完全なフリーポートModbus RTUマスターの例
//MODBUS RTUマスターを実現するためのH 3 UフリーポートCommunication
//宛先:スレーブアドレス1の保持レジスタ40001(2ワード)を読み出す
//ネットワーク1:Modbusリードホールドレジスタメッセージを構築する
//メッセージフォーマット:[スレーブアドレス]関数コード]開始アドレス高[開始アドレス低]ワード高[ワード低]CRC低[CRC高]
//
//メッセージデータの準備:
D 100 = H 0103 //スレーブアドレス0 1+機能コード0 3
D 101 = H 0000 //開始アドレス0000(40001に対応)
D 102 = H 0002 2つの単語を読む
// CRCチェックをD 103に入れる
//ネットワーク2:シリアルパラメータの設定(特殊レジスタ経由)
// D8120 = H0C81 // 8ビットデータ+偶数チェック+1ストップビット+9600 bps
//M 816 1 =オン 8ビットデータ処理モード
//ネットワーク3:データの送信
�������������
│ M 0さん [RSは 【│】│
│ ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― D100 │ //開始レジスタの送信
│ │ │ │ K 8 8バイト(CRCを含む)を送信
│ │ │ レジスタンスD 200 │ //受信開始レジスタ
│ │ │ │ K 9さん //9バイト受信(CRCを含む)
└ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ┘
//ネットワーク4:受信データ処理
//D 200 =スレーブアドレス(H01)
//D 201 =機能コード(H03)
//D 202 =バイト数(04にする必要があります)
//D 203 =最初のワードのハイバイト
//D 204 =最初のワードローバイト
//D 205 = 2番目のワードの上位バイト
//D 206 = 2番目のワードローバイト
//D 207 = CRCローバイト
//D 208 = CRCハイバイトEdituan AM600シリーズ(Codesysプラットフォーム)は、シーメンスのソリューションに近い専用機能ブロックを介して、より近代的なModbus Communicationモードを提供します。当社のPLCシリーズ全体のModbusプログラミングの比較については、こちらをご覧ください。modbus.cn上の上のModbusプログラミングの全シリーズガイド。
ブランド別アドレスマッピング関係対照表
Modbus Communicationで最もエラーが発生しやすいリンクの1つは、アドレスマッピングです。PLCのブランドによってModbusアドレスの表現方法が異なり、プログラミング時のアドレスオフセットのルールも異なります。以下の表は、4つのPLCブランドのModbusアドレスマッピング関係を整理し、2,000以上のアドレスマッピングルールのコアロジックをカバーしています。
| Modbusアドレス領域 | プロトコルアドレス | シーメンス | 三菱 FX5U | デルタDVP | H 3 Uの略称。 |
|---|---|---|---|---|---|
| コイル00001- 0 9999 | 0-9998 | Q0.0-Qx.y | M0-Mx | M0-Mx | M0-Mx |
| ディスクリート入力10001- 1999 | 0-9998 | I0.0-Ix.y | X0-Xx | X0-Xx | X0-Xx |
| 入力レジスタ300 01 ~ 39999 | 0-9998 | IW0-IWx | SD 特殊レジスタ | — | — |
| レジスタ40001-49999 | 0-9998 | DBx.DBW0+ | D0-D7999 | D0-D9999 | D0-D7999 |
| 保持レジスタ400001- 4655 3 5 | 0-65534 | 拡張アドレスが必要 | D0-D7999 / R0+ | D 0-D 9999/拡張機能 | D 0-D 7999 /拡張 |
アドレスオフセットルールの詳細
アドレスオフセットを理解することはModbus Communicationエラーを避けるための基礎です。Modbusプロトコルで定義されているアドレスは0から始まるが、アプリケーション層の番号(40001など)は1から始まる。異なるブランドのPLCがCommandで使用するアドレスは通常プロトコルアドレス(0ベース)であり、一般的な“difference 1”エラーにつながります。
| シーンはこちら | ドキュメントのアドレス | プロトコルアドレス(Commandで使用) | オフセットのvalue |
|---|---|---|---|
| リードホールドレジスタ40001 | 40001 | 0x0000(H0/K0) | -1 |
| リードホールドレジスタ40100 | 40100 | 0x0063(H63/K99) | -1 |
| リードコイル00001 | 00001 | 0x0000(H0/K0) | -1 |
| 書き込みシングルレジスタ40010 | 40010 | 0x0009(H9/K9) | -1 |
| 読み取り入力レジスタ300 50 | 30050 | 0x0031(H31/K49) | -1 |
よくある間違いと落とし穴
実際のエンジニアリングでは、Modbus Communicationのデバッグはしばしば多くの開発時間を費やします。ここでは、読者が迂回するのを助けるために、何百もの実際のプロジェクトで最も一般的な間違いや落とし穴を整理します。
1.アドレスオフセットエラー
これは最も一般的な間違いの1つです。機器マニュアルに記載されているレジスタアドレスは“40001”ですが、エンジニアがPLCCommandで開始アドレスを“1”または“40001”と入力したのは間違いです。正しい方法は、“0”プロトコルアドレス=アプリケーションアドレス-1を入力することです。Siemens MB_MASTERのDATA_ADDRパラメータは40001で正しい(Siemensはパッケージを行いました)が、三菱 ADPRWのS 3パラメータはH0で、デルタMODRWのS 2パラメータはK0で入力する必要があります。
2.エンディアンEndiannessの問題
Modbusが32ビットのデータ(浮動小数点数、ダブルワード整数など)を転送する場合、エンディアンの問題によりデータParseエラーが発生します。一般的なエンディアンの組み合わせには、Big-Endian + Big-Endian(標準Modbus)、Big-Endian + Little-Endian、Little-Endian + Big-Endian、Little-Endian + Big-Endian、Little-Endian + Little-Endianの4種類があります。Siemens PLCはBig-Endian、三菱とデルタはLittle-Endianを採用しており、クロスブランドCommunicationではエンディアン変換に注意が必要である。
3.タイムアウトの不適切な設定
Modbus RTUの標準フレーム間間隔は3.5文字(9600 bpsで約3.6 ms)である。プライマリ局のタイムアウト設定が短すぎると、通常のフレーム間隔のためにタイムアウトを誤って判断します。長すぎると、デバイスが切断されたときにスキャン時間が無駄になります。レスポンスタイムアウトは、“(最大応答文字数×文字数)+デバイス処理時間+マージン”に設定することをお勧めします。例えば、9600 bpsで10レジスタを読み込む場合、合理的なタイムアウトは200-500msに設定します。
4.主要な紛争の多く
Modbus RTUはシングルマスタープロトコルであり、同じバス上に複数のマスターがexistenceすることはできません。HMIタッチスクリーンとPLCがマスターステーションとして同じデバイスに同時にアクセスすると、バス競合が発生します。ソリューションは、PLCの透過的なトランスポート機能を介してHMIがデバイスに間接的にアクセスするか、Modbus TCPゲートウェイを使用してプロトコル変換を行うことです。
5.Communicationパラメータの不一致
ボーレート、データビット、ストップビット、および検証ビットはスレーブと完全に一致する必要があります。注:一部のデバイスは“96 00,8,N,1”をサポートしていると主張していますが、実際のデータビットは9ビット(8データビット+ 1チェックビット)であり、バイト長の不一致のためにCommunicationに失敗します。Modbusデバッグツールを使用して、デバイスの実際のCommunicationパラメータを確認することをお勧めします。
SCADAシステムとの統合
Modbusプロトコルを介したPLCとSCADA(監視およびデータ収集)システムの統合は、産業オートメーションで最も一般的なアーキテクチャの1つです。以下に、統合の一般的な方法とベストプラクティスを示します。
典型的な統合アーキテクチャ
- ダイレクトモードSCADAはModbus RTU/TCPドライバでPLCに直接接続します。小型システム(1-5 PLC)に適しており、利点はシンプルなアーキテクチャと低遅延です。欠点は、スケーラビリティが悪く、SCADAの重い負担です。
- OPCサーバトランジットモードPLC → OPCサーバ(Kepware、Matrikonなど)→ SCADA中規模および大規模システムに適しており、利点はプロトコルデカップリングとマルチクライアントサポートです。欠点は中間層とメンテナンスコストの増加です。
- データゲートウェイモードPLC → Modbus Data Gateway → SCADA/MES/ERPエンタープライズレベルのシステムに適用し、利点は統一データ輸出、データキャッシュと転送をサポートすることです。
SCADA構成のポイント
SCADAでModbusドライバを設定する場合、最も重要なのはレジスタアドレスマップを正しく設定することです。一般的なSCADAプラットフォーム(Win CC、Kingview、Power Control、Intouchなど)では、Modbusアドレスの表現方法が異なります。例えば、Win CCは保持レジスタに“4 x 00 01”を使用し、Kingviewは“4-1”形式を使用します。各プラットフォームのModbusドライバのドキュメントを参照し、アドレス形式を確認してから設定する必要がある。
推奨されるデバッグ技術とツール
効率的なデバッグはModbus 通信開発の成功の鍵です。以下は著者が推奨するツールと方法論です。
必須のデバッグツール
| ツールのName | タイプの種類 | 適用可能なシーン | 推薦の理由 |
|---|---|---|---|
| Modbus Poll | デスクトップソフトウェア | メインステーションシミュレーション | インターフェースが直感的で、すべての機能コードをサポートし、定時ポーリングが可能 |
| Modbus Slave | デスクトップソフトウェア | ステーションからのシミュレーション | Pollと組み合わせてスレーブ動作をシミュレートできます。 |
| QModMaster | オープンソースソフトウェア | メインステーションの調整 | フリーオープンソース、RTU/TCPサポート、クロスプラットフォーム |
| ModScan | デスクトップソフトウェア | メインスキャン | スレーブレジスタを一括スキャンし、アドレスマッピングテーブルを迅速に確立 |
| シリアル監視ツール | ハードウェア/ソフトウェア | バス·リスニング | USBから485へのリスニングモード、元のメッセージの記録 |
| Wireshark | ネットワークパック。 | Modbus TCPParse | Modbus TCPプロトコルParseをサポートし、強力な機能を持つ |
デバッグ方法論
- 階層的検証法まず、メーターで物理層(ケーブル、終端抵抗、バイアス抵抗)を確認し、Modbus Pollでリンク層(ボーレート、検証)を確認し、PLCプログラムでアプリケーション層(アドレス、データフォーマット)を確認します。
- 最小化テスト。最も単純な関数コード(0 3読み取りシングルレジスタ)でCommunicationテストを行い、基本リンクが正常であることを確認してから複雑な機能をテストします。
- メッセージ記録法:シリアル監視ツールを使用して完全なメッセージを記録し、メッセージフレーム位置の問題を手動で分析します。Modbusのメッセージ構造はシンプルで、しばしば問題を一目で特定できます。
- 時間超過の法則:長いタイムアウト(3000msなど)からデバッグを開始し、Communicationが正常であることを確認した後、タイムアウトを徐々に短くし、最適な値を見つける。
Modbusプログラミングの4つのブランド比較
| 次元の比較 | シーメンスS 7 -1200/1500 | 三菱 FX5U | デルタASシリーズ | H 3 Uの略称。 |
|---|---|---|---|---|
| 実現の方法 | 専用命令(ライブラリ) | 専用コマンド | 専用コマンド | フリーポートプログラミング |
| コアCommandは | MB_COMM_LOAD/MB_MASTER/MB_SLAVE | ADPRW | MODRW/M_MODRW | RS+CRC |
| プログラミングの難しさ | ★★☆☆☆ | ★★☆☆☆ | ★★☆☆☆ | ★★★★☆ |
| 機能コードのサポート | 01/02/03/04/05/06/15/16 | 01/02/03/04/05/06/15/16 | 01/02/03/04/05/06/15/16 | すべて手動 |
| 最大数の駅。 | 247 | 247 | 254 | 247スキャンサイクルによる制限 |
| 1回の最大データvalue | 125 字読み/123 字书き | 125 字読み/123 字书き | 127 字読み/123 字书き | 無制限手動 |
| アドレス·フォールトトレランス | オフセットの自動処理 | 手動オフセットが必要-1 | 手動オフセットが必要-1 | 手動オフセットが必要-1 |
| 複数命令並列性 | サポートされていませんキューに入れます | サポートされていませんキューに入れます | サポート最大8台 | 手動による管理 |
| エラー診断 | STATUS詳細ステータスコード | SM/SDレジスタ | エラー·フラグ·ビット | 手動で判断する |
| TCPサポート | MB_CLIENT/MB_SERVER | Ethernetポートを内蔵 | Ethernetポートを内蔵 | 拡張モジュールが必要 |
| 浮動小数点数のサポート | エンディアン変換 | エンディアン変換 | エンディアン変換 | エンディアン変換 |
| 開発環境の開発 | TIA Portal | GX Works3 | ISPSoft/DIAStudio | AutoShop |
| 学習リソース | 豊かな豊かさ | より豊かに | ミディアム·ミディアム | 少ない。 |
| 標準的な通信速度 | 19200-115200 | 9600-115200 | 9600-115200 | 9600-19200 |
| シーンに適して | 大規模システム/標準化プロジェクト | 中小規模の設備/迅速な開発 | 国内代替/価格優先 | カスタム要件/詳細制御 |
FAQよくある質問
Q 1:Siemens S 7 -1200のModbus Communicationには追加のハードウェアモジュールが必要ですか?
そうですね。S 7 -1200 CPU 本体は通常、イーサネットポートと通常のRS-232/RS-485(一部モデル)のみで、Modbus RTU Communicationが必要な場合はCM1241 RS 485通信モジュール(ハードウェア識別番号269)またはCB1241 信号ボードの使用を推奨します。Modbus TCP Communicationでは、CPU内蔵のイーサネットポートが追加ハードウェアなしでサポートされます。S 7 -1500も同様で、CM PtP Communicationモジュールを使用している。
Q2:三菱 FX 5UのADPRWCommandは、一度に何台のデバイスに読み書きできますか?
ADPRWCommandは、一度に1つのスレーブデバイスとのみCommunicationできます。複数のスレーブをポーリングする必要がある場合は、プログラム内で複数のADPRWCommandセットを使用し、一度に1つのCommandのみがアクティブになるようにする必要があります。前のCommandの完了フラグにより次のCommandをトリガすることができ、シリアルポーリングが実現される。典型的なマルチステーションポーリング=サイト数 ×(要求+応答+フレーム间)。
Q 3:デルタのMODRWコマンド通信失敗のトラブルシューティング方法は?
まず、Communicationパラメータ(ボーレート、チェック·ビット、データビット、ストップ·ビット)が一致しているかどうかを確認します。次に、RS-485のA/Bラインが最も一般的なハードウェアの問題である反転しているかどうかを確認します。デルタPLCに内蔵されている特殊レジスタを使用して、Communicationエラーコードを確認できます。最後に、MODRWコマンドの宛先アドレスがスレーブの実際のアドレスと一致することを確認します。デルタPLCのCOM2ポートはデフォルトでModbusスレーブモードであり、マスターとして使用するには、プログラムでM 1143をONに設定する必要があります。
Q 4:H 3 UフリーポートプログラミングによるModbusの信頼性は?
H 3 UのフリーポートModbus Communicationは、19,200 bps以下のボーレートで非常に信頼性が高いです。Communicationの安定性を確保するためには、タイムアウト再試行(推奨3回)、CRCチェック結果の検証、受信データ長の検証、レスポンスアドレスチェック(応答したスレーブアドレスが要求と一致していることを確認する)、通信失敗後のエラーカウントとアラームなどのメカニズムをプログラムに組み込むことをお勧めします。大規模なバッチプロジェクトの場合は、Modbus機能ブロックがより成熟した安定したEaguan AM600シリーズ(Codesysプラットフォーム)を推奨します。
Q 5:Modbus Communicationにおける32ビット浮動小数点数のエンディアン問題を解決するには?
32ビット浮動小数点数はModbusで2つの連続した16ビットレジスタを使用して転送され、エンディアンはデバイスによって決定される。シーメンスとシュナイダーは通常、ビッグエンディアン(レジスタNに上位16ビット、N+1に下位16ビット)を使用し、三菱、デルタ、デルタは通常、リトルエンディアン(レジスタNに下位16ビット、N+1に上位16ビット)を使用します。解決策は受信側でバイト交換を行うことです。SiemensはSWAPCommandを使用でき、三菱はSWAPCommandまたは直接ワード交換を使用でき、DeltaはXCHCommandを使用でき、Hugongは循環シフトを使用できます。
おわりにまとめ
Modbus PLCプログラミングこれは、産業オートメーションエンジニアのコアコンピタンスの一つです。fromからシーメンスModbus RTUMB_MASTERコマンドを実行三菱 ModbusコミュニケーションズADPRWの指示からデルタPLC Modbusモードラーの指示Modbusプログラミング異なるブランドは独自のデザイン哲学とベストプラクティスを持っています。クロスブランドPLCのModbus 通信機能を習得することで、さまざまなプロジェクト要件に対応できるだけでなく、産業用通信プロトコルの性質を深く理解することができます。
本稿ではmodbus.cnModbus技術シリーズの重要なchapterは、プラットフォーム上の他の記事とともに、完全な技術システムを形成します。以下の記事と一緒に深く学ぶことをお勧めします。
- Modbusプロトコルの基礎とメッセージ構造の詳細
- Modbus TCPとRTU Communicationの比較
- Modbusアドレスマッピング完全ガイド
- Modbusデバッグツールとトラブルシューティング
- Modbus Communicationセキュリティのベストプラクティス
産業制御の道、障害と長い。この記事がModbusプログラミングの信頼できるコンパニオンになれば幸いです。
Leave a Reply