首页 理论教育 掌握通信技巧,提升平台效率

掌握通信技巧,提升平台效率

时间:2023-06-23 理论教育 版权反馈
【摘要】:PLC利用PLC网络平台与计算机通信也多是协议通信。End为返回码,占2个字节,反映命令执行的情况,如00为正常执行。字节中00位表示指定为数据,01位表示强制状态。图7-59a、7-59b所示格式用于计算机串行接口与PLC串行接口通信命令及响应,图7-59c、7-59d所示格式用于计算机串行接口与连接网络上的PLC通信命令及响应。

掌握通信技巧,提升平台效率

PLC利用PLC网络平台与计算机通信也多是协议通信。OMRON PLC主要是用FINS(Factory Interface Network Service)协议,也称信息服务通信命令(Message Service Communi-cations Commands),此外,还可运用数据链接通信。

1.FINS协议要点

FINS通信命令可用以不同的控制操作,如发送及接收数据、改变PLC的工作模式、强制置位与复位、文件操作等等。它是应用层的协议,所以可用于不同网络。只是如果用于以太网或串行接口平台,其命令及响应帧要增加相应的头部(headers)及尾部。

图7-57a所示为FINS命令帧格式。图7-57b所示为FINS响应帧格式。

这里,ICF(Information Control Field,信息控制域)一个字节,其取值见图7-57c。RSV(Reserved,保留字节)常为00;GCT(Gateway Count:Number of Bridges Passed Through,历经网络数)常为02hex;DNA(Destination network address,目标网络地址)在00(本地网络号)~7F(127)选定;DA1(Destination node address,目标节点地址)在00(PLC内部通信)~20hex之间选定,如选FFhex,为广播传送;DA2(Destination unit address,目标单元地址)在00(CPU单元)~FEhex之间选定。SNA(Source network address,源网络地址)在00(本地网络)~7Fhex之间选定。SA1(Source node address,源节点地址)在00(PLC内部通信)~20hex之间选定。SA2(Source unit ad-dress,源单元地址)在00(CPU单元)及10hex~1Fhex(CPU总线单元地址,为10hex+单元号)之间选定。SID(ServiceID,服务ID)用以指定生成的过程,在00~FFhex之间选定。命令码占2个字节,不同取值有不同含义,见表7-13。Text为参数,有地址,有数据,多少字节取决于命令码。End为返回码,占2个字节,反映命令执行的情况,如00为正常执行。

978-7-111-26319-7-Chapter07-116.jpg

图7-57 FINS格式

a)FINS命令帧格式 b)FINS响应帧格式 c)ICF格式

FINS命令码很多。表7-13所示为FINS部分命令码及其含义。命令码高字节为MR(Main,主),低字节为SR(Sub,辅)。如MR01为I/O内存区访问。而怎么访问由SR确定。从表知,它有5种访问方式:读、写、填充、多处读及传送。

7-13 FINS部分命令码及其含义

978-7-111-26319-7-Chapter07-117.jpg

在命令帧中,参数用到的地址很多,且与PLC型号有关。表7-14所示为部分CS、CJ型PLC地址代号。

从表知,参数占4个字节。数据或操作类型一个字节,地址编号3个字节。头2个字节为字地址,取值为0到字可能的最大的地址,后一个字节为位地址,取值为0~F。所有地址值都是用十六进制数。

在参数中,数据值的指定或表示,位用1个字节,01hex为ON,00hex为OFF;字用十六进制数,按实际数表示。数据强制时,每个位作为一个元素。每一元素用一个字节表示。字节中00位表示指定为数据,01位表示强制状态。字也可强制写。返回码也是分有主辅2个部分。表7-15所示为部分返回码及含义。

7-14 部分CS/CJPLC地址代号

978-7-111-26319-7-Chapter07-118.jpg

7-15 部分返回码及含义

978-7-111-26319-7-Chapter07-119.jpg

