台達 DVP PLC 與 RS485 Modbus RTU 裝置連線 (使用 RS 指令)
概述
透過 Modbus RTU 通訊,從 PLC 讀取溫溼度計的溫度值。
本次使用台達 DVP-12SE PLC 與溫溼度計 XY-MD02 進行通訊連線,兩個都是支援 Modbus RTU 通訊的裝置,二線式 RS485。PLC 為主站 (Master),溫溼度計為從站 (Slave)。
接線方式
- 提供直流電 DC 24V 給溫溼度計和 PLC
- [溫溼度計] 接 [ PLC COM2]
正接正,負接負 (D+ to D+, D- to D-)
裝置規格
溫溼度計 XY-MD02 (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)
DVP PLC Modbus 參數說明
台達 DVP-12SE PLC
COM2 (RS485) 相關的參數如下:
變數
SendData : ARRAY [8] OF WORD,存放發送數值內容。
ReceivedData : ARRAY [10] OF WORD,存放接收數值內容。
SendCmd : BOOL,開始發送旗標。
Temp : WORD,運算用暫存變數。
Temperature : DWORD,溫度值 (°C * 10)。
程式說明
設定通訊參數
D1120 := 16#0081; (* 設定 COM2 (RS485) 的通訊協議為 9600, 8, N, 1 *) 設定方式參考附註。
D1129 := 300; (* 設定通訊逾時時間為 300ms *)
M1143 := TRUE; (* 設定為 RTU 模式 *)
M1161 := TRUE; (* 設定為 8 位元處理模式 *)
M1120 := TRUE; (* COM2 (RS-485) 通訊設定保持 *)
依序寫入要發送的資料內容
資料型態為 16 進制,一共需要傳送 8 個 Word。
PLC 傳送內容: 01 04 00 01 00 01 60 0A
01 : Slave ID (溫溼度計的站號)
04 : Read Input Registers Function Code (讀取 Input Registers 的功能碼為 04)
00 01 : Start Register Address (看手冊得知,溫度值存放在 Input Registers 0001 位址)
00 01 : Length (讀取資料的長度/個數。看手冊得知,讀取 1 個位址)
60 0A : CRC Checksum (CRC 檢查碼)
開始傳送
M1122 : COM2 (RS-485) 送信要求旗標。
使用 RS 指令
S : 傳送資料的起始裝置
m : 傳送資料的組數
D : 接收資料的起始裝置
n : 接收資料的組數
從 SandData 數起傳送 8 個 Word 給溫溼度計,並將溫溼度計回傳的資料放在 ReceivedData,放 10 個 Word。
接收完畢
處理接收到的資料內容
通訊逾時的後續處理
分析接收到的資料內容
溫溼度計回傳的資料會放在 ReceivedData。開了 10 個 Word 的位址,但實際上只接收到 7 個 Word。
溫溼度計回傳內容 : 01 04 02 01 29 79 7E
01 : Slave ID (溫溼度計的站號)
04 : Read Input Registers Function Code (讀取 Input Registers 的功能碼為 04)
02 : Length (回傳的資料長度)
01 29 : Data (回傳的資料內容)
79 7E : CRC Checksum (CRC 檢查碼)
01 29 就是讀取到的溫度值。十六進制 0129,換算成十進制是 297。表示讀取到的溫度是 29.7°C。
附註
D1120 的設定方式如下表:
Ex.1 :
鮑率 : 9600, 資料長度 : 8, 同位元 : None, 停止位元 : 1
D1120 設值為二進制 2#0000000010000001,十六進制 16#81,十進制 129
Ex.2 :
鮑率 : 9600, 資料長度 : 7, 同位元 : Even, 停止位元 : 1
D1120 設值為二進制 2#0000000010000110,十六進制 16#86,十進制 134
Ex.3 :
鮑率 : 19200, 資料長度 : 7, 同位元 : Even, 停止位元 : 1
D1120 設值為二進制 2# 0000000010010110,十六進制 16#96,十進制 150