← 所有文章

TCP-to-Serial Gateway 設定審核 Socket Serial Port Unit ID 三層不要混寫

· 站長

以離線匯出檔拆分TCP Socket、實體串口與Unit ID,比較透明轉發、Modbus TCP gateway與協定轉換,並建立變更回退與封包驗收表。

先把三層資料分欄

TCP-to-Serial 閘道的設定審核,第一步不是看畫面上寫了幾個數字,而是確認每個數字屬於哪一層。IP位址與TCP port描述網路端點;Serial Port描述閘道器上的實體串口;Unit ID或站號描述下游協定中的邏輯目的地。TCP 502是常見的Modbus TCP服務埠示例,不能因此把它寫成實體串口2。

本文使用虛構設備做離線審核,所有位址與數值都是案例條件。正式變更前要取得目標閘道器型號、韌體版本、設定匯出格式、模式說明及下游設備手冊。若文件只說支援Modbus,仍要查清楚是透明轉發、Modbus TCP轉RTU,或轉成另一種應用協定;後兩者都是協定轉換,本文為審核方便分列三種情境,各自對封包、例外與連線數的責任不同。

層次 應記錄 不能替代的欄位
網路Socket LAN IP、TCP port、來源限制 不能當成串口編號
實體Serial Port 1/Port 2、baud、parity、stop bit 不能當成TCP服務埠
下游協定 Modbus RTU、站號/Unit ID、功能碼 不能當成IP位址
操作模式 transparent或protocol conversion 不能只用產品名稱推定

審核表的每一列應能回答「誰從哪個端點進來、閘道器把資料送到哪個實體串口、串口上的下游站號如何辨識」。如果一列只剩「TCP 502→Port 2」,它仍缺少協定模式、串口參數及Unit ID,不能作為可回復的設定基線。

審核時先畫「邏輯連線」再畫「實際接線」。邏輯連線表示哪個TCP端點期待哪個下游站號,實際接線則表示RS-485 A/B、訊號地與串口端子。兩張圖若被壓成一張簡圖,維護人員很容易把Port 2當成站號2,或把Unit ID 7當成端子7。圖例應明寫欄位名稱、單位與資料來源。

把設定匯出檔變成可追溯表

先保存原始匯出檔與雜湊值,再逐欄抄入審核表;不要只留網頁截圖。截圖看得到選項,卻通常無法確認隱藏的預設值、空白欄位或韌體產生的欄位順序。表格另外記錄匯出時間、操作者、韌體版本與是否含密碼或憑證欄位,對外審核表遮罩機密值;可還原原檔另依權限加密保存,勿因遮罩破壞備份可用性。

欄位 虛構值 審核問題
Gateway LAN 192.0.2.10/24 是否為管理或資料介面?
TCP listen 192.0.2.10:502 是否真的啟用Modbus TCP模式?
Serial port Port 2, 19200 8-E-1 Port 2是實體介面,不是502的別名
Downstream Modbus RTU address 7 假設Unit ID 7原樣映射,須查設定
Source ACL 198.51.100.20/32 規則是否限制來源方向?

上述位址採文件保留的示例網段,只為展示欄位關係。若模式是transparent socket,閘道器可能只搬運位元組,Unit ID的解讀與回應配對仍由兩端設備或上層程式負責;若模式是Modbus TCP gateway,設備文件才可能定義MBAP Unit Identifier如何映射到RTU站號。不能把透明模式的推測寫成轉換器功能。

版本化時把原檔命名為日期、設備識別、韌體版本與變更單號的組合,並保存變更前後差異。匯出檔若是二進位格式,除原檔外另存人可讀欄位表;若格式帶有校驗或簽章,不要用文字編輯器改寫後再宣稱仍可匯入。

串口參數也要逐項保存。假設閘道Port 2設定19200 bit/s、偶校驗、1 stop bit,而下游儀表使用9600 bit/s、無校驗,TCP連線仍可能建立,但RTU框架會出現逾時、CRC錯誤或偶發錯誤。此時不能先改TCP port;先以串口擷取確認波特率、字元格式、方向與終端配置,再對照儀表手冊。

若TCP端是主動連線,設定表要記錄遠端IP、遠端port與重連等待;若是監聽端,則記錄bind介面、允許來源與連線上限。兩者都叫socket,但故障證據不同:主動端先查DNS、路由與遠端拒絕,監聽端先查服務狀態與ACL。這些欄位若不分開,測試結果無法回推。

三種模式要問不同問題

