首页 百科知识 可编程控制器与的通信实现

可编程控制器与的通信实现

时间:2022-10-21 百科知识 版权反馈
【摘要】:PLC是以微处理器为核心的工业控制装置。在微机与PLC之间构成1∶1的通信模式。FX系列PLC和上位机的通信是以主机发出命令,PLC对其作出响应的方式进行通信的。特定的协议规定了通信的一系列请求、应答的主从过程。因此可以利用MSComm控件的OnComm事件捕获并处理这些通信事件;二是查询方式,在程序的每个关键功能之后,可以通过读取CommEvent属性的值查询通信事件和错误,作出相应的处理。

6.2.2 可编程控制器与PC的通信实现

本节主要介绍利用VB编写应用程序实现PC与PLC的通信。

PLC是以微处理器为核心的工业控制装置。它将传统的继电器控制系统与计算机技术结合在一起,具有高可靠性、适应工业过程现场以及强大的联网功能等特点,被广泛应用。VB提供MSComm控件,通过串行端口传输和接收数据,为应用程序提供程序通信功能。在微机与PLC之间构成1∶1的通信模式。该模式中PLC负责现场高速数据采集、实现逻辑、定时、计数、PID调节等控制任务,并通过串行通信口向微机传送PLC工作状态及有关数据,从而实现计算机对控制系统的管理,提高PLC的控制能力。

1)PLC与PC实现通信的条件

PLC与PC只有满足如下条件,才能互联通信:

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

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

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

2)硬件连接

PLC与计算机通信主要是通过RS-232C或RS-422接口进行的。计算机上的通信接口是RS-232C接口;若PLC上的通信接口也是RS-232C接口时,PLC与计算机连接可以直接使用适配电缆进行连接,实现通信;当PLC上的通信接口是RS-422时,必须在PLC与计算机之间加一个RS-232C/RS-422的转换器(通信适配器),再用适配电缆进行连接,以实行通信。

FX系列PLC与计算机的连接主要有以下三种方法:

一是通过上位机PC的RS-232C串行接口,利用接口转换通信模块FX-232AW进行RS-232C/RS-422转换,再与PLC的RS-422编程接口连接。

二是通过在PLC内部安装的通信功能扩展板FX-232BD与PC连接。

三是通过安装在PLC内部的通信功能扩展板FX-485BD,再利用FX-485PC-IF作为RS-232C和RS-485的转换接口。前两者属于PC与PLC的1∶1通信,优点是充分利用编程口,同时在一个扫描周期内该PLC还可和其他PLC进行数据交换;后者属于PC与多PLC的1∶N通信。

除此之外,还可以通过其他市售的通用通信适配器进行连接,在此不再一一赘述。下面以PC与PLC之间点对点通信为例。

图6-12所示为由接口转换通信模块FX-232AW实现上位机PC的RS-232C串行接口与FX系列PLC的RS-422编程接口连接的示意图。由此可构成一个简单的监控系统。

img399

图6-12 PLC与上位机连接示意图

img400

图6-13 数据格式

3)FX系列PLC的通信协议

PC中必须依据所连接PLC的通信规程来编写通信协议,故需先熟悉FX系列PLC的通信协议。

(1)数据格式

FX系列PLC采用异步通信格式,由1位起始位、7位数据位、1位奇偶校验位及1位停止位组成,传输速率为9 600B/s,字符为ASCII码。数据格式如图6-13所示。

(2)上位机控制PLC的4种命令

FX系列PLC和上位机的通信是以主机发出命令,PLC对其作出响应的方式进行通信的。共有4种命令类型,分别是读命令、写命令、强制通命令、强制断命令,如表6-3所示。通过这4种命令,上位机实现对PLC的监控和数据的读/写。

表6-3 命令种类

img401

表中,X为输入继电器;Y为输出继电器;M为辅助继电器;S为状态继电器;T为定时器;C为计数器;D为数据寄存器。

(3)通信控制字符

通信控制字符是指计算机与PLC之间通信时发出命令或应答的格式。特定的协议规定了通信的一系列请求、应答的主从过程。这些请求、应答是以特定的控制字符开头的,上位机PC与PLC通信的通信控制字符如表6-4所示。

表6-4 FX系列通信控制字符表

img402

(4)通信帧格式

