PC机与PLC串行通信的实现
2024-02-10  来源:网络或本站原创

Serial Communication between Personal Computer and PLC

(北京航空航天大学    宗光华

Li,Geng  Zhong,Guanghua

摘要:本文对FX系列PLC的通信协议进行了详细的介绍,并以VB为开发工具实现了PC机与FX系列PLC的串行通信。

关键词: PLC ;串行通信;VB6.0

 

Abstract;This paper introduces the communication protocol of FX series PLC and achieves serial communication between PC and FX serial PLC.

KeywordsPLC; Serial Communication ;VB6.0

 

前言

PLC以卓越的可靠性和方便的可编程性广泛应用于工业控制领域。实现PC机与PLC通信的目的是为了向用户提供诸如工艺流程图显示、动态数据画面显示、报表显示、窗口技术等多种功能,为PLC提供良好的人机界面。本文详细介绍了FX系列PLC的通信协议,并在Windows环境下,使用VB6.0开发通信程序,实现了PC机与FX系列PLC之间的串行通信。

PC机与PLC实现通信的条件

带异步通信适配器的PC机与PLC只有满足如下条件,才能互联通信:

(1)带有异步通信接口的PLC才能与带异步通信适配器的PC机互联。还要求双方采用的总线标准一致,否则要通过“总线标准变换单元”变换之后才能互联。

(2)双方的初始化,使波特率、数据位数、停止位数、奇偶校验都相同。

(3)要对PLC的通信协议分析清楚,严格地按照协议的规定及帧格式编写PC机的通信程序。PLC中配有通信机制,一般不需用户编程。

  PC机及与FX系列PLC的串行通讯

3.1 硬件连接

PC机与FX系列PLC不能直接连接,要经过FX-232AW单元进行RS232C/RS-422的变换,下图表示了它们之间的连接关系:

3.2 FX系列PLC的通信协议

在PC机中必须依据互联的PLC的通信协议来编写通信程序,因此先介绍FX系列PLC的通信协议。

(1)数据格式

FX系列PLC采用异步格式,由1位起始位、7位数据位、1位偶校验位及1位停止位组成,波特率为9600bps,字符为ASCII码。格式如下:

 

(2)通信命令

FX系列PLC有4个通信命令,它们是读命令、写命令、强制通命令、强制断命令,如下表所示。表中X—输入继电器;Y—输出继电器;M—辅助继电器;S—状态元件;T—定时器;C—计数器;D—数据寄存器。

(3)通信控制字符

FX系列PLC采用面向字符的传输规程,用到5个通信控制字符,如下表所示。

*当PLC对PC机发来的ENQ不理解时,用NAK回答。

(4)报文格式

PC机向PLC发送的报文格式如下:

其中STX为开始标志:02H;ETX为结束标志:03H;CMD为命令的ASCII码;SUMH,SUML为从CMD到ETX按字节求累加和,溢出不计。由于每字节十六进制数变为两字节ASCII代码,故校验和为SUMH与SUML。

数据段格式与含义如下:

*写命令的数据段有数据,读命令的数据段则无数据。

读/写字节数为01H~40H(1~64)个。

PLC向PC机发送的应答报文格式如下:

*对读命令的应答报文数据段为要读取的数据,一个数据占两个字节,分上位下位:

对写命令的应答报文无数据段,而用ACK及NAK作为应答内容。

(5)传输过程

PC机与FX系列PLC之间采用应答方式通信,传输出错则组织重发。其传输过程如下:

PLC根据PC机的命令,在每个循环扫描结束处的END语句后组织自动应答,无需用户在PLC一方编写程序。

利用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

MSComm1.Settings ″9600,,,1″

MSComm1.InBufferSize 1024

MSComm1.OutBufferSize 1024

MSComm1.InputLen

MSComm1.InputMode comInputModeText

MSComm1.Handshaking comNone

MSComm1.PortOpen True

End Sub

(2)请求通信与确认

Private Function MakeHandShaking() As Boolean

Dim InPackage As String

MSComm1.OutBufferCount

MSComm1.InBufferCount

MSComm1.Output Chr(&H5)

Do

DoEvents

Loop Until MSComm1.InBufferCount

InPackage MSComm1.Input

If InPackage Chr(&H6) Then

MakeHandShaking True

Else

MakeHandShaking FalseEnd If

End Function

(3)发送命令报文

Private Sub SendFrame()

Dim OutString As String

MSComm1.OutBufferCount

MSComm1.InBufferCount

OutStrin Chr(&H2)+″0″+″10F604″+Chr(&H3)+″74″

MSComm1.Output OutString

End Sub

(4)读取应答报文

Private Sub ReceiveFrame()

Dim InString As String

Do

DoEvents

Loop Until MSComm1.InBufferCount 12

InString MSComm1.Input

End Sub

结束语

以本文所述机制编写的通信程序已成功用于以FX2N型PLC作为主控制器的高层建筑玻璃幕墙清洗机器人系统中,通过该通信程序,实现了PC机对PLC的监视和控制。同时,本程序对PC机与其它型号PLC之间的通信也有一定的借鉴意义。

参考文献

[]FX2N可编程控制器编程手册

[]FX-232AW RS422 TO RS232C INTERFACE UNIT

[]Visual Basic 6从入门到精通,电子工业出版社

[]可编程控制器网络通信及应用,清华大学出版社

作者简介:李耿,男,1975年出生,现为北京航空航天大学机械工程学院硕士研究生,主要进行高层建筑玻璃幕墙清洗机器人系统的研究与开发。电话:010-82314554,E-mail:bjlg@sina.com

(100083   北京航空航天大学机器人研究所)李    宗光华