3.利用VB编程实现PC与三菱PLC通信

编写PC的通信程序可采用汇编语言编写,或采用各种高级语言编写,或采用工控组态软件,或直接采用PLC厂家的通信软件(如三菱的MELSE MEDOC等)

下面利用VB6.0以一个简单的例子来说明编写通信程序的要点。假设PC要求从PLC中读入从D123开始的4个字节的数据(D123D124),其传输应答过程及报文如图7-16所示。

7-16 传输应答过程及命令报文

命令报文中10F6HD123的地址,04H表示要读入4个字节的数据。校验和SUM30H31H30H46H36H30H34H03 H174H,溢出部分不计,故SUMH=7SUAIL=4,相应的ASC码为“37H”,“34H”。应答报文中4个字节的十六进制数,其相应的ASC码为8个字节,故应答报文长度为12个字节。

根据PCFX系列PLC的传输应答过程,利用VBMSComm控件可以编写如下通信程序实现PCFX系列PLC之间的串行通信,以完成数据的读取。MSComm控件可以采用轮询或事件驱动的方法从端口获取数据。在这个例子中使用了轮询方法。

1)通信口初始化

Private Sub Initialize()

MSComm1CommPort =1

MSComm1Settings = “9600,E,7,1”

MSComm1InBufferSize = 1024

MSCommlOutBuffersize = 1024

MSComm1InputLen = 0

MSCommlInputMode = comInputText

MSComm1Handshaking = comNone

MSComm1PortOpen = True

End Sub

2)请求通信与确认

Private Function MakeHandshaking()As Boolean

Dim InPackage As String

MSCommlOutBufferCount = 0

MSCommlInBufferCount = 0

MSCommlOutPut = Chr(&H5

Do

DoEvents

Loop Until MSCommlInBufferCount = 1

InPackage = MSCommlInput

If InPackage = Chr(&H6 Then

MakeHandShaking = True

Else

MakeHandshaking = False

End If

End Function

3)发送命令报文

Private Sub SendFrame ()

Dim Outstring As String

MSCommlOutBufferCount = 0

MSCommlInBufferCount = 0

Outstrin = Chr(&H2)+on10F604Chr(&H3)+74

MSCommlOutput = Outstring

End Sub

4)读取应答报文

Private Sub ReceiveFrame()

Dim Instring As String

Do

DoEvents

Loop Until MSCommlInBufferCount = 12

InString = MSCommlInpult

End Sub