图7-58所示为一组命令帧与响应帧实例。图7-58a为命令,7-58b为响应。

本命令含义是读PLC DM000A开始的10个字数据。返回码为00,意即命令已正确执行,并返回所读10个字数据。

FINS协议相比HostLink协议,功能要强的多,如可进行“位”操作,可进行4位以上地址字(如DM10000)操作,可在运行模式可修改数据,帧长度可达1000个字符,可跨网络中继操作等。

对CS、CJ、CP型PLC,FINS命令还可在串行接口平台使用。但在上述格式的基础上,要增加头及尾,如图7-59所示。这也称为FINSC模式。

图7-59a、7-59b所示格式用于计算机串行接口与PLC串行接口通信命令及响应,图7-59c、7-59d所示格式用于计算机串行接口与连接网络上的PLC通信命令及响应。

978-7-111-26319-7-Chapter07-120.jpg

图7-58 一组FINS命令帧与响应帧实例

a)命令 b)响应

978-7-111-26319-7-Chapter07-121.jpg

图7-59 FINSC模式计算机发命令PLC响应

a)计算机串行接口与PLC串行接口通信计算机命令 b)计算机串行接口与PLC串行接口通信PLC响应 c)计算机串行接口与连接网络上的PLC通信计算机命令 d)计算机串行接口与连接网络上的PLC通信PLC响应

这里,有关字节含义与上述介绍的Host Link及FINS的相同。FINS协议命令用十六进制数,而Host Link协议用ASCII,故FINS用作Host Link通信时,要把命令中的十六进制数转换为ASCII。如值“0”应为30hex,值“A”应为41hex,等等。所以,用它通信比直接用FINS通信,同样多通信字节,信息量要少一半。

图7-60所示为一通信实例。可用以说明网络地址、节点地址及单元地址。

978-7-111-26319-7-Chapter07-122.jpg

图7-60 通信实例

如图,若从计算机发送命令到在网络5上节点3PLC(A)的CPU单元,那么它的(DNA):05(30,35)、(DA1):03(30,33)、(DA2):00(30,30)。若从计算机发送命令到在网络10上节点12PLC(B)的CPU单元,那么它的(DNA):0A(30,41)、(DA1):0C(30,43)、(DA2):00(30,30)。

FINSC模式也可由PLC发命令,计算机响应。这时不仅可使用CMND指令,还可使用SEND及RECV指令。上述指令的数据还是按指令规则处理,但计算机收到的格式将与上述发送时类似。而且,计算机的回应也应与计算机发送时的格式相同。

以上只是FINS命令的简要介绍。还有很多细节,请参阅OMRON公司提供的《SYS- MACCS/CJSeries Communications Commands REFERENCE MANUAL》。

2.计算机编程

FINS协议在计算机方,可以用于串行接口,也可用于以太网(卡),还可用于Control Link网(卡),等等。前两者可用可视化软件编程,后者可用OMRON通信工具软件提供的控件编程。

(1)串行接口FINS协议通信编程。它与HostLink完全相同。所不同的只是命令及响应的内容有所差别。以前介绍的所有可视化通信程序均可使用。

978-7-111-26319-7-Chapter07-123.jpg

978-7-111-26319-7-Chapter07-124.jpg

提示:使用FINS协议可访问地址超过10000的D区。所以,对CSCJ及CP型PLC的监控程序应尽量使用此协议。只是,它用的是十六进制码,功能又太强,要小心使用,否则易出错。

提示:FINS协议读写多少数据都要用十六进制码指明。而HostLink协议,读多少数用BCD码指明,写多少数不用指明。

(2)以太网通信编程。要使用TCP(传输控制协议)或UDP(用户数据报协议)协议。前者须先建立连接,才可发送、接收数据,通信较为可靠。后者无需建立连接即可传送数据,比较简便,但不大可靠。与OMRONPLC以太网通信编程也使用这两个协议,而且还要与FINS相结合。

