文章目錄
- Modbus Slave 使用教程:快速搭建模擬從站進行測試與開發
- 步驟詳解:搭建 Modbus Slave
- 1. 安裝與啟動
- 2. 配置從站連接 (Connection Setup)
- 連接
- 3. 定義從站數據 (設置寄存器/線圈映射)
- 4. 設置初始值與變化模式 (可選但重要)
- 5. 連接 Master 進行測試
- 高級功能與技巧
- 常見問題與解決 (FAQ)
Modbus Slave 使用教程:快速搭建模擬從站進行測試與開發
所需工具
- Modbus Slave 軟件: 本文以 Windows 環境下常用的 Modbus Slave 軟件 (由
modbusdriver.com
提供,有免費試用版) 為例進行演示。其他優秀工具包括:qModMaster
(開源, 跨平臺)Simply Modbus Slave
(免費軟件)CAS Modbus Scanner
(免費)MThings
(國產優秀工具)- 基于 Python 的
pymodbus
庫 (編程實現)
- Modbus Master 軟件/設備: 用于連接和測試你的 Slave,例如:
- Modbus Poll (同廠)
- qModMaster (也可作 Master)
- 真實 PLC 或 HMI
- 自己編寫的 Master 端程序
軟件下載: https://pan.baidu.com/s/1KTsBqZd7nG3XAb_54I0f5Q 提取碼: 1111
步驟詳解:搭建 Modbus Slave
1. 安裝與啟動
- 從官方網站或可靠來源下載并安裝 Modbus Slave 軟件。
- 啟動軟件。Modbus Slave 界面包含菜單欄、工具欄、主顯示區域(寄存器/線圈值列表)、連接狀態欄等。
2. 配置從站連接 (Connection Setup)
連接
- 菜單操作:
Connection
->Connect...
(或工具欄上的連接圖標)。
- 關鍵配置項:
- Connection Type (連接類型): 選擇
Modbus RTU over TCP/IP
(常用,模擬串口轉以太網設備或直接 TCP 設備) 或Modbus TCP/IP
(純以太網)。Modbus RTU
(真實串口) 或Modbus ASCII
較少用于純軟件模擬。 - Slave ID (從站地址): 設置你的模擬從站的邏輯地址 (1-247)。例如,設為
1
。 - TCP/IP Settings (TCP/IP 設置):
- IP Address (IP 地址): 如果是
Modbus TCP/IP
,通常選擇0.0.0.0
(監聽本機所有網卡) 或127.0.0.1
(僅限本機訪問)。如果是Modbus RTU over TCP/IP
(模擬串口服務器),IP 也是本機地址。 - Port (端口): Modbus TCP 標準端口是
502
。保持默認或自定義一個端口 (確保防火墻允許)。
- IP Address (IP 地址): 如果是
- Serial Port Settings (串口設置 - 如果選 RTU/ASCII): 選擇虛擬串口對 (如
com2<->com3
需要配合虛擬串口軟件創建) 或真實串口 (需連接線纜)。 - Timeouts (超時): 可保持默認。
- Connection Type (連接類型): 選擇
- 確認: 點擊
OK
或Connect
。狀態欄應顯示Connected
或類似信息,表示 Slave 已在指定端口上監聽。
3. 定義從站數據 (設置寄存器/線圈映射)
-
Modbus Slave 的核心是模擬數據。你需要定義模擬從站擁有哪些寄存器和線圈。
-
菜單操作:
Setup
->Slave Definition...
(或功能鍵F8
)。 -
關鍵配置項:
- Slave ID: 確認或修改當前配置連接的 Slave ID (需與步驟 2 一致)。
- Function (功能碼區域): 軟件通常按功能碼區域組織數據:
01 (Read Coils)
: 定義可讀寫的 線圈 (Coils) 狀態 (0
/1
)。設置 起始地址 (如0
) 和 數量 (如10
)。02 (Read Discrete Inputs)
: 定義只讀的 離散輸入 (Discrete Inputs) 狀態 (0
/1
)。設置起始地址和數量 (如 0, 10)。03 (Read Holding Registers)
: 定義可讀寫的 保持寄存器 (Holding Registers) (16-bit 整數)。設置起始地址 (如0
) 和數量 (如10
)。04 (Read Input Registers)
: 定義只讀的 輸入寄存器 (Input Registers) (16-bit 整數)。設置起始地址 (如0
) 和數量 (如10
)。 提示:Holding 和 Input 寄存器地址空間是獨立的,可以都從 0 開始。
- 數據類型 :
Signed/Unsigned INT (16-bit)
Signed/Unsigned LONG (32-bit)
(占用 2 個連續寄存器, 需注意字節序ABCD
或DCBA
)FLOAT (32-bit)
(同樣占用 2 個連續寄存器, 需注意字節序ABCD
或DCBA
)String
(ASCII 字符串,占用多個連續寄存器)
-
確認: 點擊
OK
。主界面會顯示你定義的線圈和寄存器列表,通常地址、值、數據類型(如果指定)等列。
4. 設置初始值與變化模式 (可選但重要)
- 手動設置初始值:
- 在寄存器/線圈列表的
Value
列中直接雙擊單元格輸入初始值。 - 線圈:輸入
0
(OFF) 或1
(ON)。 - 寄存器:輸入十進制數值 (如
1234
), 十六進制 (如0x04D2
),或根據定義的數據類型輸入浮點數等。
- 在寄存器/線圈列表的
- 自動變化 (Auto Increment / Random / Formula): 為了模擬動態數據:
- 選中一個或多個寄存器/線圈。
- 菜單操作:
Setup
->Initialization
或右鍵菜單中找到類似選項。 - 常用模式:
Manual
: 手動修改。Random
: 在設定范圍內隨機變化。Increment
: 每次請求或按時間間隔遞增 (可設置步長、上限、下限)。Decrement
: 遞減。Zero
: 始終為 0。Formula
: 使用公式計算值 (高級功能)。
- 設置變化參數 (變化速率、范圍等)。
5. 連接 Master 進行測試
- 啟動你的 Modbus Master 軟件 (如 Modbus Poll) 或設備/程序。
- 在 Master 軟件中配置連接:
- Connection Type: 與 Slave 設置匹配 (
Modbus TCP/IP
或Modbus RTU over TCP/IP
)。 - IP Address: 填寫運行 Slave 軟件的電腦的 真實 IP 地址 (如果 Master 在另一臺機器) 或
127.0.0.1
(如果 Master 和 Slave 在同一臺機器)。 - Port:
502
(或 Slave 設置的自定義端口)。 - Slave ID: 設置為 Slave 中定義的 ID (如
1
)。
- Connection Type: 與 Slave 設置匹配 (
- 在 Master 軟件中設置要讀取/寫入的 數據區域 (Function) 和 地址范圍 (Address),確保覆蓋 Slave 定義的范圍 (如 Holding Registers 0-9)。
- 連接 Master。如果一切配置正確:
- Master 應能成功連接到 Slave。
- Master 的界面應顯示從 Slave 讀取到的初始值或動態變化的值。
- 測試讀操作: 在 Master 上執行讀命令 (如 Read Holding Registers),檢查返回的數據是否與 Slave 界面顯示一致。
- 測試寫操作:
- 在 Master 上嘗試寫入一個線圈 (Function 05 或 15) 或一個保持寄存器 (Function 06 或 16)。
- 觀察 Slave 軟件界面上對應的線圈或寄存器的值 是否立即更新 為你寫入的值。這是驗證寫功能是否正常的關鍵!
- 如果 Slave 設置了自動變化,觀察 Master 讀取到的值是否按預期變化。
高級功能與技巧
- 多從站模擬: 大多數 Slave 軟件允許在同一軟件實例中創建和運行 多個 Slave ID。這對于測試網關或需要與多個設備通信的 Master 非常有用。在連接或定義設置中查找添加新 Slave 的選項。
- 數據記錄 (Logging):
Setup
->Communication
->Log
(或類似路徑)。- 啟用日志記錄,選擇記錄內容 (發送/接收的原始報文、解析后的讀寫操作)。
- 指定日志文件路徑。這對于 調試通信故障、分析協議交互 至關重要!
- 響應延遲 (Delay): 模擬真實設備的響應時間。在連接設置或 Slave 定義中查找
Response Delay
選項,設置毫秒級的延遲。 - 錯誤注入 (Error Simulation): 高級工具允許模擬從站返回錯誤響應碼 (Exception Codes),測試 Master 的容錯處理能力。查找
Exceptions
或Error Simulation
設置。 - 導入/導出定義: 將精心配置好的 Slave 定義 (寄存器映射、初始值、變化規則) 保存為文件 (
*.sdf
或其他格式),方便下次快速加載或分享給團隊。 - 視圖定制: 調整顯示的列、數據格式 (十進制/十六進制/浮點)、顏色等,提高可讀性。
常見問題與解決 (FAQ)
- Master 連接不上 Slave:
- 檢查 IP 和端口: 確保 Master 連接的 IP 是 Slave 所在機器的正確 IP (
127.0.0.1
僅限本機),端口號與 Slave 監聽端口一致 (502
或自定義)。 - 檢查防火墻: 關閉 Windows 防火墻或添加允許
502
端口 (TCP) 的入站規則。 - 檢查 Slave ID: Master 和 Slave 配置的 Slave ID 必須相同。
- 檢查連接類型: Master 和 Slave 必須使用相同的連接類型 (TCP/IP, RTU over TCP)。
- 看日志 啟用 Slave 的通信日志,看是否有連接請求進來,是否有錯誤信息。
- 檢查 IP 和端口: 確保 Master 連接的 IP 是 Slave 所在機器的正確 IP (
- Master 能連上但讀不到數據/數據全為零:
- 檢查功能碼和地址: 確保 Master 請求的功能碼 (
03
讀 Holding,04
讀 Input) 和地址范圍 完全匹配 Slave 中定義的數據區域和起始地址。 - 檢查 Slave 定義: 確認在 Slave 中正確定義了 Master 請求的寄存器/線圈區域,并且設置了非零的初始值或啟用了自動變化。
- 看日志! 查看 Slave 日志,確認它收到了讀請求,并且返回了預期的數據。檢查返回的數據是否正確。
- 檢查功能碼和地址: 確保 Master 請求的功能碼 (
- Master 寫入后 Slave 值不更新:
- 檢查功能碼: Master 寫線圈必須用
05
(寫單個) 或15
(寫多個),寫保持寄存器必須用06
(寫單個) 或16
(寫多個)。寫 Input 寄存器 (04
) 是不允許的! - 檢查地址: Master 寫入的地址必須在 Slave 定義的對應可寫區域 (Coils 或 Holding Registers) 范圍內。
- 看日志! 查看 Slave 日志,確認它收到了寫請求,并且請求的地址和值是正確的。檢查 Slave 是否成功處理了寫請求。
- 檢查功能碼: Master 寫線圈必須用
- 數據格式不對 (如浮點數顯示亂碼):
- 檢查字節序: 32-bit 數據 (LONG, FLOAT) 由兩個 16-bit 寄存器組成。Master 和 Slave 對這兩個寄存器的 順序 (Byte Order / Word Order) 定義必須一致!常見的有
ABCD
(Big-Endian),BADC
(Big-Endian Byte Swap),CDAB
(Little-Endian Byte Swap),DCBA
(Little-Endian)。在 Master 和 Slave 中調整字節序設置直到匹配。
- 檢查字節序: 32-bit 數據 (LONG, FLOAT) 由兩個 16-bit 寄存器組成。Master 和 Slave 對這兩個寄存器的 順序 (Byte Order / Word Order) 定義必須一致!常見的有