以前,AB的PLC本身都是不支持ModbusTCP通訊的,所以很多使用AB PLC的用戶都需要配第三方的協議轉換網關將ModBusTCP協議轉換為AB自己的EthernetIP協議。
可是,從Logix5000編程軟體15版本(實測20版本及以上)以後,對於CompactLogix和Controllogix系列的PLC,支持了使用PLC程序編寫出來的ModbusTCP協議通訊,目前來看,支持該通訊的協議的產品和版本主要有:
以上產品刷對應固件後即可支持ModbusTCP協議,並且可作為Master和Slave與其他第三方設備進行通訊,AB官方提供的例程分為Master和Slave兩部分,可按需分別使用。Master功能部分可能會佔用PLC內200-230K的存儲空間,Slave功能部分可能會佔用PLC的280-300K空間。此示例代碼可能不適用於所有應用程式,示例代碼會消耗的控制器內存、資源、CPU帶寬和控制器緩衝區,這可能會影響用戶程序的其餘部分。確保在使用Modbus代碼之前考慮了使用Modbus代碼的影響。
該例程支持的Modbus協議功能碼有 01,02,05,15,03,04,06,16
該例程內默認支持訪問4個不同IP位址ModbusTCP設備。每個連接支持最多5個操作(讀取或者寫入指令)。每個操作支持最多120個地址(Registers或者Coils)。最大本地地址範圍為1024個Coils和DiscreteInput,240個Registers和InputRegisters。
獲取到ModbusTCP通訊例程後,有三種使用方法,
一種是直接使用Logix5000編程軟體打開後綴為.ACD的程序文件,在該例程基礎上編寫你的其他程序。
第二種辦法就是將該例程導出為L5X格式的文件,再導入到你已經使用的程序中。
第三,下載ModbusTCP的AOI塊導入到你的程序中。此處我們以第二種方法為例說明。
1、將ModbusTCP程序導出
使用Logix5000軟體打開例程的ACD文件後,點擊Task裡面的程序名,右鍵,導出(Export Program),然後使用默認的名字即可。
記住保存的位置。
2、程序導入
打開你的程序,將剛才導出的文件導入到你的程序裡面。(20及以後版本軟體可以在線導入,不會導致PLC停機)
導入完成後會在Task裡面看到ModbusTCP通訊程序。導入進來後是一個單獨的Task,與原有的MainProgram平級的,所以不需要調用。導入的程序部分也不需要修改。
然後可以看到在程序的標籤庫裡面自動創建了很多標籤,所有的配置都在這些標籤裡面進行。
為了實際測試效果,我們在這個計算機上運行Modsim軟體模擬一個ModbusTCP Server,提供一些數據。模擬了40001-40010共10個數
3、標籤庫內ModbusTCP的配置
該例程是作為Master功能,所以,在ModbusTCP協議裡面,我們需要進行常規的設置,如,目標主機IP位址和埠,功能碼,目標主機數據起始地址,讀取數量,本地數據區起始地址等。
注意事項:
針對不同的PLC型號,MBTU_EnetModulPort參數需要設置為不同的內容,如下表除此之外,還需要設置如下表所示的標籤。
上表標籤在程序裡如下位置
上表標籤在程序裡如下位置
對於一個具體指令操作來說,需要設置如下標籤。(指令操作就是我們常說的使用功能碼讀取或寫入那個地址)
上表標籤在程序裡位置如下
小筆記:
每次修改完modbus通訊參數後,請手動將ReqBuilt標籤值置0,意為重新使能該命令。至此,通過ModbusTCP協議讀取第三方設備數據配置完畢,讀取回來的數據在MBTU_M4xx這個數組裡面顯示,如下圖
根據之前配置的不同的功能碼讀取回來的數值就存儲在對應的數據區內。
類似地,我們可以配置通過modbusTCP協議從PLC內寫數據到第三方設備,與讀取稍微不同,寫入時會將MBTU_MB_0xx、MBTU_MB_4xx、數據區內相應的數據寫入到對端,ModBus協議支持單個寫和連續寫功能碼,分別05/15寫單個、多個線圈、06/16寫單個、多個保持寄存器。
小筆記:
讀取和寫入的數據區需要提前規劃好,不能重疊。比如使用40001-40050作為讀取回來的數據存儲區,40051-40099作為寫數據到對端數據區。我們以16功能碼為例測試,將40006-40009連續寫4個數據到modsim
程序配置如下:
實際效果如下
至此,在Logix5000內使用ModbusTCP協議程序實驗完畢。
有興趣的同學可以考慮如果要傳輸浮點數時,應該注意那些地方
未完待續:Logix5000使用
ModbusTCP通訊之Slave
1.Smart200&V90伺服系統:已更新15課