前兩天,在一個QQ群裡,有同行的朋友問,在MCGS中如何實現批量讀取數據,因為他當時面臨設備,通訊協議才是MODBUS RTU,同時廠家說地址不能分開讀,必須是連續的。鑑於他提供的消息是能夠設置的地方都試過了。為此,我直接告訴通過腳本,批量讀取的方案。那麼這個方案究竟如何實現?且看我下面慢慢道來。
一、工具
1.modsim:仿真PLC或者第三方設備。
2.MCGS組態軟件
3.串口軟件:在電腦中生成兩不同名稱,但互聯的串口,COM1和COM2;
二、指令介紹
1.設備函數
!SetDevice(DevName,DevOp,CmdStr)
函數意義: 按照設備名字對設備進行操作
返 回 值: 數值型
= 0,調用正常
= -1,失敗
= -2,超時
= 1,設備啟動狀態
= 3,設備停止狀態
參 數: DevName,字符型,設備名
DevOp,數值型,設備操作碼
CmdStr,字符串,設備命令,只有當DevOp=6時CmdStr才有意義
DevOp取值範圍及相應含義:
= 1,啟動設備開始工作
= 2,停止設備的工作
= 3,測試設備的工作狀態
= 4,啟動設備工作一次
= 5,改變設備的工作週期,CmdStr包含新的工作週期,單位ms
= 6,執行指定的設備命令,CmdStr中包含指定命令的格式
實 例: !SetDevice(OmronPLC,1,"" ),啟動設備構件“OmronPLC”開始工作
2.批評讀取指令
ReadPV( 寄存器名稱, 起始地址,數據類型,數據個數n,數據1 [,返回狀態])
3.使用實例
!SetDevice( 設備0,6,"ReadPV(4,10,WUB,5,Data00, 返回值)")表示讀取4 區寄存器從地址10 開始的5 個16 位無符號數值,放入MCGS 變量Data00 為起始,連續5 個變量( 即:Data00,Data01,Data02,Data03,Data04) 中,結果存入變量“返回值”中。
三、批量讀取modbus數據的實現方法
1、使用串口軟件創建兩個互聯的串口COM1和COM2,如圖所示
圖1 串口軟件創建的互聯串口
2、啟動仿真PLC工具Modsim,並通過COM1(POTR1)連接,寄存器區域:保持寄存器區,設備地址:1,起始地址:40001,長度:10,將部分寄存器設置為隨機數。如圖所示
圖2 Modsim設置
3、MCGS組態軟件組態
(1)、在設備窗口中,組態設備及其端口,如圖所示
圖3 設備組態1
(2)、設置通用串口父設備端口為COM2口,波特率與仿真PLC的端口一直,如圖所示
圖4 父設備串口設置
(3)、父設備下的子設備設置,本實例中名稱為“設備1”,並設置好設備1的相關參數,如設備地址,採樣週期等,詳細如下圖所示
圖5 設備1的設置
(4)、在運行策略中創建一個循環策略,並設置循環策略循環時間為1s,如圖所示
圖6 循環策略設置
(5)創建數據標籤:Data10~Data14,如圖所示
圖7 新建的5個變量標籤
(6)、在循環策略中用腳本編寫批量讀取指令!SetDevice( 設備1,6,"ReadPV(4,2,WB,5,Data10, )")各參數見前面指令介紹,本函數實現的是將40002寄存器開始5個符號整型數據存放在Data10~Data14中。如圖所示
圖8 批量讀數腳本
(7)、在用戶窗口中創建標籤值動態顯示畫面,並下裝運行,效果如圖所示
圖9 原始數據與批量讀數對比圖
綜上所述:MCGS實現批量讀取modbus數據的方法就介紹到這裡了。
知識分享是一種態度!歡迎讀者閱讀,並指正!