在进行通信时,计算机和PLC之间是以帧为单位交换信息的,其中控制字符ENQ、ACK、NAK是按单字符帧发送和接收的,其余的信息都是由字符STX、命令字、数据、字符ETX和校验五部分组成。命令字可以为“30H”、“31H”、“37H”、“38H”等,分别代表对PLC相关单元的读、写、置位和复位操作,相关单元为X、Y、M、S、T、C,而读/写还可对D数据寄存器进行操作。校验是在信息帧的最后,用来判别传输是否正确。由于计算机和PLC一般都是点对点传输距离较短,出错的概率较小,所以一般采用和校验法,就能基本满足要求。

①PC向PLC发送的命令帧格式如表6-5所示。

表6-5 PC发送的命令帧格式

img403

表6-5中STX为开始标志:02H;ETX为结束标志:03H;CMD为命令的ASCII码;SUMH、SUML为从CMD到EXT所有字符的ASCII码按字节累加求和所得和的最低2位数,溢出不计。由于每字节十六进制数变为2字节的ASCII码,故和校验为SUMH与SUML。注意读命令无数据段。

②PLC向PC发的应答帧格式如表6-6所示:数据段为要读取的数据,1个数据占2字节,分高位和低位。

表6-6 PLC应答帧格式

img404

PLC对PC写命令的应答报文无数据段,而用ACK(06H)或NAK(15H)作应答。

读、写数据时,STX为正确帧的开始标志,ETX为正确帧的结束标志,如果上位机接收到的帧的第一个字符是NAK时,说明信息的传输发生异常,上位机将发送与上次相同的信息,反复N次仍然接收到NAK错误应答标志时,上位机强制结束本次传输,错误代码给出错误的原因和相应的解决方法。

4)VB中的MSComm串行通信控件

Microsoft Visual Basic(以下简称VB)以其方便的界面设计和良好的开发环境,在实际的工程应用中得到了广泛的应用。VB中的MSComm是进行串行通信的控件,该控件屏蔽了通信过程中的底层操作,程序员只需设置和监视MSComm控件的属性和事件,就可以轻易地实现串行异步通信,具有十分完善的串行数据发送和接收功能,其实用性强,功能完善,是实现计算机与外部设备数据交换的强有力工具。

MSComm控件提供了两种处理通信的方式:一是事件驱动通信,它是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知。因此可以利用MSComm控件的OnComm事件捕获并处理这些通信事件;二是查询方式,在程序的每个关键功能之后,可以通过读取CommEvent属性的值查询通信事件和错误,作出相应的处理。

使用MSComm控件时,首先要在VB环境中添加该部件(即在部件对话框的控件列表中选中Microsoft Comm Control选项),接下来在VB工具箱中将出现一个MSComm控件,选中该控件,再置放到窗体上,才能在程序中使用。

串行通信控件MSComm与PLC通信有关的主要属性:

CommPort:指定用计算机的哪个RS 232串口通信,缺省值为COM1,可设置1~16个,还需注意的是必须在打开端口之前设置CommPort属性;

Settings:设定串口的波特率、奇偶校验及停止位等特性,其中波特率的范围为300~19 200bit/s。此设定应与PLC的设定一致,对于FX系列PLC,Settings属性的设置值为“9 600,e,7,1”,表示波特率9 600bit/s、偶校验、7个数据位、1个停止位;

PortOpen:设置并返回通信口的状态,同时用来打开和关闭通信口,它是一个布尔值,即取值范围为True或False,进行通信时的串口必须打开,否则,不能进行通信;

InPut:把输入缓冲器的内容读到指定的字符变量中,读后缓冲器的内容清零,缓冲器的大小可设,最大为2~4KB,通过置0可清除接收缓冲区;

OutPut:把输出的命令送输出缓冲区,并向指定的通信对象发送,直到缓冲区空;

InputMode:设置并返回Input属性传输的数据类型;

InputLen:用于指定由串行通信端口读入的字符串长度,默认值是0,此值会使得Input命令一次读取所有输入缓冲区中的数据。

5)通信部分例程

(1)计算和校验函数SUM例程

为确保PC和PLC传输的信息准确无误,根据通信协议,上位机也必须进行相应的和校验,现提供一个用于和校验的自定义的函数,该函数将对PLC输出的命令字符串或从PLC读出的数据进行和校验计算,并返回和校验的结果,如果校验错误,则输出校验错误信息,InorOutstr为命令字符串或是从PLC返回的信息串。Function SUM(By Val InorOutstr As String)As String

