劉瑞通
(一汽解放汽車有限公司 車橋分公司,吉林 長春 130011)
MX Component是三菱電機自動化公司發(fā)布的第三方通信軟件包,可以通過簡單方法實現(xiàn)從計算機至可編程控制器的通信[1]。
本文主要對基于MX Component的PC與PLC以太網(wǎng)通訊方法進行研究。
邏輯站號可以設(shè)置的范圍為0~1 023,邏輯站號不可重復使用。打開Communication Setup Utility軟件,選擇”Target Setting”選項卡,點擊”Wizard”按鈕,設(shè)置Logical station number。
在“PC side I/F”中選擇“Ethernet board”,使用以太網(wǎng)通信、網(wǎng)關(guān)功能通信;在“Connect module”中選擇“CPU module”;在“Protocol”中選擇“TCP”。
首先為PLC設(shè)定固定IP,將PLC通過網(wǎng)線連入PC所在的局域網(wǎng)中,其次為PLC接通電源,然后設(shè)置相關(guān)參數(shù):“PLC side I/F”中選擇“CPU module”,Host(IP Address)通過“Find CPU(Buitt-in Ethernet port) on network”按鈕瀏覽能使用的終端IP,如果沒有瀏覽到可以直接寫入為PLC設(shè)置的固定IP。
Station type選擇“Host station”。
CPU type選擇“Q03UDE”(此CPU類型可根據(jù)實際使用CPU類型進行設(shè)置),Multiple CPU 選擇“None”。
在“Comment”寫入注釋內(nèi)容,完成設(shè)置,如圖1所示。
圖1 參數(shù)設(shè)置
完成設(shè)置后,測試連接,結(jié)果如圖2所示。
本節(jié)主要介紹基于VB.NET的編程方法。
(1) 添加引用。在VB.NET程序工程引用中添加ActUtlTypeLib。
(2) 定義全局變量:
Public comUtlType As ActUtlTypeLib.ActUtlType
(3) 實例化ActUtlTypeLib.ActUtlType對象,代碼如下所示:
comUtlType = New ActUtlTypeLib.ActUtlType
AddHandler comUtlType.OnDeviceStatus, AddressOf comUtlType_OnDeviceStatus
(4) 設(shè)置邏輯端口,此邏輯端口需要和本文1.1中設(shè)置的MX Component邏輯站號保持一致,才能保證通信的順利進行。設(shè)置邏輯端口代碼如下所示:
comUtlType.ActLogicalStationNumber = mLogicalStationNumber
(5) 打開ult服務(wù):
iReturnCode = comUtlType.Open()
圖2 測試結(jié)果
此功能通過指定所需讀取的所有軟元件名和讀取的點數(shù)進行軟元件值的隨機讀取。軟元件隨機讀取代碼如下:
Private Function BitRead(ByVal szDeviceName As String(), ByRef iReturnCode As Integer) As Short()
Dim iNumberOfDeviceName As Integer
Dim strDeviceName As String
iReturnCde = 1
strDeviceName = String.Join(vbLf, szDeviceName)
iNumberOfDeviceName = szDeviceName.Length
Dim sharrDeviceValue(iNumberOfDeviceName - 1) As Short '軟元件數(shù)
iReturnCode = comUtlType.ReadDeviceRandom2(strDeviceName,iNumberOfDeviceName, sharrDeviceValue(0))
Return sharrDeviceValue
End Function
此功能通過指定所需寫入的軟元件名、寫入的點數(shù)及相應(yīng)軟元件的值進行軟元件的隨機寫入。軟元件隨機寫入代碼如下:
Private Function BitWrite(ByVal szDeviceName As String(), ByVal sharrDeviceValue As Short()) As Integer
Dim iReturnCode As Integer = 1
Dim iNumberOfDeviceName As Integer
Dim strDeviceName As String
iNumberOfDeviceName = szDeviceName.Length
strDeviceName = String.Join(vbLf, szDeviceName)
iReturnCode = comUtlType.WriteDeviceRandom2 (strDeviceName, iNumberOfDeviceName, sharrDeviceValue(0))
Return iReturnCode
End Function
此功能通過指定軟元件名和讀取的點數(shù)進行軟元件值的批量讀取。軟元件批量讀取代碼如下:
Private Function DataRead(ByVal szDeviceName As String, ByVal iNumberOfDeviceName As Integer, ByRef iReturnCode As Integer) As
Short()
Dim sharrDeviceValue(iNumberOfDeviceName - 1) As Short '軟元件數(shù)
iReturnCode = comUtlType.ReadDeviceBlock2(szDeviceName, iNumberOfDeviceName, sharrDeviceValue(0))
Return sharrDeviceValue
End Function
此功能通過給出軟元件名、寫入的點數(shù)及相應(yīng)軟元件的值進行軟元件的批量寫入。軟元件批量寫入代碼如下:
Private Function DataWrite(ByVal szDeviceName As String, ByVal sharrDeviceValue As Short()) As Integer
Dim iReturnCode As Integer = 1
Dim iNumberOfDeviceName As Integer
iNumberOfDeviceName =harrDeviceValue.Length
iReturnCode =comUtlType.WriteDeviceBlock2( szDeviceName, iNumberOfDeviceName, sharrDeviceValue(0))
Return iReturnCode
End Function
此功能可以利用軟件在PLC上注冊事件,然后調(diào)用事件對PLC軟元件進行監(jiān)控,當軟元件的值發(fā)生變化時,自動調(diào)用事件處理函數(shù)進行事件處理。注冊事件能夠?qū)崿F(xiàn)PLC主動上傳信息、上位機及時捕捉到PLC狀態(tài)變化信息并進行處理,減少PC機因采用輪詢方式造成的CPU占用。注冊事件代碼如下所示:
(1) 打開ult服務(wù):
comUtlType.Open()
(2) 調(diào)用注冊事件:
Dim lData(0) As Integer
lData(0) = 1
comUtlType.EntryDeviceStatus("M0", 1, 1, lData)
上述設(shè)置中當“M0”狀態(tài)發(fā)生變化時,將觸發(fā)事件處理函數(shù)。
(3) 事件處理函數(shù):
Private Sub comUtlType_OnDeviceStatus(ByVal szDevice As String, ByVal iData As Integer, ByVal iReturnCode As Integer)
HandleFunction() '自定義處理函數(shù)
End Sub
(4) 關(guān)閉ult服務(wù):
comUtlType.Close()
在軟元件隨機讀取、軟元件隨機寫入、軟元件批量讀取、軟元件批量寫入的過程中返回代碼iReturnCode為非0x0時,需要重新啟動ult服務(wù)。
本文介紹了MX Component在使用過程中的設(shè)置方法和幾種基于VB.NET編程軟件的常用函數(shù)編程方法,為將PLC控制的生產(chǎn)設(shè)備連接到上位機提供了一種簡單方法。
參考文獻:
[1] 程曉鵬,劉園,任素利,等.基于MX Component的PC—PLC通訊設(shè)計[J].福建電腦,2014(3):34-35.
[2] 三菱電機自動化(中國)有限公司.MX Component軟件介紹 [CP/OL].2015-04-10/2016-09-02.http://cn.mitsubishielectric.com/fa/zh/download/dwn_idx_softwareDetail.asp?sid=45.