modbus-TCP 擷取
描述:根據常用傳輸介質,Modbus 可使用序列埠和網路埠(含光纖)方式進行傳輸,RTU 是屬於序列埠通訊,TCP 屬於網路埠(乙太網路通訊)。Modbus 通訊協定遵循主裝置和從裝置的通訊步驟,邊緣閘道器中 Modbus 驅動使用 Master 用戶端【主站】(主裝置),採取主動詢問方式,傳送查詢資訊給 Modbus 從裝置,然後由 Modbus 從裝置依據接到的內容準備回應資訊回傳給閘道器。
1. 建立節點
Section titled “1. 建立節點”(1) 進入 CommBridge 頁面的【智慧孿生】,在左側點選切換至【裝置智聯】。

(2) 依次拖曳 Modbus 用戶端【主站】、資料處理和 MQTT 上傳外掛到外掛工作區,分別產生三個節點。

(3) 依次連線三個節點,連線順序:Modbus 用戶端【主站】 → 資料處理 → MQTT 上傳。

2. 建立方案
Section titled “2. 建立方案”協定選擇
Modbus-TCP
(1) 按兩下 Modbus 用戶端【主站】,點選【新增方案】按鈕。

(2) 填寫連線設定,點選【下一步】。

(3) 點選【新增分組】,填寫分組資訊,點選【確認】。

(4) 點選【新增資料】,填寫點位資料,點選【確認】。

(5) 點選【完成】,成功新增擷取方案。

(6) 開啟方案的開關,點選【儲存】。

3. 檢視結果
Section titled “3. 檢視結果”(1) 點選【裝置智聯】的【部署】按鈕,部署成功。

(2) 切換至【智慧孿生】,滑鼠移動至 Modbus 用戶端【主站】節點,彈出節點資訊清單。

(3) 點選方案,檢視該方案下各分組的點位即時資料和歷史資料。
擷取(處理前):

處理後(資料處理外掛中檢視方案):

4. 寫資料
Section titled “4. 寫資料”點位的讀寫模式為
rw和wo,且正常擷取資料時才能修改資料。
(1) 點選單個資料的【寫】按鈕,設定資料,點選【確定】。

(2) 檢視歷史資料。

