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

Yu
5 min readFeb 26, 2021

--

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

概述

透過 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) 相關的參數如下:

變數

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 的設定方式如下表:

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

--

--