# 7. MODBUS RTU通訊協定

{% hint style="info" %}
使用MODBUS R485 連網通訊協定, 建議將 TX 間隔1秒以上以提升通訊穩定性。
{% endhint %}

讀取瞬時流量、流速、訊號強度、信號品質:

| 0       | 1            | 2         | 3         | 4      | 5      | 6               | 7               |
| ------- | ------------ | --------- | --------- | ------ | ------ | --------------- | --------------- |
| Node ID | Funtion Code | Address 1 | Address 0 | Data 1 | Data 0 | CRC             | CRC             |
| 01\~FF  | 04           | 00        | 00        | 00     | 07     | 16 Bit CRC 計算結果 | 16 Bit CRC 計算結果 |

回應格式：

| 0       | 1            | 2           | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 10     | 11      | 12      | 13 | 14                  | 15                  | 16      | 17              | 18              |
| ------- | ------------ | ----------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------- | ------- | -- | ------------------- | ------------------- | ------- | --------------- | --------------- |
| Node ID | Funtion Code | Data length | 流量整數部分 | 流量整數部分 | 流量小數部分 | 流量小數部分 | 流速整數部分 | 流速整數部分 | 流速小數部分 | 流速小數部分 | 順流 RSSI | 逆流 RSSI | 保留 | <p>信號 </p><p>品質</p> | <p>流量 </p><p>單位</p> | 公、英 制距離 | CRC             | CRC             |
| 01\~FF  | 04           | 0D          |        |        |        |        |        |        |        |        |         |         | 0  |                     |                     |         | 16 Bit CRC 計算結果 | 16 Bit CRC 計算結果 |

Byte 00 : 節點編號&#x20;

Byte 01 : 功能代號&#x20;

Byte 02 : 資料長度 10 bytes&#x20;

Byte 03 \~ 04 : 流量整數部分，格式：16-Bit signed 整數&#x20;

Byte 05 \~ 06 : 流量小數部分，格式：16-Bit signed 整數，與整數部分加總前需先除以10000&#x20;

Byte 07 \~ 08 : 流速整數部分，格式：16-Bit signed 整數&#x20;

Byte 09 \~ 10 : 流速小數部分，格式：16-Bit signed 整數，與整數部分加總前須先除以10000&#x20;

Byte 11 、12 : 8-bit unsigned 整數，數字介於0到100&#x20;

Byte 14 : 8-bit unsigned 整數，數字介於0到100&#x20;

Byte 15 : 8-bit unsigned 整數，使用時須先轉換為十進位，十位數表示分子單位，個位數 表示分母單位，數字對應單位參見下表

Byte 16 : 8-bit unsigned 整數，1代表公制，距離單位為 mm 及 m，2代表為英制，距離單位為inch及ft

分子單位：

| 數字 | 單位           |
| -- | ------------ |
| 1  | 立方米 (m³)     |
| 2  | 公升 (l)       |
| 3  | 美制加侖 (gal)   |
| 4  | 英制加侖 (igl)   |
| 5  | 百萬美制加侖 (Mgl) |
| 6  | 立方英呎 (cf)    |
| 7  | 美制桶 (bal)    |
| 8  | 石油桶 (ob)     |

分母單位：

| 數字 | 單位       |
| -- | -------- |
| 1  | 秒 Second |
| 2  | 分 Minute |
| 3  | 小時 Hour  |
| 4  | 天 Day    |

讀取正向累計流量：

| 0       | 1            | 2         | 3         | 4      | 5      | 6               | 7               |
| ------- | ------------ | --------- | --------- | ------ | ------ | --------------- | --------------- |
| Node ID | Funtion Code | Address 1 | Address 0 | Data 1 | Data 0 | CRC             | CRC             |
| 01\~FF  | 04           | 00        | 07        | 00     | 05     | 16 Bit CRC 計算結果 | 16 Bit CRC 計算結果 |

回應格式：

