- 艾寶物聯IOBOV? ─ 工業無線測控專家
編寫PC的通信程序可采用匯編語言編寫,或采用各種高級語言編寫,或采用工控組態軟件,或直接采用PLC廠家的通信軟件(如三菱的MELSE MEDOC等)
下面利用VB6.0以一個簡單的例子來說明編寫通信程序的要點。假設PC要求從PLC中讀入從D123開始的4個字節的數據(D123、D124),其傳輸應答過程及報文如圖7-16所示。
圖7-16 傳輸應答過程及命令報文
命令報文中10F6H為D123的地址,04H表示要讀入4個字節的數據。校驗和SUM=30H+31H+30H+46H+36H+30H+34H+03 H=174H,溢出部分不計,故SUMH=7,SUAIL=4,相應的ASCⅡ碼為“37H”,“34H”。應答報文中4個字節的十六進制數,其相應的ASCⅡ碼為8個字節,故應答報文長度為12個字節。
根據PC與FX系列PLC的傳輸應答過程,利用VB的MSComm控件可以編寫如下通信程序實現PC與FX系列PLC之間的串行通信,以完成數據的讀取。MSComm控件可以采用輪詢或事件驅動的方法從端口獲取數據。在這個例子中使用了輪詢方法。
1)通信口初始化
Private Sub Initialize()
MSComm1.CommPort =1
MSComm1.Settings = “9600,E,7,1”
MSComm1.InBufferSize = 1024
MSComml.OutBuffersize = 1024
MSComm1.InputLen = 0
MSComml.InputMode = comInputText
MSComm1.Handshaking = comNone
MSComm1.PortOpen = True
End Sub
2)請求通信與確認
Private Function MakeHandshaking()As Boolean
Dim InPackage As String
MSComml.OutBufferCount = 0
MSComml.InBufferCount = 0
MSComml.OutPut = Chr(&H5)
Do
DoEvents
Loop Until MSComml.InBufferCount = 1
InPackage = MSComml.Input
If InPackage = Chr(&H6) Then
MakeHandShaking = True
Else
MakeHandshaking = False
End If
End Function
3)發送命令報文
Private Sub SendFrame ()
Dim Outstring As String
MSComml.OutBufferCount = 0
MSComml.InBufferCount = 0
Outstrin = Chr(&H2)+″on″+″10F604″+Chr(&H3)+″74″
MSComml.Output = Outstring
End Sub
4)讀取應答報文
Private Sub ReceiveFrame()
Dim Instring As String
Do
DoEvents
Loop Until MSComml.InBufferCount = 12
InString = MSComml.Inpult
End Sub