5. 設定描述說明
Section titled “5. 設定描述說明”| 參數 | 描述 | 格式 | 舉例 |
|---|---|---|---|
| 方案名稱 | 使用者自訂該方案的名稱 | 非空 | 擷取 slave |
| 協定 | Modbus 協定 | Modbus TCP、Modbus RTU | Modbus TCP |
| 同步擷取 | 支援是否同步擷取,Yes 和 No | Yes、No | YES |
| 擷取週期 | 資料讀取輪詢週期,指整個方案內的每個分組每次讀取暫存器的間隔時間 | 數字,範圍:(100,2147483647] | 2000 |
| 擷取時效性 | 分組內所有點位需在設定時間內完成擷取,否則丟棄該分組資料;該時間包含訊框延遲。 | 數字,範圍:(0, 擷取週期] | 1000 |
| 超時時間 | 指整個方案下每個分組的每次擷取資料的時間,若超過了該時間則丟棄該次讀取的資料 | 數字,範圍:(0, 擷取週期] | 1000 |
| 最大批次暫存器數 | 連續點位批次擷取時的最大批次暫存器數 | 自然數,範圍:[1,120] | 120 |
| 訊框延遲 | 兩次擷取之間的最小間隔,0為預設值。若擷取頻繁超時可適當增大,否則無需修改。 | 單位毫秒,數字,範圍:[0, 2147483647] | 0 |
| 寫訊框延遲 | 寫資料時的額外等待時間,部分裝置寫操作較慢需設定,0表示無需額外延遲。 | 單位毫秒,數字,範圍:[0, 2147483647] | 0 |
| 寫暫存器功能碼 | 設定寫保持暫存器的功能碼。 | Auto、06、10,詳見下說明 | Auto |
| 變化擷取 | 資料擷取的方式。No:不變化擷取;SingleData: 只傳輸變化的點位;WholeGroup:組內任意資料變化後傳輸一整組資料。 | No、SingleData、WholeGroup | SingleData |
| 變化擷取重置時間 | 資料持續未變化超過該時間強制觸發一次資料提交。設定為0表示永不觸發 | 單位秒,數字,範圍:(0, 2147483647] | 0 |
| 失敗退避 | 擷取失敗後按退避率延長下次擷取時間,最長不超過擷取週期 × 最大退避率 | Yes、No,詳見下說明 | Yes |
| 退避率 | 失敗時的時間增長比率,必須大於0且不等於1 | 數字 | 2 |
| 最大退避率 | 最大退避時間比率,增長到這個比率後將保持最大比率不變。 | 數字 | 16 |
同步擷取:
- “Yes”表示整個方案下分組的擷取週期、超時時間和擷取時效性統一設定;作用範圍:整個方案內點位資料;
- “No”表示每個分組自行設定擷取週期、超時時間和擷取時效性。
寫暫存器功能碼:Auto: 寫一個暫存器時使用06,寫大於一個暫存器時使用10;06:全部使用06寫暫存器;10:全部使用10寫暫存器
失敗退避:例如擷取週期為1秒,退避率為2,最大退避率為16,那麼一直擷取失敗的等待時間會是1s, 2s, 4s, 8s, 16s。同理,如果擷取週期為10秒,退避率為0.5,最大退避率為0.1,那麼一直失敗的等待時間會是10s, 5s, 2.5s, 1.25s。一旦成功擷取將恢復初始預設的擷取週期
當退避率大於1時,最大退避率需要大於退避率,當退避率小於1時,最大退避率需要小於退避率
| 參數 | 描述 | 格式 | 舉例 |
|---|---|---|---|
| 分組名稱 | 使用者自訂該分組的名稱 | 非空 | 分組一 |
| Slave ID | Modbus 裝置位址,被擷取的裝置的從位址 | 數字,範圍:(0,255] | 1 |
| IP | Modbus 裝置 IP 位址 | 輸入點分十進位制格式的位址 | 172.21.78.157 |
| 埠 | Modbus 裝置埠號,預設為 502 | 數字,範圍:(0,65535] | 502 |
| 擷取週期 | 資料讀取輪詢週期,指單個分組每次讀取暫存器的間隔時間 | 數字,範圍:(100,2147483647] | 2000 |
| 擷取時效性 | 指單個分組的所有點位擷取資料的有效時間,在該時間內未讀取到分組內的所有點位資料,則丟棄該分組內的所有點位資料 | 數字,範圍:(0, 擷取週期] | 1000 |
| 超時時間 | 指單個分組的每次擷取資料的時間,若超過了該時間則丟棄該次讀取的資料 | 數字,範圍:(0, 擷取週期] | 1000 |
注意: 連線設定的同步擷取為 No,整個分組內的點位資料 Modbus 一次性讀取的暫存器個數有數量限制。 Holding Register 和 Input Register 暫存器一次性讀取一組連續暫存器點位個數最大是 120,Discrete 和 Coils 暫存器一次性讀取一組連續暫存器點位最大是 2000。
| 參數 | 前提 | 描述 | 格式 | 舉例 |
|---|---|---|---|---|
| 資料別名 | 點位的名稱,同一分組中是唯一的 | 非空,不能以數字、底線開頭,不能包含空格 | M | |
| 位址 | 暫存器位址,同一分組下位址不能相同 | 暫存器位址,同一個分組下的位址不能相同 | 數字,範圍:(0,2147483647) | 0 |
| 暫存器型別 | 指 Modbus 的操作碼 | Holding Register、Input Register、Discrete、Coils,詳見下說明 | Holding Register | |
| 資料型別 | 暫存器型別決定 | 暫存器資料的原始型別 | uint16、int16、uint32、int32、float、boolean、combine、string、hex string,詳見下說明 | uint16 |
| 位元組順序 | 暫存器型別和資料型別共同決定 | 指超過一個位元組的資料型別在記憶體中的儲存順序 | AB、BA、ABCD、CDAB、BADC、DCBA,詳見下說明 | AB |
| 暫存器數量 | 暫存器型別和資料型別共同決定 | 暫存器的資料型別的個數 | 詳見下說明 | 1 |
| 讀寫模式 | 暫存器型別決定 | 支援 ro(唯讀)、rw(讀寫)、wo(只寫) | ro、rw、wo | ro |
| 計算 | 使用者根據資料別名自訂公式 | {M}/10 | ||
| 偏移 | 資料型別為bit | 按照位元組順序調整後,從高位到低位的bit偏移 | 數字,範圍:[0,15] |
例如,要除錯溫度屬性,您裝置的溫度屬性位址為 1,則暫存器的位址可設定為 1。
- 當暫存器型別為 Discrete、Coils 時,資料型別預設為 boolean。
- 當資料型別為 uint16、int16、combine 時,位元組順序可選擇 AB、BA;當資料型別為 uint32、int32、float 時,位元組順序可選擇 ABCD、CDAB、BADC、DCBA;其他資料型別沒有位元組順序。
- 當暫存器型別為 Discrete、Coils 時,暫存器數量預設為 1;當資料型別為 uint16、int16、boolean 時,暫存器數量預設為 1;當資料型別為 uint32、int32、float 時,暫存器數量預設為 2;當資料型別為 combine 時,暫存器數量可選擇 1、2;當資料型別為 string、hex string 時,暫存器數量可手動填寫。
16位順序:
- AB:表示1個字的暫存器,高字在前低字在後,字內高位元組在前低位元組在後(大端排序)
- BA:表示1個字的暫存器,高字在前低字在後,字內低位元組在前高位元組在後(小端排序)
32位順序:
- ABCD:表示2個字的暫存器,高字在前低字在後,字內高位元組在前低位元組在後(大端排序)
- BADC:表示2個字的暫存器,高字在前低字在後,字內低位元組在前高位元組在後(大端位元組交換)
- CDAB:表示2個字的暫存器,低字在前高字在後,字內高位元組在前低位元組在後(小端位元組交換)
- DCBA:表示2個字的暫存器,低字在前高字在後,字內低位元組在前高位元組在後(小端排序)
6. Modbus 協定相關參數說明
Section titled “6. Modbus 協定相關參數說明”暫存器型別決定資料型別、暫存器數量和讀寫模式。
暫存器型別的相關介紹
Section titled “暫存器型別的相關介紹”0x、1x、3x、4x 是 Modbus 協定規定的位址範圍
| 暫存器型別 | 名稱 | 暫存器 PLC 位址 | 暫存器協定位址 | 讀寫狀態 | 說明 |
|---|---|---|---|---|---|
| Holding Register | 儲存暫存器(4x) | 40001-49999 | 0000H-FFFFH | 讀寫,讀取: 0x03,寫入:0x06 | 輸出參數或者儲存參數,控制器執行時被設定的某些參數 |
| Input Register | 輸入暫存器 (3x) | 30001-39999 | 0000H-FFFFH | 唯讀,0x04 | 輸入參數,控制器執行時從外部裝置獲得的參數 |
| Discrete | 離散輸入狀態(1x) | 10001-19999 | 0000H-FFFFH | 唯讀,0x02 | 輸入埠,透過外部設定改變輸入狀態 |
| Coils | 線圈狀態(0x) | 00001-09999 | 0000H-FFFFH | 讀寫,讀取:0x01,寫單線圈:0x05,寫多線圈:0x0F | 輸出埠,可設定埠的輸出狀態和讀取該位的輸出狀態 |
資料型別的相關介紹
Section titled “資料型別的相關介紹”資料型別根據原始資料型別、交換暫存器內高低位元組和交換暫存器的順序三者決定,每個字母代表一個位元組。
- 原始資料型別:uint16、int16、uint32、int32、float、boolean、combine、string、hex string。
- 交換暫存器內高低位元組:把暫存器內 16 位資料的前後 8 個 bits 交換,16bit 只存在正序(AB)和反序(BA),高位優先位正序,低位優先位反序。
- 交換暫存器順序:把暫存器內 32 位資料的 16 個 bits 交換,如 ABCD 和 CDAB。
原始資料型別說明:
| 名稱 | 說明 | 暫存器數量 |
|---|---|---|
| uint16 | 16 位無符號整數型別 | 1 |
| int16 | 16 位有符號整數型別 | 1 |
| uint32 | 32 位無符號整數型別 | 2 |
| int32 | 32 位有符號整數型別 | 2 |
| float | 32 位浮點型 | 2 |
| combine | 1、2 | |
| boolean | 布林值 | 1 |
| string | ASCII 字串型別 | 可自訂 |
| hex string | 16 進位制字串型別 | 可自訂 |
高低位順序說明:
| 屬性值 | 說明 |
|---|---|
| AB | 表示 2 個 位元組 的暫存器高位元組在前低位元組在後(正序) |
| BA | 表示 2 個 位元組 的暫存器低位元組在前高位元組在後(反序) |
| ABCD | 表示 2 個 字 的暫存器,高字在前低字在後,字內高位元組在前低位元組在後(大端排序) |
| BADC | 表示 2 個 字 的暫存器,高字在前低字在後,字內低位元組在前高位元組在後(大端位元組交換) |
| CDAB | 表示 2 個 字 的暫存器,低字在前高字在後,字內高位元組在前低位元組在後(小端位元組交換) |
| DCBA | 表示 2 個 字 的暫存器,低字在前高字在後,字內低位元組在前高位元組在後(小端排序) |