- 1. 一、概述
- 2. 二、Modbusアドレスタイプ説明
- 3. 三、S7-200 SMART Modbusアドレスマッピングテーブル
- 4. 3.1 数字量出力区(Q区)→ 0xxxxコイル
- 5. 3.2 数字量入力区(I区)→ 1xxxxショップ型入力
- 6. 3.3 模拟量入力区(AIW区)→ 3xxxx入力レジスタ。
- 7. 3.4 V存储区 → 4xxxxレジスタを保持する。
- 8. 四、PLCステーションからの設定步骤
- 9. 4.1 インストールModbusスレーブ指令库
- 10. 4.2 调用MBUS_INIT指令初期化スレーブ
- 11. 4.3 主ポーリングMBUS_SLAVE指令
- 12. 4.4 設定V存储区データ
- 13. 五、PLCマスター設定与読み取りサンプル
- 14. 5.1 调用MBUS_CTRL指令初期化マスター
- 15. 5.2 调用MBUS_MSG指令发起読み書きリクエスト
- 16. 5.3 リードホールドレジスタサンプル
- 17. 六、よくある質問与排障ガイド
- 18. 6.1 通讯応答なし。,スレーブ不回话
- 19. 6.2 读不到データ或データは間違ってる
- 20. 6.3 データ乱码或数值正しくない
- 21. 6.4 偶发通信失敗。
- 22. 6.5 Errorエラー代码説明
- 23. 七、总结
- 24. 八、相关链接
一、概述
S7-200 SMART PLC作为Modbus RTUマスター或スレーブ时,其内部存储区(I、Q、AIW、V)与Modbus標準アドレス之间有固定的マッピング关系。本記事基于シーメンス官方技術ドキュメント,详细説明S7-200 SMART的Modbusアドレスマッピングルール,包含完全的アドレス对照表、設定步骤、通讯サンプル和排障ガイド。
S7-200 SMARTサポート两种Modbus工作モード:
- Modbus RTUmaster(Master):主动发起通讯リクエスト,読み取り或控制スレーブデバイス
- Modbus RTUslave(Slave):被动レスポンスマスター的読み書きリクエスト
二、Modbusアドレスタイプ説明
Modbusプロトコル定义了四种データエリア,每种エリア有固定的アドレス範囲和機能コード:
| Modbusアドレスエリア | function code | 読み書き属性 | data type | 对应S7-200 SMART存储区 |
|---|---|---|---|---|
| 0xxxx(コイル) | 01(リードコイルを読む)/ 05(シングルコイルを書く。)/ 15(マルチコイルを書く) | 读/写 | 位(1 bit) | Q区数字量出力 |
| 1xxxx(ショップ型入力) | 02(read discrete inputs) | 読み取り専用 | 位(1 bit) | I区数字量入力 |
| 3xxxx(入力レジスタ。) | 04(read input registers) | 読み取り専用 | 字(16 bit) | AIW模拟量入力 |
| 4xxxx(レジスタを保持する。) | 03(read holding registers)/ 06(単一レジスタの書き込み)/ 16(マルチレジスタの書き込み) | 读/写 | 字(16 bit) | V存储区(可設定) |
重要説明:Modbusアドレス采用1-based编号,即从1开始计数。而PLC内部アドレス通常是0-based,Start from 0。
三、S7-200 SMART Modbusアドレスマッピングテーブル
3.1 数字量出力区(Q区)→ 0xxxxコイル
数字量出力Qゾーンマッピング到Modbus的0xxxxコイルエリア,サポート读書き込み操作。。
| Modbusaddress | S7-200 SMARTaddress | 説明 |
|---|---|---|
| 00001 | Q0.0 | No.0通道第0位 |
| 00002 | Q0.1 | No.0通道第1位 |
| 00003 | Q0.2 | No.0通道第2位 |
| 00004 | Q0.3 | No.0通道第3位 |
| 00005 | Q0.4 | No.0通道第4位 |
| 00006 | Q0.5 | No.0通道第5位 |
| 00007 | Q0.6 | No.0通道第6位 |
| 00008 | Q0.7 | No.0通道第7位 |
| 00009 | Q1.0 | No.1通道第0位 |
| 00010 | Q1.1 | No.1通道第1位 |
| 00011 | Q1.2 | No.1通道第2位 |
| 00012 | Q1.3 | No.1通道第3位 |
| 00013 | Q1.4 | No.1通道第4位 |
| 00014 | Q1.5 | No.1通道第5位 |
| 00015 | Q1.6 | No.1通道第6位 |
| 00016 | Q1.7 | No.1通道第7位 |
| 00017 | Q2.0 | No.2通道第0位 |
| 00018 | Q2.1 | No.2通道第1位 |
| … | … | 依次类推,每8アドレスはこちら。对应一バイト単位。 |
| 00256 | Q31.7 | 最大アドレス(最多サポート32バイト単位。出力) |
計算公式:Modbusaddress = 通道号 × 8 + 位号 + 1
example:要アクセスQ2.3,Modbusaddress = 2×8 + 3 + 1 = 00020
function code:
- read coil status:function code01
- write single coil:function code05
- write multiple coils:function code15(0x0F)
Precautions:
- Q区アドレスマッピング是固定的,必要なし。额外設定
- 实际可用的Q区数量取决于CPU型号和扩展モジュール
- もし硬件上不存在对应的Q点,读出来的值始终为0
3.2 数字量入力区(I区)→ 1xxxxショップ型入力
数字量入力Iゾーンマッピング到Modbus的1xxxxショップ型入力エリア,読み取り専用。
| Modbusaddress | S7-200 SMARTaddress | 説明 |
|---|---|---|
| 10001 | I0.0 | No.0通道第0位 |
| 10002 | I0.1 | No.0通道第1位 |
| 10003 | I0.2 | No.0通道第2位 |
| 10004 | I0.3 | No.0通道第3位 |
| 10005 | I0.4 | No.0通道第4位 |
| 10006 | I0.5 | No.0通道第5位 |
| 10007 | I0.6 | No.0通道第6位 |
| 10008 | I0.7 | No.0通道第7位 |
| 10009 | I1.0 | No.1通道第0位 |
| 10010 | I1.1 | No.1通道第1位 |
| 10011 | I1.2 | No.1通道第2位 |
| 10012 | I1.3 | No.1通道第3位 |
| 10013 | I1.4 | No.1通道第4位 |
| 10014 | I1.5 | No.1通道第5位 |
| 10015 | I1.6 | No.1通道第6位 |
| 10016 | I1.7 | No.1通道第7位 |
| 10017 | I2.0 | No.2通道第0位 |
| 10018 | I2.1 | No.2通道第1位 |
| … | … | 依次类推,每8アドレスはこちら。对应一バイト単位。 |
| 10256 | I31.7 | 最大アドレス(最多サポート32バイト単位。入力) |
計算公式:Modbusaddress = 10000 + 通道号 × 8 + 位号 + 1
example:要アクセスI3.5,Modbusaddress = 10000 + 3×8 + 5 + 1 = 10030
function code:離散入力の読み取り用機能コード02
Precautions:
- I区アドレスマッピング是固定的,必要なし。额外設定
- ショップ型入力是読み取り専用的,マスター書けない。
- 实际可用的I区数量取决于CPU型号和扩展モジュール
3.3 模拟量入力区(AIW区)→ 3xxxx入力レジスタ。
模拟量入力AIWゾーンマッピング到Modbus的3xxxx入力レジスタ。エリア,読み取り専用。
| Modbusaddress | S7-200 SMARTaddress | 説明 |
|---|---|---|
| 30001 | AIW0 | No.1路模拟量入力 |
| 30002 | AIW2 | No.2路模拟量入力 |
| 30003 | AIW4 | No.3路模拟量入力 |
| 30004 | AIW6 | No.4路模拟量入力 |
| 30005 | AIW8 | No.5路模拟量入力 |
| 30006 | AIW10 | No.6路模拟量入力 |
| 30007 | AIW12 | No.7路模拟量入力 |
| 30008 | AIW14 | No.8路模拟量入力 |
| 30009 | AIW16 | No.9路模拟量入力 |
| 30010 | AIW18 | No.10路模拟量入力 |
| … | … | 依次类推,步长为2 |
| 30056 | AIW110 | No.56路模拟量入力(最大) |
計算公式:Modbusaddress = 30000 + AIW编号 / 2 + 1
example:要読み取りAIW20,Modbusaddress = 30000 + 20/2 + 1 = 30011
function code:読み取り入力レジスタ用機能コード04
Precautions:
- AIW是字寻址,每个AIW占2バイト単位。,所以アドレス步长为1对应AIW步长2
- 入力レジスタ。是読み取り専用的,マスター書けない。
- 模拟量入力值範囲通常是0-32767(单极性)或-32768-32767(双极性)
- 实际可用的AIW数量取决于アナログモジュール的路数
3.4 V存储区 → 4xxxxレジスタを保持する。
V存储区的マッピング是可設定的,経由Modbusスレーブ指令MBUS_INIT的2つ参数定义:
- HoldStart:レジスタを保持する。区的起始Vaddress(如&VB1000)
- MaxHold:レジスタを保持する。区的字数(単位:字,即VW的数量)
マッピングルール:
| Modbusaddress | S7-200 SMARTaddress | 説明 |
|---|---|---|
| 40001 | VW[HoldStart] | The first oneレジスタを保持する。 |
| 40002 | VW[HoldStart + 2] | the secondレジスタを保持する。 |
| 40003 | VW[HoldStart + 4] | The third oneレジスタを保持する。 |
| 40004 | VW[HoldStart + 6] | The fourth oneレジスタを保持する。 |
| … | … | 依次类推,步长为2バイト |
| 400XX | VW[HoldStart + 2 × (XX – 1)] | No.XXレジスタを保持する。 |
完全な例:もしHoldStart = &VB1000,MaxHold = 100
| Modbusaddress | V存储区アドレス | バイト範囲 | 説明 |
|---|---|---|---|
| 40001 | VW1000 | VB1000-VB1001 | The first oneレジスタを保持する。 |
| 40002 | VW1002 | VB1002-VB1003 | the secondレジスタを保持する。 |
| 40003 | VW1004 | VB1004-VB1005 | The third oneレジスタを保持する。 |
| 40004 | VW1006 | VB1006-VB1007 | The fourth oneレジスタを保持する。 |
| 40005 | VW1008 | VB1008-VB1009 | The 5th oneレジスタを保持する。 |
| … | … | … | … |
| 40100 | VW1198 | VB1198-VB1199 | The 100th oneレジスタを保持する。(最后一个) |
function code:
- read holding registers:function code03
- write single register:function code06
- write multiple registers:function code16(0x10)
Precautions:
- V存储ゾーンマッピング是可設定的,経由MBUS_INIT指令的HoldStart和MaxHold参数設定
- HoldStart必须指向VBaddress,如&VB1000
- MaxHold的単位是字(VW),ではないバイト(VB)
- レジスタを保持する。エリア不能与PLC程序中已使用的V存储区冲突
- もしMaxHold设为100,则占用VB1000-VB1199共200バイト単位。
四、PLCステーションからの設定步骤
4.1 インストールModbusスレーブ指令库
- openSTEP 7-Micro/WIN SMARTプログラミング软件
- 在指令树中找到「库」文件夹
- もしないModbus Slave库,需要先导入:右クリック「库」→「导入库」→ ChoiceModbus Slave库文件
- 库文件通常在シーメンス官方网站下载,名称为「Modbus Slave」
4.2 调用MBUS_INIT指令初期化スレーブ
在第1回のスキャンサイクル(SM0.1)调用MBUS_INIT指令,参数説明如下:
| 参数名 | 取值範囲 | 説明 |
|---|---|---|
| Mode | 0 / 1 | 0=無効Modbusslave,恢复为普通自由口;1=EnableModbusslave |
| Baud | 1200-115200 | Baud rate,共通の値:9600、19200、38400、115200 |
| Parity | 0 / 1 / 2 | Verification method:0=検証なし。,1=odd parity,2=even parity |
| Port | 0 / 1 | 通信ポート。:0=板载RS485口,1=信号板SB CM01的RS485口 |
| SlaveAddr | 1-247 | Modbusslave address,同一バス不能重复 |
| HoldStart | &VBxxx | レジスタを保持する。区起始Vアドレス指针,如&VB1000 |
| MaxHold | 0-10000 | レジスタを保持する。区字数(単位:字),如100表示100个VW |
| Done | BOOL | 初期化完了フラグ位 |
| Error | BYTE | エラー代码 |
4.3 主ポーリングMBUS_SLAVE指令
在主程序循环中,每个スキャンサイクル都要调用MBUS_SLAVE指令:
- 该指令负责処理Modbusマスター发来的リクエスト
- もし不调用,スレーブ将无法レスポンスマスター
- parameter:Done(完了フラグ)、Error(エラー代码)
4.4 設定V存储区データ
在HoldStart指定的Vアドレス区存放要読み書き的データ:
- マスター写过来的データ会存到这个エリア
- PLC程序从这个エリア読み取りデータ进行処理
- 注意不要与程序中其他已使用的Vアドレス冲突
五、PLCマスター設定与読み取りサンプル
5.1 调用MBUS_CTRL指令初期化マスター
在第1回のスキャンサイクル(SM0.1)调用MBUS_CTRL指令初期化Modbusmaster:
| 参数名 | 取值範囲 | 説明 |
|---|---|---|
| Mode | 0 / 1 | 0=無効Modbusmaster,1=EnableModbusmaster |
| Baud | 1200-115200 | Baud rate,必须与スレーブ一致 |
| Parity | 0 / 1 / 2 | チェック方式,必须与スレーブ一致 |
| Port | 0 / 1 | 通信ポート。:0=板载RS485,1=信号板 |
| Timeout | 1-32767 ms | 待機中スレーブレスポンス的タイムアウト時間,建议1000ms |
| Done | BOOL | 初期化完了フラグ位 |
| Error | BYTE | エラー代码 |
5.2 调用MBUS_MSG指令发起読み書きリクエスト
MBUS_MSGコマンド用。于发起一次Modbus読み書きリクエスト:
| 参数名 | 取值範囲 | 説明 |
|---|---|---|
| First | BOOL | 首次执行脉冲,检测到アップサイド·エッジ时发起リクエスト |
| Slave | 1-247 | slave address |
| RW | 0 / 1 | 0=读リクエスト,1=写リクエスト |
| Addr | Modbusaddress | 要アクセス的Modbusaddress,如40001表示リードホールドレジスタThe first one |
| Count | 1-120 | 読み書き的レジスタ/コイルの数 |
| DataPtr | &VBxxx | データバッファ指针,如&VB2000 |
| Done | BOOL | 本次リクエスト完了フラグ位 |
| Error | BYTE | エラー代码 |
5.3 リードホールドレジスタサンプル
假设要読み取りアドレス为1的スレーブデバイス的10レジスタを保持する。(40001-40010):
- First:用一个脉冲信号触发
- Slave:1
- RW:0(读)
- Addr:40001
- Count:10
- DataPtr:&VB2000
読み取り成功后,VB2000始まりました。20バイト単位。中存放了101つのレジスタ的データ。
六、よくある質問与排障ガイド
6.1 通讯応答なし。,スレーブ不回话
- チェック配線:RS485的A+和B-是否接反,这是最も一般的な的エラー
- チェック参数一致性:マスター·マスター駅的ボーレート、data bit、stop bit、チェックビット必须完全一致
- チェック駅からの住所:SlaveAddr是否正确,バス上不能有重复アドレス
- 测量バス电压:A线(D+)应高于B线(D-)约200mV以上
- 終端抵抗のチェック:バス两端是否加了120Ω終端抵抗(距离远时需要)
- チェックPortparameter:是否选对了通信ポート。(0或1)
6.2 读不到データ或データは間違ってる
- チェックアドレス格式:Modbusアドレス有1-based和0-based两种写法,注意区分
- チェックHoldStart:確認保持レジスタ開始アドレス設定是否正确
- チェックMaxHold:確認レジスタを保持する。数量是否足够
- チェックアドレス範囲:要读的アドレス是否在MaxHold定义的範囲内
- チェックバイトオーダー:32ビット·データ的高低字顺序是否与マスターマッチング
6.3 データ乱码或数值正しくない
- チェックデータ格式:確認是16ビット整数、32ビット整数まだ浮動小数点数
- チェックバイトオーダー:ビッグエンディアン序(Big-Endian)和リトルエンディアン序(Little-Endian)是否一致
- チェック字序:32ビット·データ的高低字顺序是否正确
- チェック缩放比例:是否需要乘以倍率(如0.1℃単位的要除以10)
- チェック负数処理:负数是用补码表示的,注意記号付き。数和符号なし。数違いはありません
6.4 偶发通信失敗。
- チェックシールド線:RS485线是否用了シールドツイストペア,シールド層是否シングルエンド接地
- チェックバスの長さ:9600bps下最大1200米,115200bps下最大约100米
- チェックスレーブ数量:一条RS485バス最多挂32个スレーブ(不带リピーター)
- チェック電磁干渉による干渉:通讯线是否与动力线平行走线,是否干渉源がある
- チェックタイムアウトの設定:Timeout参数是否设得太小,适当调大试试
6.5 Errorエラー代码説明
| エラー代码 | 説明 | 解決方法 |
|---|---|---|
| 0 | エラーなし。 | – |
| 1 | 奇偶検証エラー | チェックチェックビット設定 |
| 2 | ボーレートサポートなし。 | チェックボーレート参数 |
| 3 | タイムアウトエラー | チェック配線、スレーブ电源、タイムアウトの設定 |
| 4 | 駅からの住所エラー | チェックSlaveAddrparameter |
| 5 | 確認未收到 | スレーブ応答なし。,チェック配線和参数 |
| 10 | ゲートウェイエラー | チェックゲートウェイの構成 |
七、总结
S7-200 SMART的Modbusアドレスマッピングルール清晰明了:
- 0xxxxコイルエリア → 对应Q区数字量出力,読み書き
- 1xxxxショップ型入力エリア → 对应I区数字量入力,読み取り専用
- 3xxxx入力レジスタ。エリア → 对应AIW模拟量入力,読み取り専用
- 4xxxxレジスタを保持する。エリア → 对应V存储区,可設定,読み書き
掌握这个マッピング关系,就能快速実装S7-200 SMART与第三方デバイス的Modbus RTUCommunication。实际应用中,建议先用Modbus Poll等デバッグ软件测试通讯,確認アドレスマッピング正确后再编写PLC程序。
八、相关链接
- Modbus RTU通讯基础チュートリアル
- ModbusDetailed explanation of function codes
- シーメンスS7-200 SMART Modbusマスター設定实例
- RS485バス配線の仕様
Leave a Reply