如何判斷Modbus TCP連接是否建立?

常見問題
1、如何判斷Modbus TCP連接是否建立?

答:進行Modbus TCP通信,需要建立連接,

S7-200 SMART CPU作為Modbus TCP客戶端時:通過Modbus TCP Client指令 MBUS_CLIENT 的符號表中的 mConnected 參數來判斷,如圖1.所示

mConnected=1 表示已經建立連接,mConnected=0 表示尚未建立連接



圖1.mConnected判斷連接狀態

S7-200 SMART CPU作為Modbus TCP服務器時:通過Modbus TCP Server指令 MBUS_SERVER 的符號表中的 mConnected 參數來判斷,如圖2.所示

mConnected=1 表示已經建立連接,mConnected=0 表示尚未建立連接.



圖2.mConnected判斷連接狀態

注意:當PLC內存在多個客戶端或者多個服務器時,不建議參考該狀態點。

2、如何查看錯誤代碼?

答:出現錯誤時,MBUS_CLIENT 指令輸出參數Done 會為1,但是,Done在連接建立完成,連接斷開,響應完成時都會出現置位為1的情況。

出現錯誤時,還有Error字節會顯現出錯誤代碼,僅保留一個週期時間。

綜上所述,查看錯誤代碼,可以按照圖3.所示的方法進行。



圖3.查看錯誤代碼

3、進行 Modbus TCP 通信寄存器類型數據,數據量大超過120個字如何處理?

答:如果數據量超過120個字,可以進行如下兩種方法操作:

A、建立多個連接,不同連接之間,可以並行操作,因為占用的通信資源不同;

B、建立一個連接,進行多個操作,不同操作之間需要進行輪詢,同一時刻只有一個操作在進行。

4、Modbus TCP通信時,如何訪問地址範圍大於49999 的保持寄存器?

Modbus 保持寄存器地址在 40001 到 49999 這一範圍內。該範圍足以滿足大多數應用的要求,但有些 Modbus 從站設備將數據映射到地址範圍更大的保持寄存器中。 MBUS_CLIENT 指令允許參數 Addr 的附加範圍,以支持 400001 至 465536 的保持寄存器地址的擴

展範圍。例如,要訪問保持寄存器 16768,請將 MBUS_CLIENT 的 Addr 參數設置為 416768。 擴展尋址允許訪問 Modbus 協議支持的全部 65536 個可能地址。此擴展尋址僅適用於保持寄存器。

5、S7-200 SMART作為 Modbus TCP客戶端, 服務器為網關模塊,連接多個 Modbus RUT 設備時如何區分 Modbus RTU 從站地址能?

答:S7-200 SMART CPU 作為 Modbus TCP 客戶端與 Modbus TCP 服務器通信,當嘗試訪問比 Modbus TCP 服務器更低端的串行子網中的設備,會有報錯 "無法建立連接"。如果 Modbus TCP 服務器用於 Modbus RTU 協議的網關,則 MB_UNIT_ID 可用於識別串行網

絡上連接的從站設備。MB_UNIT_ID 用於將請求轉發到正確的 Modbus RTU 從站地址。一些 Modbus TCP 設備可能要求 MB_UNIT_ID 參數在限制範圍內。該參數所在位置,如圖4.所示

mModbusUnitID默認值為255(16#FF),如果從站設備有多個,可以S7-200 SMART 和網關模塊建立一個連接,在這個連接上通過修改UnitID的值進行UnitID的輪詢。



圖4.mModbusUnitID

6、對於一些服務器不支持寫單個數字量輸出位(功能碼 5)/單個保持寄存器(功能碼 6),S7-200 SMART 如何實現寫單個位/字。

答:一些 Modbus 服務器設備不支持 Modbus 功能寫入單個離散輸出位(Modbus 功能 5)或寫入單個保持寄存器(Modbus 功能 6)。相反,這些設備只支持多位寫入(Modbus 功能 15)或多寄存器寫入(Modbus 功能 16)。如果服務器設備不支持單個位/字 Modbus

功能,則 MBUS_CLIENT 指令將返回錯誤代碼 1。Modbus 客戶端協議允許強制 MBUS_CLIENT 指令使用多個位/字 Modbus 功能,而非使用單個位/字 Modbus 功能。可通過在 Modbus 客戶端符號表中查找符號 mModbusForceMulti,並在程序執行 MBUS_CLIENT 之前

更改此值,來強制多個位/字指令。將 mModbusForceMulti 設置為 TRUE,可在寫入單個位或寄存器時強制使用多個位/字功能。如圖5.所示。



圖5. mModbusForceMulti