TCP、UDP通信要用到的Socket。Socket是由美国伯克利大学开发的在Unix系统上的通信编程规范,用于计算机通信则代表一种点到点数据传输。通信双方由代表两点的“服务器”和“客户端”组成,基于IP协议进行按照TCP或UDP规范进行信息交换。

建立双方通信的过程即称为建立一个“Socket(套接字)”,建立后利用得到的“套接字”进行各种信息的交流。随着Windows系统的流行,开始有人在原来的基础上移植到Windows平台上。微软在早期编写了基于Windows特征的(消息驱动等)“套接字”编程API,一般称其为“WinsockAPI”。此外,还有“Winsock”控件。

1)使用WinsockAPI编程

a)以太网TCP协议通信用API函数主要有:

socket:创建套接字;

listen:监听;

accept:请求连接;

connect:建立连接;

send:发送数据;

rec:接收数据;

closesocket:关闭套接字。

b)以太网TCP协议通信程序要点。

服务器端其要点是:

用socket函数,创建套接字;

用bind函数,将套接字绑定到一个本地IP地址及端口上;

用listen函数,将套接字设为监听模式,准备接收客户请求;

等待客户请求到来,如果到来,用accept函数,接收请求,并返回一个新的对应于此次连接的套接字。

用send或recv函数,通过这个新的套接字,从客户端读取数据或向客户端发送命令;返回,等待另一个客户连接。

如果不再通信,关闭套接字。

对客户端其要点是:

用socket函数,创建套接字;

用connect函数,向服务器发出连接请求;

用send或recv函数,通过套接字,向服务器发送命令或从服务器读取数据;(www.xing528.com)

如果不再通信,关闭套接字。

c)程序实例。在OMRON以太网操作手册(W421-E1-03)中,有一个C语言无连接以太网通信程序实例。在UNIX工作站上运行,以发送FINS命令(命令码为0101),读取连接在以太网的PLCD00100开始的150字数据。设定的PLC以太网单元IP地址是196.36.32.100,FINS节点地址是100,IP地址转换设为自动,FINSUDP口为缺省,9600。工作站IP地址为196.36.32.50,节点地址是50,UDP口设为0,动态分配。同时,如果设定在2秒内未接到回应,通信命令将重发。具体程序转引于此,供参考。

978-7-111-26319-7-Chapter07-125.jpg

978-7-111-26319-7-Chapter07-126.jpg

978-7-111-26319-7-Chapter07-127.jpg

978-7-111-26319-7-Chapter07-128.jpg

2)Winsock控件编程。Winsock控件为VB使用“套接字”编程提供了方便。利用Win- sock控件可以与通信对方建立连接,并通过传输控制协议(TCP)进行数据交换。

a)Winsock控件属性、方法及事件。其主要属性有:

BytesReceived:返回当前缓冲区中接收到的字节数量。

LocalHostName:返回本机名字符串。

LocalIP:返回以(xxx.xxx.xxx.xxx)格式表达的IP地址串。

LocalPort:本机使用的地址,可读写,设计时可用,Long型。对于客户,如果不需要指定端口,则用端口0发送数据。在此情况下,控件将随机选择一个端口。在一个连接确定后,成为TCP的端口。对于服务器,指用于监听的端口。如设置为0,则用随机数。在调用Listen方法后,该属性自动包含用到的端口。端口0总是用于在两计算机间建立动态连接。客户希望通过端口0获得一个随机端口以“回调”连接服务器。

Protocol:套接字类型,为TCP或UDP二者之一,默认为TCP类型。设置为sckTCPProto- col表示TCP协议sckUDPProtocol表示UDP协议。在此属性被重置之前需用Close方法关闭。

RemoteHost:发送或接收数据的主机,你可提供主机名如:"FTP://ftp.microsoft.com";或一IP地址串,例如"100.0.1.1"。

