PLC 為主站,溫溼度計為從站 (RS-485 二線式)
概述
透過 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) 相關的參數如下:
變數
SendCmd : BOOL,開始發送旗標。
ReceivedData : ARRAY [10] OF WORD,存放接收數值內容。
Temp : WORD,運算用暫存變數。
Humidity : DWORD,溼度值 ( %RH * 10 )。
程式說明
設定通訊參數
D1120 := 16#0081; (* 設定 COM2 (RS485) 的通訊協議為 9600, 8, N, 1 *) 設定方式參考附註。
D1129 := 300; (* 設定通訊逾時時間為 300ms *)
M1143 := TRUE; (* 設定為 RTU 模式 *)
M1161 := TRUE; (* 設定為 8 位元處理模式 *)
M1120 := TRUE; (* COM2 (RS-485) 通訊設定保持 *)
開始傳送
M1122 : COM2 (RS-485) 送信要求旗標。
使用 MODRW 指令
S1 : 從站站號 (溫溼度計站號是 1 )
S2 : 功能碼 ( Input Registers Function Code 是 04 )
S3 : 資料起始位 (暫存器溼度位址是 2 )
S : 讀取 / 接收資料暫存區
n : 資料長度 (讀取 1 個位址)
接收完畢
處理接收到的資料內容
通訊逾時的後續處理
分析接收到的資料內容
溫溼度計回傳的資料會放在 ReceivedData。開了 10 個 Word 的位址,但實際上只接收到 7 個 Word。
溫溼度計回傳內容 : 01 04 02 01 B7 F8 D6
01 : Slave ID (溫溼度計的站號)
04 : Read Input Registers Function Code (讀取 Input Registers 的功能碼為 04)
02 : Length (回傳的資料長度)
01 B7 : Data (回傳的資料內容)
F8 D6 : CRC Checksum (CRC 檢查碼)
01 B7 就是讀取到的溼度值。十六進制 01B7,換算成十進制是 439。表示讀取到的溼度是 43.9%RH。
附註
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