台達 DVP PLC 與 RS485 Modbus RTU 裝置連線 (使用 RS 指令)

PLC 為主站,溫溼度計為從站 (RS-485 二線式)

Yu
6 min readFeb 26, 2021

概述

透過 Modbus RTU 通訊,從 PLC 讀取溫溼度計的溫度值
本次使用台達 DVP-12SE PLC 與溫溼度計 XY-MD02 進行通訊連線,兩個都是支援 Modbus RTU 通訊的裝置,二線式 RS485。PLC 為主站 (Master),溫溼度計為從站 (Slave)。

通訊架構圖

接線方式

  1. 提供直流電 DC 24V 給溫溼度計和 PLC
  2. [溫溼度計] 接 [ PLC COM2]
    正接正,負接負 (D+ to D+, D- to D-)

裝置規格

溫溼度計 XY-MD02 (RS485 Modbus RTU)

說明:

  1. 通訊協議 (Default Protocol) : 9600/8/N/1
    Baud Rate : 9600
    Data Bit : 8
    Stop Bit : 1
    Check Bit (Parity Bit) : None
  2. 站號 (Default Slave ID)
    Device ID : 1
  3. 暫存器位址 (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 的設定方式如下表:

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

--

--