一、需求描述
1、設(shè)備作為服務端時,需要給出對應的測試方法,即要求 PLC 作為客戶端,設(shè)備作為服務端,因此要求編寫 PLC 的ModBusTCP客戶端
2、先了解一下設(shè)備作為服務端的ModBusTCP網(wǎng)絡觸發(fā)業(yè)務邏輯
(1)設(shè)備需要設(shè)置網(wǎng)絡觸發(fā),并設(shè)置觸發(fā)指令(假如為TR),以及ModBusTCP服務端設(shè)置如圖
(2)PLC通過如圖信息連接設(shè)備
(3)PLC發(fā)送指令 TR 到設(shè)備
(4)設(shè)備收到 TR 指令,與網(wǎng)絡觸發(fā)設(shè)置的TR指令比對
(5)指令一致則進行觸發(fā)
(6)觸發(fā)的結(jié)果寫到設(shè)備端的傳輸?shù)刂飞?,需要PLC主動去訪問和獲取
二、官方文檔與解釋
如下,這里涉及到主站和從站的概念,與服務端和客戶端的描述有些差異,解釋如下:這個用英語比較好解釋,主站MASTER還有“主管”的意思,從站SLAVE還有“奴隸”的意思。從通訊過程上來說,主站發(fā)出通訊命令,從站應答。
因此,PLC為主站,設(shè)備為從站。這個概念不要和“服務端、客戶端”的概念混淆,不是一回事,只是為了利于編程的理解,在這里需要明確一下。
2、理解主站和從站的概念后,我們應該找到PLC作為主站功能的實現(xiàn)文檔,如下圖
三、根據(jù)官方文檔進行編程
1、連接設(shè)置
2、協(xié)議設(shè)置
操作路徑:[工具]? [通信協(xié)議支持功能]? [文件]? [新建]? “協(xié)議設(shè)置”畫面? [編輯]? [協(xié)議添加]
本次實例使用2個協(xié)議:?03:RD Holding Registers? +? WR Multi Registers
四、編程
1、上述代碼解釋與實驗
(1)改變D403的長度為20,接收到最大的長度為20,程序設(shè)置為:
(2)改變D402的賦值為10,即設(shè)備的取值地址為10到20的區(qū)域(11個數(shù)據(jù)),程序設(shè)置為:
(3)連接編號的對應關(guān)系
(5)協(xié)議號的對應關(guān)系
(6)設(shè)備站號為1,程序設(shè)置為:
(7)基于上述操作,我們實現(xiàn)了PLC對設(shè)備的讀操作
(8)增加WR Multi Registers協(xié)議,并下發(fā)到PLC中
(9)代碼