三菱FX系列plc与pc机通讯
对写命令的应答报文无数据段,而用ACK及NAK作为应答内容。
(5)传输过程
PC机与FX系列PLC之间采用应答方式通信,传输出错则组织重发。其传输过程如下: PLC根据PC机的命令,在每个循环扫描结束处的END语句后组织自动应答,无需用户在PLC一方编写程序。
4 利用VB6.0编写通信程序
下面以一个简单的例子来说明编写通信程序的要点。假设PC机要求从PLC中读入从D123开始的4个字节的数据(D123,D124),其传输应答过程及报文如下(图略可向作者索取):
命令报文中10F6H为D123的地址,04H表示要读入4个字节的数据。校验和SUM=30H+31H+30H+46H+36H+30H+34H+
03H=174H,溢出部分不计,故SUMH为'7',SUML为 4 ,相应的ASCII码为“37H”,“34H”。应答报文中4个字节的十六进制数,其相应的ASCII码为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
MSComm1.OutBufferSize = 1024
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeText MSComm1.Handshaking = comNone
MSComm1.PortOpen = True
End Sub
(2)请求通信与确认
Private Function MakeHandShaking() As Boolean
Dim InPackage As String
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
MSComm1.Output = Chr(&H5)
Do
DoEvents
Loop Until MSComm1.InBufferCount = 1
InPackage = MSComm1.Input
If InPackage = Chr(&H6) Then
MakeHandShaking = True