利用VB的MSComm控件编程实现PC与三菱PLC FX系列通信
2017-09-30  来源:www.plc100.com

    编写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