模式 資料責任 文件確認點 失敗先查
Transparent socket 通常只轉送位元組 連線方向、封包邊界、串口參數 是否有改寫或等待回覆
Modbus TCP gateway 解析TCP與RTU語意 Unit ID映射、例外、逾時 站號及功能碼支援
其他應用協定轉換 兩邊協定模型皆由閘道處理 資料型態、併發、錯誤碼 轉換規則與版本

透明模式不是「不需要協定設定」。串口端仍要相同的baud、parity、stop bit,TCP端則要確認是閘道主動連線或監聽。資料若被切成多段,必須依手冊確認閘道器採用串口空閒時間、長度、固定框架或其他封包判斷;不能用一次網路send就推定對端會得到一個完整RTU訊框。

以離線封包作驗收。本文先明訂假設路由為Unit ID 7原樣轉到Port 2的RTU站號7,Unit ID 8原樣轉到站號8;不是所有閘道都採這個映射。Modbus TCP轉RTU情境應移除MBAP,組合RTU站號、PDU及CRC;回覆再按TCP交易配對。透明模式只轉bytes,不能直接把含MBAP的Modbus TCP資料丟到RTU線上就期待可用。

結果不同時先保存原始TCP封包、串口擷取、時間戳與模式設定。TCP連得上但沒有串口回應,先查監聽埠、串口方向、baud與下游站號;串口有回應但上位收到例外,查轉換模式、功能碼支援與回應等待;兩個上位端同時讀取,則查文件對連線數與交易配對的限制。

Unit ID的測試不能只用一個站號。離線測試可建立7、8、0三筆案例:7與8是預期存在的站號,0則依文件判斷是否保留、廣播或拒絕。表格記錄送出欄位、下游預期、回覆及是否允許重試;若0被誤送到所有站,應標成模式或安全風險,不可用「沒有回覆」帶過。

離線案例與變更回退

案例一:匯出畫面有「TCP Port=502、Serial=2、Unit ID=7」。審核者把它拆成三列後發現Port 2其實是實體RS-485接口,502只是TCP監聽埠;若原本誤把兩者寫在同一個「通道」欄,維護人員可能把TCP改成5022而以為正在選串口。拆欄後的預期結果是網路端點仍為192.0.2.10:502,實體端為Port 2,站號為7。

案例二:變更前模式為transparent,變更單要求改成Modbus TCP gateway。先保存原始檔與測試PDU,再在隔離網段匯入副本。用Unit ID 7與8各送一筆只讀請求,驗收表要記錄兩筆是否到達對應站號、回應功能碼是否一致、逾時是否可辨識。任一站號混線就回復原檔,不以「TCP能連通」作成功條件。

階段 保存物 通過條件 失敗處理
變更前 原始匯出檔、雜湊、版本 可重新匯入或可人工重建 停止變更並補齊缺欄
隔離測試 PDU、串口擷取、時間戳 站號與模式符合文件 記錄差異後回退
上線後 新匯出檔、差異、測試結果 連線、回應及告警均可追溯 套用原檔並確認狀態
交接 設定表、限制、手冊版本 下一位可重現判斷 標記待確認項

回退點必須包含原始檔與匯入所需的韌體條件;只保存截圖不足以還原。若匯入可能重啟服務或清除連線,先安排維護窗口,並把「設定已寫入」與「測試封包通過」分成兩個狀態。本文

設定匯出檔的差異審查要避免把密碼雜訊當成真正變更。先按欄位分類為網路、串口、協定、權限與診斷,再逐類比對。若韌體升級自動新增欄位,差異表要寫明「格式新增」與「行為變更」的區別;沒有release note支持時,把影響列為待確認,不要推定預設值。

FAQ 來源與適用限制

FAQ1:TCP 502是不是Serial Port 2?不是。502是TCP端口示例,Port 2是閘道器的實體串口欄位,兩者必須分開記錄。

FAQ2:透明轉發一定會把Modbus TCP轉成RTU嗎?不一定。透明模式的責任要依設備文件確認,不能只看產品名稱推定封包改寫。

FAQ3:Unit ID填在IP欄旁就代表一定映射到下游站號嗎?不一定。只有協定閘道文件明確定義映射時,才能把它列為轉換結果。

FAQ4:保存網頁截圖可否當設定備份?通常不足。應保存匯出檔、韌體版本、欄位表與變更前後差異。

實作限制:本文的192.0.2.0/24與198.51.100.0/24是教學示例;未指定閘道器型號,因此沒有宣稱特定網頁欄位、連線數或重啟行為。實際設定要以目標設備手冊與release notes為準。

參考:Modbus Messaging Implementation Guide V1.0b:MBAP、Unit Identifier、TCP與串列閘道。

參考:IETF RFC 9293:TCP串流及連線語意,整合並取代早期RFC 793。

延伸閱讀


使用 PLC 工具箱 →