RS485 與 Modbus RTU 設定

RS485 通訊僅在「主畫面」狀態下才會啟用。 當設備停留在設定畫面或參數編輯畫面時,RS485 將不回應任何 Modbus 指令。

規格

鮑率 Baud

9600, 19200, 38400, 57600

接線

二線式

同一網絡中最多節點數

256

接線

RS485 二線式配線圖

黑色線:RS485 (B-)、綠色線:RS485 (A+)

本功能必需在DC 電源的棕藍色有供電的情形下,才能工作。為維持圖面易讀性,本圖省略DC供電圖,詳情形見DC 電源配線圖。

配線建議

  1. 一般建議使用帶屏敝 24awg 雙絞線,以串接方式連線每台設備,不要使用環狀或放射狀線路。

  2. 連線長時,請在 master 及線路最遠端使用終端電阻,終端電阻業界常使用 120Ω,實際數值請參照線材規格計算。

  3. 若通訊訊號不穩定,可於總線上的適當位置(通常靠近主站)加裝偏壓電阻,以提升訊號穩定性。。

  4. 隨貨6蕊線,如果使用在 RS485 通訊,請修剪線材長度,盡量使用最短必要線長,以降低雜訊干擾。並將隔離網與主要通訊線屏敝相連後接地。

  5. 在訊號干擾多的地方,軟體可能需要多次詢問才能得到回應,請在通訊程式內建立多次詢問機制,以區別訊號干擾與設備異常離線兩種情形。

參數設定

請參考參數頁面

設定步驟如下:

  1. 請先將基本參數設定好

    1. 完成參數設定步驟:語言設定,管路設定A02 (管規), A04(管路外徑) , A06 (管路厚度), A08 (管路材質) 設定。

    2. 執行Z03 (自動上機初始化)。

  2. 請先以本頁的接線指示將線接好

  3. 本機使用 Modbus RTU 協定,通訊參數設定如下:

    1. 請設定 E04 指定本機的 Modbus ID,請確認同一個線路上沒有相同的地址。

    2. 請設定 E05 指定通訊的速度 Baud,本機支援 9600, 19200, 38400 及 57600。

  4. 請回到主畫面。必需在主畫面下,RS485 才會工作。

  5. 請參考 Modbus RTU Protocol 測試要讀寫的記憶體。

通訊格式

bit order: lsb first

byte order: big endian

Data bits:8

Parity: None

Stop bits: 1

Floating point number follows IEEE754-1985. The float32 below stands for 32bits Single precision floating point number.

名詞定義

Register: 2 Byte 或 16bit 長,是 Modbus RTU 的記憶體通訊的單位長度。

Byte: 8 bit長

記憶體定義及功能

modbus 可操作的記憶體分為兩大類,唯讀型及讀寫型。

唯讀型主要是流量計狀態相關的記憶體,例如即時流量。這部分也是最常使用的記憶體。唯讀型的記憶體只能使用指 04 來讀取。

讀寫型主要是流量計設定參數記憶體,寫入操作一次只能改變一個參數,如果目標參數的記憶體長度是 1個 register,使用指令 06,如果目標參數的記憶體長度是 2 register,使用 30。

唯讀型記憶體讀取指令(04)及記憶體列表

指令範例

  • 控制端發指令(04)格式

Byte #

Node ID

範例內容01~FF

1

Slave Address

01

2

Function Code

02

3

讀取數據的起始地址

00

4

讀取數據的起始地址

00

5

讀取registers總數

00

6

讀取registers總數

02

7

CRC

71

8

CRC

CB

  • 控制端發訊範例說明

    這個範例會讀取即時流量

    slave address: 01(本流量計地址)

    function code: 04(讀取指令)

    讀取數據的啟始地址: 00 00(要讀取的數據的啟始地址)

    讀取registers 總數: 00 02 (需要從 00 00 開始讀兩個 register 的記憶體)

    CRC: 71 CB(依 CRC 算法計算出的糾錯碼)

  • 流量計回覆(04)格式

Byte #

Node ID

範例內容01~FF

1

Slave Address

01

2

Function Code

04

3

回覆的Byte數

04

4

Data Byte #1

00

5

Data Byte #2

00

6

Data Byte #3

00

7

Data Byte #4

00

8

CRC

FB

9

CRC

84

  • 流量計回覆範例說明

    slave address: 01(本流量計地址)

    function code: 04(讀取指令)

    回覆的Byte數: 04(2個register=4byte)

    Data Byte: 00 00 00 00(假設目前即時流量為 0)

    CRC: FB 84(依 CRC 算法計算出的糾錯碼)

Modbus RTU 讀取 Float32 數據範例

以累積流量 20000.5 升 為例,解釋如何發送指令,並將回傳數據解讀為十進位制。

主站發送讀取指令 (TX 訊框)

根據設備規格,累積流量採 Float32 格式,佔用 2 個暫存器 (4 Bytes) 。主站需發送 Modbus 功能碼 04(讀取輸入暫存器),以讀取從位址 0000 開始的 2 個暫存器數據。

  • Slave Address = 01

  • Function Code = 04

  • 起始暫存器位址 = 00 00

  • 讀取數量 = 00 02 (2 個暫存器)

  • CRC 校驗碼 = 71 CB

從站回覆數據 (RX 訊框)

從站收到讀取請求後,將內部儲存的 20000.5 升(Float32)數據,依 Big Endian 順序,封裝為 4 個位元組回傳。

  • Slave Address = 01

  • Function Code = 04

  • 回傳位元數 = 04 (4 Bytes)

  • 數據位元組 = 45 9C 40 00

  • CRC 校驗碼 = E2 56

數據解析與轉換 (轉回十進制)

步驟 A:排列數據

由於設定為 大端模式 (Big Endian),資料的最高位元組放在最前面,因此 4 個位元組的順序就是收到的順序:

459C4000 ₁₆

步驟 B:拆解 Float32 結構 (SEM: S-符號位, E-指數位, M-尾數位)

將 459C4000 ₁₆ 轉換為32位二進位制

部分

二進制數值

位元數

說明

S (符號位)

0

1 bit

0=正數

E (指數位)

10001011

8 bits

139₁₀。 實際指數:

139 - 127 (Float 32 偏移量) = 12

M (尾數位)

001110001...

23 bits

有效數字 1.M

步驟 C:計算數值

根據 IEEE 754 公式:

• 指數位:E = 10001011 轉換為10 進位制

在 IEEE 754 Float32 標準中,指數位採用偏移表示法表示正指數和負指數,標準規定的偏移量 (Bias) 是 127,因此實際指數是 139 - 127 = 12

• 尾數部分:M=0011100100000000000000

有效數字 1.M:1.001110001 (後面的零可以忽略)

• 得根據 IEEE754 浮點數數值表示為

(1)0×1.001110001×212(-1)⁰ × 1.001110001 × 2¹²

將小數點向右移動 12 位:

• 將這個二進制數轉換回十進制:

得請求累積流量,RX 回覆數據: 01 04 04 45 9C 40 00 E2 56 值為 20000.5 升

Modbus 不同格式間的轉換器

Last updated