DimSlen,t,Sum1As Integer     ′定义变量

Dim TempSUM As String

Slen=Len(InorOutstr)      ′求字符串的长度

Sum1=0

For t=2to Slen 2         ′只将字符串InorOutstr和校验区的数据相加

Sum1=Sum1+ASC(Mid$(InorOutstr,t,1))

Next t

TempSUM=HEX$(Sum1)      ′将和转换为十六进制

If Len(TempSUM)=3Then TempSUM=Mid$(TempSUM,2,2)

                 ′如果转换的结果达到3位,则只计最后2位

 End If

If Mid$(TempSUM,1,1)=Mid$(InorOutstr,Slen-1,1)

 AND

Mid$(TempSUM,2,1)=Mid$(InorOutstr,Slen,1)

Then

SUM=TempSUM           ′如果TempSUM和InorOutstr的对应位相等,则和校验成功

Else SUM=“和校验错误”

End If

End Function

(2)从PLC中读出数据

例如从Y0开始读2字节数据(Y0~Y7,Y10~Y17),查装置地址表知所在的软继电器首地址为00A0,由此开始读取2字节数据,则主机发送的命令格式为:

img405

由于30H+30H+30H+41H+30H+30H+32H+03H=166H,溢出部分“1”不计,故SUMH=6,SUML=6,相应的ASCII码为“36H”、“36H”。

假设Y0~Y7,Y10~Y17的状态如下(1=ON,0=OFF):

img406

则PLC返回的信息为:

img407

如果传送的命令有错误,则PLC返回NAK信号,本次操作失败。

在窗体1中已放入一名为MSComm1的通信控件,用VB实现上述过程,则程序如下:Private Sub READ()

Dim Str,Var As Sring   ′定义变量

Dim t%

MSComm1.PortOpen=True    ′打开串口

Str=CHR$(2)+“000A00266”

Str=Str+SUM(Str)      ′形成命令行

MSComm1.InBuffer=0      ′清缓冲区

MSComm1.Output=Str      ′向PLC发送命令

t=0

Do               ′循环等待

  DoEvents

  t=t+1

Loop Until MSComm1.InBufferCount≥8or t>8000

Var=MSComm1.Input       ′读PLC返回的数据

If SUM(Var)=“和校验错误” ′调用自定义SUM(),对读出的数据进行校验

  THEN Form1.print“读出的数据错误!”

End Sub

有关其他命令(如写命令和单点强迫置位、复位)的使用,可仿照以上例子进行。

另有关界面的设计、通信端口的初始化设置等可参看有关VB及MSComm通信等资料。

(3)通信协议

计算机与PLC之间采用主从应答方式,计算机始终具有传送优先权,根据需要向PLC发出读/写命令;下位机PLC处于被动状态响应上位机PC的命令。上位机读数据时通过通信口向PLC发出读数据命令,PLC响应命令并将数据传回上位机,上位机通过读通信口即可取得所需数据;写数据时,上位机通过通信口向PLC发出写命令及数据,PLC即可接收。当PLC没能正确响应时,PLC返回相应标志。此外PLC通信模块还有其他命令代码,上位机发出不同的命令,PLC便能做出相应的响应。

为了使计算机和PLC建立起正确的通信,下位机PLC中除监控被控对象的应用程序外,还必须对PLC中与通信有关的有关特殊寄存器D8120、D8121和D8129作相应设置。如图6-14所示。

img408

图6-14 PLC的通信设置

D8120用来设置通信格式包括数据长度、校验形式、波特率和协议方式等;D8121用来设置站号,设置范围为00H~0FH;D8129用来设置校验时间。

通信格式采用D8120来进行设置,D8120是一个16位的特殊数据寄存器,通过对其设定来判定和计算机通信的详细协议,在D8120中分别把数据长度、奇偶校验、波特率等参数设定后,就决定了计算机与PLC的通信格式;多台PLC连接时,还要由D8121特殊寄存器设置PLC的站点号;D8129设置检验时间,检验时间指的是当从计算机向PLC传送数据失败时,计算机从传送开始至接收最后一个字符所等待的时间,其单位为10ms。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