PC 與 RS485 Modbus RTU 裝置連線
概述
在電腦上透過 RMMS 軟體 (Radzio! Modbus Master Simulator) 與 Modbus RTU 裝置溫溼度計 (XY-MD02) 進行通訊連線,二線式 RS485。電腦為主站 (Master),溫溼度計為從站 (Slave)。
使用軟體 (免安裝)
Radzio! Modbus Master Simulator
網站:http://en.radzio.dxp.pl/modbus-master-simulator/
說明:通訊協議支援 Modbus RTU, Modbus TCP ,不支援 Modbus ASCII,所以資料長度 (Data Bit) 一定是 8,不是 7。軟體介面沒有設定資料長度的欄位,也不用設定,就是 8。
裝置規格
溫溼度計 XY-MD02 (RS485 Modbus RTU)
說明:
- 有支援 RS485 Modbus RTU 通訊協議的裝置都可以,工業上常見的裝置如:電力電表、變頻器、溫溼度計……
- 一定要看手冊或說明書。有中文版的是幸運,很多都是英文手冊,所以學英文吧。
手冊:(每個裝置的資料和規格都不一樣!)
- 通訊協議 (Default Protocol) : 9600/8/N/1
Baud Rate : 9600
Data Bit : 8
Stop Bit : 1
Check Bit (Parity Bit) : None - 站號 (Default Slave ID)
Device ID : 1 - 暫存器位址 (Address Table)
接線方式
- 提供直流電 DC 24V 給溫溼度計
- [溫溼度計] 接 [轉接器 (RS232 to RS485)]
正接正,負接負 (D+ to D+, D- to D-) - 依序接上 RS485 - RS232 - USB 的轉接器,接到電腦
測試
- 找出電腦的 USB 埠:控制台 > 裝置管理員 > 連接埠
2. RMMS 通訊設定:一定要和裝置設定相同的通訊協議
溫溼度計設定 9600/8/N/1,軟體也要設定 9600/8/N/1 (資料長度預設是 8,所以沒有 8 可以選)
Protocol : Modbus RTU
Port : COM5 (去裝置管理員查)
Bitrate : 9600 (要跟溫溼度計一樣)
Parity : NONE (要跟溫溼度計一樣)
Stop bits : 1 (要跟溫溼度計一樣)
3. RMMS 通訊設定:看手冊
Device ID : 1 (要跟溫溼度計一樣)
溫度值
類型:Input Registers
位址:0x0001(R) (0x0001 表示十六進制 1。R 表示只能讀取,不能寫入)
濕度值
類型:Input Registers
位址:0x0002(R) (0x0002 表示十六進制 2。R 表示只能讀取,不能寫入)
4. 通訊失敗很正常:只要有一個地方設錯,就通不起來
A. 檢查裝置是否支援 RS485 Modbus RTU 通訊
B. 檢查硬體接線
C. 檢查裝置通訊協議 (Baud Rate, Data Bit, Stop Bit, Parity Bit)
D. 檢查裝置站號
E. 檢查軟體通訊協議 (Baud Rate, Data Bit, Stop Bit, Parity Bit)
F. 檢查暫存器類型 (Input Register, Holding Register, Coil)
G. 檢查暫存器位址 (Address)
G-1. 手冊位址是寫 [十進制] 還是 [十六進制],可能需要轉換。
G-2. 位址可加減 1 個數字試試看。如果手冊位址寫 3,可以試測 2 或 4。
G-3. Holding Register 位址加或減 40001。
H. 檢查讀取的資料長度 (Length)
H-1. 讀取的資料長度太長。溫溼度計的 Input Register 只有 2 個,要讀取 10 個就會錯。
H-2. 讀取的資料長度設成偶數試試看。如果 1 不行,就試 2 或 4。
I. 問有經驗的人或廠商。
5. 數值轉換:幾乎都需要進行換算
溫度值為 0x0170 轉乘十進制為 368,根據手冊表示當前溫度為 36.8C
濕度值為 0x224 轉乘十進制為 548,根據手冊表示當前溫度為 54.8%
A. 十六進制、十進制轉換
B. 高低位元組互換 (WORD, DWORD, High Byte, Low Byte)
C. 有號數、無號數轉換 (Signed, Unsigned)
D. 浮點數轉換 (Float, Real)
E. 十六進制、ASCII 轉換 (顯示為文字時)
對初學者來說,通訊要注意的細節很多,一開始通不起來很正常,細心一點,耐心一點,多試多問吧。另外,其他與 Modbus 通訊相關更進階的部分,像是 CRC, Request Frame, Response Frame, Buffer ...... 礙於篇幅就先不討論了。想了解更多,網路上都找得到其他前輩更為專業的文章。