RemoteHostIP:远程主机的IP地址。对于客户程序,在连接确定后使用Connect方法,此属性包含远程主机的IP名串。对于服务器程序,在引入连接需求后(ConnectionRequest事件),此属性包含IP串。当使用UDP套接字,在DataArrival事件发生后,此属性为发送UDP数据的机器IP地址串。

RemotePort:连接套接字端口值。例如通常HTTP应用使用80端口,FTP则使用21,LECG3机的端口为502。

State:控件状态,只读。可为以下值:0(sckClosed),默认值,关闭;1(sckOpen),打开;2(sckListening),侦听;3(sckConnectionPending),连接挂起;4(sckResolving-Host),识别主机;5(sckHostResolved),已识别主机;6(sckConnecting),正在连接;7(sckConnected),已连接;8(sckClosing),同级人员正在关闭连接;9(sckError),错误

主要方法有:

Accept:仅用于TCP服务器应用。这个方法用于在引入一个连接时响应的事件,即Con-nectionRequest事件。语法:object.AcceptrequestID返回值:Void。响应事件时必须传递Re-questID参数给此方法,以生成新的Socket实例用于实际的信息传输。

Bind:设定LocalPort及LocalIP用于TCP连接。当有多个协议适配器时使用。语法:ob- ject.BindLocalPort,LocalIP。LocalPort,此端口用于连接,LocalIP生成连接的IP地址。如果已设定相关属性,可不必携带相关参数。在调用Lisent方法之前调用此方法。

Close:在客户或服务器方关闭TCP连接。语法:object.Close。参数:无。返回值:Void。

GetData:接收存于可变类型中的数据块。返回值:Void。语法:object.GetDatadata,[type,][maxLen]。Data:接收数据的变量,如果空间不够,将设置为空。Type:可选,接收的类型,自行设置。MaxLen:可选参数。设定接收数组或字符串类型数据的尺寸。如果参数没有,将接收所有的数据。如果提供数组或字符串以外的数据类型,则忽略此参数。Type可以设置为常用的数据类型。通常在DataArrival事件中使用该方法。此事件包含total- Bytes参数。如果你设定的maxlen小于totalBytes参数,你将得到一个由10040表示的剩余字节将丢失的警告信息。

Listen:建立一个设置为监听模式的套接字。此方法仅用于TCP连接。语法:ob- ject.Listen参数:无。返回值:Void。当调用Listen之后,引入一个连接时发生ConnectionR- equest事件。当处理ConnectionRequest时,应用程序必须使用Accpet方法来响应。

PeekData:同GetData类似,但是PeekData不从输入队列中移去数据。此方法仅用于TCP连接。语法:object.PeekDatadata,[type,][maxLen]。

SendData:向远地主机发送主机。返回值:Void。语法:object.SendDatadata。Data:发送的数据为二进制数,使用字节数组。当使用Unicode格式串时将在发送之前转换为ANSI串。

Connect:客户机端可以用此方法请求与服务器连接。连接前应指定远程服务器IP地址及端口号。但也可以调用此方法是指定。

发生的事件有:

Close:发生于远程主机关闭连接。为了正确的关闭TCP连接应当使用Close方法。

Connect:当连接行动完成时,语法:object.Connect()。用此事件表明连接成功。

ConnectionRequest:发生于一个远端主机要求确定一个连接时。仅用于TCP服务器应用。RemoteHostIP及RemotePort属性在此事件后存储了关于客户机的信息。语法:object_ConnectionRequest(requestIDAsLong)。requestID:引入的连接的请求标识。此参数传给Ac-cept方法中的第二个控件实例。服务器可以决定是否认可该连接。如果引入的连接未被认可,客户将受到一个Close事件。使用Accept方法接受引入的连接。

DataArrival:当新数据抵达时发生。语法:object_DataArrival(bytesTotalAsLong)。BytesTotal,Long型。总计收到的数据量。此事件在你调用GetData方法之前将不会再发生。仅在有新数据抵达时激活。你可以在任何时刻使用BytesReceived属性检查多少数据有效。

