V B与三菱P L C通信
VB源代码下载
PLC以卓越的可靠性和方便的可编程性广泛应用于工业控制领域。实现PC机与PLC通信的目的是为了示、窗口技术等多种功能,为PLC提供良好的人机界面。本文详细介绍了FX系列PLC的通信协议,并现了PC机与FX系列PLC之间的串行通信。本文对FX系列PLC的通信协议进行了详细的介绍,并以
1前言
PLC以卓越的可靠性和方便的可编程性广泛应用于工业控制领域。实现PC机与PLC通信的目的是为了示、窗口技术等多种功能,为PLC提供良好的人机界面。本文详细介绍了FX系列PLC的通信协议,并现了PC机与FX系列PLC之间的串行通信。
2PC机与PLC实现通信的条件
带异步通信适配器的PC机与PLC只有满足如下条件,才能互联通信:
(1)带有异步通信接口的PLC才能与带异步通信适配器的PC机互联。还要求双方采用的总线标准一致
(2)双方的初始化,使波特率、数据位数、停止位数、奇偶校验都相同。
(3)要对PLC的通信协议分析清楚,严格地按照协议的规定及帧格式编写PC机的通信程序。PLC中
3PC机及与FX系列PLC的串行通讯
3.1硬件连接
PC机与FX系列PLC不能直接连接,要经过FX-232AW单元进行RS232C/RS-422的
3.2FX系列PLC的通信协议
在PC机中必须依据互联的PLC的通信协议来编写通信程序,因此先介绍FX系列PLC的通信协议。
(1)数据格式
FX系列PLC采用异步格式,由1位起始位、7位数据位、1位偶校验位及1位停止位组成,波特率为9
(2)通信命令
FX系列PLC有4个通信命令,它们是读命令、写命令、强制通命令、强制断命令,如下表所示。表中X元件;T—定时器;C—计数器;D—数据寄存器。
(3)通信控制字符
FX系列PLC采用面向字符的传输规程,用到5个通信控制字符,如下表所示。
*当PLC对PC机发来的ENQ不理解时,用NAK回答。
(4)报文格式
PC机向PLC发送的报文格式如下:
其中STX为开始标志:02H;ETX为结束标志:03H;CMD为命令的ASCII码;SUMH,于每字节十六进制数变为两字节ASCII代码,故校验和为SUMH与SUML。
数据段格式与含义如下:
*写命令的数据段有数据,读命令的数据段则无数据。
读/写字节数为01H~40H(1~64)个。
PLC向PC机发送的应答报文格式如下:
*对读命令的应答报文数据段为要读取的数据,一个数据占两个字节,分上位下位:
对写命令的应答报文无数据段,而用ACK及NAK作为应答内容。
(5)传输过程
PC机与FX系列PLC之间采用应答方式通信,传输出错则组织重发。其传输过程如下:
PLC根据PC机的命令,在每个循环扫描结束处的END语句后组织自动应答,无需用户在PLC一方编
4利用VB6.0编写通信程序
下面以一个简单的例子来说明编写通信程序的要点。假设PC机要求从PLC中读入从D123开始的4个下(图略可向作者索取):
命令报文中10F6H为D123的地址,04H表示要读入4个字节的数据。校验和SUM=30H+3
03H=174H,溢出部分不计,故SUMH为'7',SUML为‘4’,相应的ASCII码为“3相应的ASCII码为8个字节,故应答报文长度为12个字节。
根据PC机与FX系列PLC的传输应答过程编制出如下所示的通信程序流程图略。
利用VB的MSComm控件,按照流程图可以编写如下通信程序实现PC机与FX系列PLC之间的串行件驱动的方法从端口获取数据。在这个例子中使用了轮询方法。
(1)通信口初始化
PrivateSubInitialize()
MSComm1.CommPort=1
MSComm1.Settings=″9600,E,7,1″
MSComm1.OutBufferSize=1024
MSComm1.InputLen=0
MSComm1.InputMode=comInputModeText
MSComm1.Handshaking=comNone
MSComm1.PortOpen=True
EndSub
(2)请求通信与确认
PrivateFunctionMakeHandShaking()AsBooleanDimInPackageAsString
MSComm1.OutBufferCount=0
MSComm1.InBufferCount=0
MSComm1.Output=Chr(&H5)
Do
DoEvents
LoopUntilMSComm1.InBufferCount=1
InPackage=MSComm1.Input
IfInPackage=Chr(&H6)Then
MakeHandShaking=True
Else
MakeHandShaking=FalseEndIf
EndFunction
(3)发送命令报文
PrivateSubSendFrame()
DimOutStringAsString
MSComm1.InBufferCount=0
OutStrin=Chr(&H2)+″0″+″10F604″+Chr(&H3)+″74″
MSComm1.Output=OutString
EndSub
(4)读取应答报文
PrivateSubReceiveFrame()
DimInStringAsString
Do
DoEvents
LoopUntilMSComm1.InBufferCount=12
InString=MSComm1.Input
EndSub
5结束语
以本文所述机制编写的通信程序已成功用于以FX2N型PLC作为主控制器的高层建筑玻璃幕墙清洗机器控制。同时,本程序对PC机与其它型号PLC之间的通信也有一定的借鉴意义。
下面是我自己写的一个VB与三菱FX系列PLC通讯的软件,如果想学习的可以下下来看看,下载地址在下面
要源代码的留下邮箱!有什么不懂得也可以给我留言。我会做出解答的。
下载地址