| 0       | 1            | 2           | 3          | 4          | 5           | 6          | 7          | 8          | 9          | 10         | 11 | 12     | 13              | 14              |
| ------- | ------------ | ----------- | ---------- | ---------- | ----------- | ---------- | ---------- | ---------- | ---------- | ---------- | -- | ------ | --------------- | --------------- |
| Node ID | Funtion Code | Data length | 正向累計流量整數部分 | 正向累計流量整數部分 | 正向累計流量整數部分e | 正向累計流量整數部分 | 正向累計流量小數部分 | 正向累計流量小數部分 | 正向累計流量小數部分 | 正向累計流量小數部分 | 保留 | 累計流量單位 | CRC             | CRC             |
| 01\~FF  | 04           | 0A          |            |            |             |            |            |            |            |            | 0  |        | 16 Bit CRC 計算結果 | 16 Bit CRC 計算結果 |

Byte 00 : 節點編號&#x20;

Byte 01 : 功能代號&#x20;

Byte 02 : 資料長度 10 bytes&#x20;

Byte 03 \~ 06 : 32-bits signed 整數&#x20;

Byte 07 \~ 10 : 32-bits signed 整數，與整數部分加總時須先除以1000000&#x20;

Byte 12 : 流量單位，數字範圍 1 \~ 8，對應單位參見下表

分子單位：

| 數字 | 單位           |
| -- | ------------ |
| 1  | 立方米 (m³)     |
| 2  | 公升 (l)       |
| 3  | 美制加侖 (gal)   |
| 4  | 英制加侖 (igl)   |
| 5  | 百萬美制加侖 (Mgl) |
| 6  | 立方英呎 (cf)    |
| 7  | 美制桶 (bal)    |
| 8  | 石油桶 (ob)     |

讀取逆向累計流量：

| 0       | 1            | 2         | 3         | 4      | 5      | 6               | 7               |
| ------- | ------------ | --------- | --------- | ------ | ------ | --------------- | --------------- |
| Node ID | Funtion Code | Address 1 | Address 0 | Data 1 | Data 0 | CRC             | CRC             |
| 01\~FF  | 04           | 00        | 0C        | 00     | 05     | 16 Bit CRC 計算結果 | 16 Bit CRC 計算結果 |

回應格式：

| 0       | 1            | 2           | 3          | 4          | 5          | 6          | 7          | 8          | 9          | 10         | 11 | 12     | 13              | 14              |
| ------- | ------------ | ----------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | -- | ------ | --------------- | --------------- |
| Node ID | Funtion Code | Data length | 逆向累計流量整數部分 | 逆向累計流量整數部分 | 逆向累計流量整數部分 | 逆向累計流量整數部分 | 逆向累計流量小數部分 | 逆向累計流量小數部分 | 逆向累計流量小數部分 | 逆向累計流量小數部分 | 保留 | 累計流量單位 | CRC             | CRC             |
| 01\~FF  | 04           | 0A          |            |            |            |            |            |            |            |            | 0  |        | 16 Bit CRC 計算結果 | 16 Bit CRC 計算結果 |

Byte 00 : 節點編號&#x20;

Byte 01 : 功能代號&#x20;

Byte 02 : 資料長度 10 bytes&#x20;

Byte 03 \~ 06 : 32-bits signed 整數&#x20;

Byte 07 \~ 10 : 32-bits signed 整數，與整數部分加總時須先除以1000000&#x20;

Byte 12 : 流量單位，數字範圍 1 \~ 8，對應單位參見下表

分子單位：

| 數字 | 單位           |
| -- | ------------ |
| 1  | 立方米 (m³)     |
| 2  | 公升 (l)       |
| 3  | 美制加侖 (gal)   |
| 4  | 英制加侖 (igl)   |
| 5  | 百萬美制加侖 (Mgl) |
| 6  | 立方英呎 (cf)    |
| 7  | 美制桶 (bal)    |
| 8  | 石油桶 (ob)     |

讀取淨累計流量：