Error:表明发生了错误。限于篇幅,错误码忽略。

SendComplete:当发送动作完成时发生。语法:object_SendComplete。参数:无。

SendProgress:当发送数据时产生本事件。语法:object_SendProgress(bytesSentAsLong,bytesRemainingAsLong)。BytesSent:本事件发生以来发送的数据量。BytesRemaining:缓冲区中等待发送的数据。

b)计算机与PLC以太网通信的计算机VB程序实例。计算机与PLCModbus TCP/IP协议通信(针对国产和利时LECG3PLC程序,OMRON用的是FINS/TCP协议),计算机为客户机,而PLC为服务端。PLC程序在调用以太网功能块时自动生成,用户不必编程。计算机程序必须由用户编写。LECG3型PLC以太网通信采用Modbus TCP协议。它和Modbus RTU协议的区别在于:

第一,它没有从站地址这个概念,它寻址所依靠的是IP地址。

第二,在它的命令帧及数据帧中,没有CRC校验码。但是在帧之前要加入一些字节。具体内容见表7-16。

7-16 ModbusTCP/IP协议格式参考表

978-7-111-26319-7-Chapter07-129.jpg

第三,它只能从指定输出区读数据。也只能对指定的输入区写数据。如要用05功能码写LM3403的第一个位(%IX4.0),其命令格式和表7-17所示:

7-17 写位数据命令格式举例

978-7-111-26319-7-Chapter07-130.jpg

表7-18所示为和利时LM3403以太网模块寄存器区与ModbusTCP功能码对照参考表。

7-18 以太网模块寄存器区与ModbusTCP功能码对照表

978-7-111-26319-7-Chapter07-131.jpg

注:(1)这里的I和Q区是LM3403设定的寄存器区。

(2)在进行网络通信时,PLC编程软件通过串行接口可以同时连接PLC,以监视和设置PLC各寄存器的状态和数值。

(3)位地址计算:如果位的地址为%IXx.y,那么,命令中的地址为(x-z)∗8+y。如字的地址为%IWm,那么,命令中的地址为(m-z)/2。这里的z为%IW区开始地址。%QW区计算方法与此类似。本表计算I地址,假设z为4。计算Q地址,假设z为2。

弄清PLC方情况,则编写计算机程序。图7-61所示为这个计算机程序表单。其上有发送报文文本框及接收报文文本框。有建立连接、发送命令及接收数据按钮

作为客户机,计算机程序要点是:

在使用这些控件之前,要先把Winsock控件,从控件库中,调入到本工程VB的工具箱中。Protocol(套接字类型)属性设为TCP,使用TCP协议。

用connect方法,请求连接。其参数是指定PLC的IP地址(PLC配置时指定)及使用的通信端口(LECG3机协议规定为502)。

生成命令,并用SendData方法发送命令。

用GetData方法,接收并显示数据。

具体程序为:

978-7-111-26319-7-Chapter07-132.jpg

图7-61 计算机与以太网PLCTCPIP协议通信程序表单

(1)建立连接程序。

978-7-111-26319-7-Chapter07-133.jpg

(2)生成并发送命令程序。

978-7-111-26319-7-Chapter07-134.jpg

(3)接收并显示数据程序。

978-7-111-26319-7-Chapter07-135.jpg

978-7-111-26319-7-Chapter07-136.jpg

该程序可用以读取Q区位或字,写I区的位或字。

从图7-61可知,它向PLC发送读取PLC%QW4字的命令,目的是读取%QW4字的值,并予以显示。从图7-61可知,此命令已得到执行,并得到相应的回应。接收报文的最后FF(65535),即为此值。该程序还可以改变命令码,用以读取Q区其它位或字,也可用以写I区的位或字。

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

我要反馈