本例程是由施耐德codesys平臺的plc m218與abb變頻器 acs510的modbus/rtu通訊,由plc寫入運行頻率,并讀取實際頻率,電機電流。變頻器的啟動,停止則使用硬接線。大家可以思考一下,為什么要這么做。ps:此程序我已經在某工程項目中使用過,絕對可行,你可以私信“modbus” 獲取。軟件平臺somachine v4.3。
1 接線
modbus的接線比較簡單,就是正對正,負對負,如果你接錯了也沒關系,不會燒壞硬件的。我們分別看一下手冊中的介紹
圖一 acs510變頻器modbus接線
圖二 tm218plcmodbus接線
如上圖所示,圖一是abb的端子圖,圖二是施耐德的端子圖,施耐德plc一般有兩個獨立的串口,這里我們使用串口2。
需要注意的是,圖中黃色熒光筆部分,abb 是b正a負,而施耐德是a正b負。所以,接線是a對b,b對a.
2 配置
配置,注意是設置各項與通訊有關的參數,主要是指地址,波特率,校驗等。
圖三 plc側設置參數
如圖三所示,在plc 的硬件樹里找到串行線路2,雙擊modbus_manager,就是圖中黃色熒光筆的部分,打開plc 的modbus配置
圖四 施耐德plcmodbus配置
如圖四所示,黃色熒光筆部分是設置通訊模式為rtu,我們要用plc去讀取變頻器,所以plc是主站。紅色圓圈部分是通訊參數設置。
3 變頻器參數設置
變頻器主要設置如下參數
圖五 abb變頻器參數設置
變頻器參數設置的重點就是紅色圓圈部分,要保證和plc側一致,否則,你是通訊不上的。
4程序編寫
重點來了,程序主要是使用三個功能塊 addm read_var write_var,他們的功能分別是地址轉換,寫入變量,讀取變量。
addm,用于把modbus 的地址轉化成plc可以識別的地址,這個功能塊可以認為是用戶和plc底層的一個交互,可以不用理解,而且這個貌似是施耐德獨有的機制,因為在施耐德 的unity中(非codesys平臺)也是用這個功能塊。
read_var,writer_var,才是我們要真正使用的,它的作用就是寫入和讀取變量,看程序
圖六 cfc編寫的modbus通信程序
如圖六所示,是程序的全貌,程序實在太大了,大家可能要費點眼神了,黃色熒光筆部分是程序的啟動按鈕,當變量com_en產生一個上升沿時,程序就會自動執(zhí)行。最后面紅色大圓圈就是我們需要的結果。讀取或寫入的數據是放在數組里的,當你交互的數據是連續(xù)的時候,就很方便了。
其實,cfc的精髓就是可以自由移動,就像電路圖一樣,像通訊程序中,由于前后功能塊需要聯系,我們就需要中間變量來傳遞,而直接使用連線,省去了建立中間變量的麻煩。而歐系plc對通訊的處理也很簡單,不需要復雜的編程,配置參數都采用設置的方式,只需要在功能塊中指定地址和數量,就可以輕松交互數據。為了方便大家看清楚,程序我分段放大
看上面三個圖,小的紅圈是使用的功能塊,而大的紅圈就是通訊的結果。
總結:modbus是一種性價比相當高的通迅解決方案,大家可以嘗試使用,它比使用模擬量的優(yōu)勢不言而喻。節(jié)省配線,傳遞的信息量大,又可以有效節(jié)約成本,提升設備檔次。