| **0**   | 1            | 2         | 3         | 4      | 5      | 6               | 7               |
| ------- | ------------ | --------- | --------- | ------ | ------ | --------------- | --------------- |
| Node ID | Funtion Code | Address 1 | Address 0 | Data 1 | Data 0 | CRC             | CRC             |
| 01\~FF  | 04           | 00        | 11        | 00     | 05     | 16 Bit CRC 計算結果 | 16 Bit CRC 計算結果 |

回應格式：

| 0       | 1            | 2           | 3         | 4         | 5         | 6         | 7         | 8         | 9         | 10        | 11 | 12     | 13              | 14              |
| ------- | ------------ | ----------- | --------- | --------- | --------- | --------- | --------- | --------- | --------- | --------- | -- | ------ | --------------- | --------------- |
| Node ID | Funtion Code | Data length | 淨累計流量整數部分 | 淨累計流量整數部分 | 淨累計流量整數部分 | 淨累計流量整數部分 | 淨累計流量小數部分 | 淨累計流量小數部分 | 淨累計流量小數部分 | 淨累計流量小數部分 | 保留 | 累計流量單位 | CRC             | CRC             |
| 01\~FF  | 04           | 0A          |           |           |           |           |           |           |           |           | 0  |        | 16 Bit CRC 計算結果 | 16 Bit CRC 計算結果 |

Byte 00 : 節點編號&#x20;

Byte 01 : 功能代號&#x20;

Byte 02 : 資料長度 10 bytes&#x20;

Byte 03 \~ 06 : 32-bits signed 整數&#x20;

Byte 07 \~ 10 : 32-bits signed 整數，與整數部分加總時須先除以1000000&#x20;

Byte 12 : 流量單位，數字範圍 1 \~ 8，對應單位參見下表

分子單位：

| 數字 | 單位           |
| -- | ------------ |
| 1  | 立方米 (m³)     |
| 2  | 公升 (l)       |
| 3  | 美制加侖 (gal)   |
| 4  | 英制加侖 (igl)   |
| 5  | 百萬美制加侖 (Mgl) |
| 6  | 立方英呎 (cf)    |
| 7  | 美制桶 (bal)    |
| 8  | 石油桶 (ob)     |

清除所有累計流量：

| **0**   | 1            | 2         | 3         | 4      | 5      | 6               | 7               |
| ------- | ------------ | --------- | --------- | ------ | ------ | --------------- | --------------- |
| Node ID | Funtion Code | Address 1 | Address 0 | Data 1 | Data 0 | CRC             | CRC             |
| 01\~FF  | 14           | 00        | 00        | 00     | 00     | 16 Bit CRC 計算結果 | 16 Bit CRC 計算結果 |

清除淨累積流量：

| **0**   | 1            | 2         | 3         | 4      | 5      | 6               | 7               |
| ------- | ------------ | --------- | --------- | ------ | ------ | --------------- | --------------- |
| Node ID | Funtion Code | Address 1 | Address 0 | Data 1 | Data 0 | CRC             | CRC             |
| 01\~FF  | 15           | 00        | 00        | 00     | 00     | 16 Bit CRC 計算結果 | 16 Bit CRC 計算結果 |

清除正向累計流量：

| **0**   | 1            | 2         | 3         | 4      | 5      | 6               | 7               |
| ------- | ------------ | --------- | --------- | ------ | ------ | --------------- | --------------- |
| Node ID | Funtion Code | Address 1 | Address 0 | Data 1 | Data 0 | CRC             | CRC             |
| 01\~FF  | 16           | 00        | 00        | 00     | 00     | 16 Bit CRC 計算結果 | 16 Bit CRC 計算結果 |

清除逆向累計流量：

| **0**   | 1            | 2         | 3         | 4      | 5      | 6               | 7               |
| ------- | ------------ | --------- | --------- | ------ | ------ | --------------- | --------------- |
| Node ID | Funtion Code | Address 1 | Address 0 | Data 1 | Data 0 | CRC             | CRC             |
| 01\~FF  | 17           | 00        | 00        | 00     | 00     | 16 Bit CRC 計算結果 | 16 Bit CRC 計算結果 |
