购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 欧姆龙Hostlink通信协议

计算机可以使用Hostlink协议连接到欧姆龙的PLC,通过Hostlink协议,计算机可以向PLC发送Hostlink命令,PLC处理来自计算机的命令,并把结果回传给计算机。

2.2.1 Hostlink协议介绍

由于Hostlink协议的开放性,它被广泛使用在上位监控系统中,用户可以通过计算机自主编程,实现对PLC的操作,通过收发Hostlink协议报文,实现在多种平台上对欧姆龙PLC的监控。下面我们就来学习Hostlink协议的相关内容。

1.Hostlink协议概述

计算机与PLC通信是通过计算机与PLC之间交换命令和应答实现的,交换的命令和应答遵循欧姆龙的Hostlink协议。一次信息交换中,传输的命令或应答的长度称为“帧”,Hostlink协议的1帧最多可包含131个字符,是面向字符的协议。计算机通过发送Hostlink命令,可以对PLC进行I/O读写、改变操作模式、强制置位/复位等操作。

2.Hostlink协议的格式

Hostlink协议根据发送方和接收方,分为发送协议(命令)和接收协议(响应),格式有所不同。下面以独立的1帧命令为例,介绍Hostlink协议的格式。

(1)命令格式

命令格式如图2-4所示。

图2-4 命令格式

①起始符:规定为“@”。

②节点号:PLC的单元号,范围为0~31。

③命令符:表示发送命令的指示目的(可参考表2-2)。

④操作内容:表示命令符操作的参数,命令不同,内容也不一样。

⑤校验符:FCS校验,对校验的内容进行异或运算,结果为2字符(8bit)。

⑥结束符:规定为“*CR”。

Hostlink常用的命令会受PLC型号的制约,不同型号PLC的Hostlink命令可能有所不同,本书以最常用的CJ/CS系列PLC CPU单元的命令为例讲解Hostlink协议,CJ/CS系列PLC CPU单元可以接收如图2-5所示的通信命令。

图2-5 通信命令

C-Mode命令:C-Mode命令是专用的Hostlink通信命令。它由主机发出,并发送到目标PLC的CPU单元。

FINS命令:FINS命令是消息服务通信命令。它不依赖特定的传输路径,可用于各种网络通信(控制器连接、以太网等)和串行通信(主机连接)。关于FINS的详细信息可参考第6章的相关内容。

注意 当主机是PLC CPU单元时,主机将通过CMND(490)/SEND(090)/RECV(098)发送FINS命令,由于本书描述计算机与PLC通信,用不到PLC的命令,是把计算机当成主机,因此以上命令将不做详细介绍。

下面我们就开始讲解Hostlink命令,先讲解C-Mode命令。C-Mode命令是欧姆龙最常用的Hostlink命令,基本全系欧姆龙PLC都支持,常用C-Mode命令见表2-2。

表2-2 常用C-Mode命令

(2)响应格式

响应格式如图2-6所示。

图2-6 响应格式

①起始符:规定为“@”。

②节点号:PLC的单元号,表明返回的响应数据PLC的单元号。

③命令符:表明本帧返回的是何种命令的响应数据。

④状态符:显示响应的结果是正确还是异常(可参考表2-3)。

⑤操作内容:根据命令符返回的响应数据。

表2-3 常见响应状态符

⑥校验符:FCS校验,对校验的内容进行异或运算,结果为2字符(8bit)。

⑦结束符:规定为“*CR”。

通过Hostlink命令,上位计算机可以进行编程、组态、监控等操作。使用Hostlink命令,用户只需要在计算机侧编写并发送命令帧,PLC接收侧就会自动返回响应帧。用户读取响应帧数据,就能得知返回数据正常与否,以及需要获取的数据。

3.FCS校验计算方法

当传送一帧数据时,结束符的前面要安排一个校验符,以检查传送时是否存在数据错误,通常称为FCS校验。校验的范围是从一帧的起始符到校验符之前的所有字符,算法就是将校验范围中的ASCII字符转换成HEX码后执行异或操作,得到的结果就是2个ASCII字符(8bit)的校验码。通信的双方每次接收到一帧,均计算FCS,与帧中所包含的FCS进行比较,从而查检帧中间的数据错误。

例如,以读00号PLC DM0数据区命令为例进行说明,其命令格式如图2-7所示。

图2-7 读00号PLC DM0数据区的命令格式

本例的FCS校验计算过程如图2-8所示。

图2-8 FCS校验计算过程

再将图2-8的FCS校验结果转换成ASCII码,放到消息帧里。

4.Hostlink常用C-Mode命令

下面开始介绍Hostlink的常用命令。这些命令可用于计算机与PLC间的通信,以下关于命令的描述以计算机为“第一人称”,例如读IR/SR区命令就是使用计算机读取PLC的IR/SR区的数据所用到的命令,命令格式指的是计算机发送给PLC的命令帧格式,响应格式指的是PLC反馈给计算机的数据帧格式。

(1)读IR/SR区数据

读IR/SR区数据命令格式和响应格式如图2-9和图2-10所示。

图2-9 读IR/SR区数据命令格式

图2-10 读IR/SR区数据响应格式

(2)读LR区数据

读LR区数据命令格式和响应格式如图2-11和图2-12所示。

图2-11 读LR区数据命令格式

图2-12 读LR区数据响应格式

(3)读HR区数据

读HR区数据命令格式和响应格式如图2-13和图2-14所示。

图2-13 读HR区数据命令格式

图2-14 读HR区数据响应格式

(4)读定时器和计数器的PV值

读定时器和计数器的PV值命令格式和响应格式如图2-15和图2-16所示。

图2-15 读定时器和计数器的PV值命令格式

图2-16 读定时器和计数器的PV值命令响应格式

(5)读定时器和计数器的状态

读定时器和计数器的状态命令格式和响应格式如图2-17和图2-18所示。

图2-17 读定时器和计数器的状态命令格式

图2-18 读定时器和计数器的状态响应格式

(6)读DM区数据

读DM区数据命令格式和响应格式如图2-19和图2-20所示。

图2-19 读DM区数据命令格式

图2-20 读DM区数据响应格式

(7)读AR区数据

读AR区数据命令格式和响应格式如图2-21和图2-22所示。

图2-21 读AR区数据命令格式

图2-22 读AR区数据响应格式

(8)写IR/SR区数据

写IR/SR区数据命令格式和响应格式如图2-23和图2-24所示。

图2-23 写IR/SR区数据命令格式

图2-24 写IR/SR区数据响应格式

(9)写LR区数据

写LR区数据命令格式和响应格式如图2-25和图2-26所示。

图2-25 写LR区数据命令格式

图2-26 写LR区数据响应格式

(10)写HR区数据

写HR区数据命令格式和响应格式如图2-27和图2-28所示。

图2-27 写HR区数据命令格式

图2-28 写HR区数据响应格式

(11)写定时器和计数器的PV值

写定时器和计数器的PV值命令格式和响应格式如图2-29和图2-30所示。

图2-29 写定时器和计数器的PV值命令格式

图2-30 写定时器和计数器的PV值响应格式

(12)写定时器和计数器的状态

写定时器和计数器的状态命令格式和响应格式如图2-31和图2-32所示。

图2-31 写定时器和计数器的状态命令格式

图2-32 写定时器和计数器的状态响应格式

(13)写DM区数据

写DM区数据命令格式和响应格式如图2-33和图2-34所示。

图2-33 写DM区数据命令格式

图2-34 写DM区数据响应格式

(14)写AR区数据

写AR区数据命令格式和响应格式如图2-35和图2-36所示。

图2-35 写AR区数据命令格式

图2-36 写AR区数据响应格式

(15)写状态区数据

写状态区数据命令格式和响应格式如图2-37和图2-38所示。

图2-37 写状态区数据命令格式

方式数据:00——编程方式

02——监控方式

03——运行方式

图2-38 写状态区数据响应格式

(16)强制置位

强制置位命令格式和响应格式如图2-39和图2-40所示。

图2-39 强制置位命令格式

图2-40 强制置位响应格式

图2-39中操作数的名称地址见表2-4。

表2-4 操作数的名称地址

(17)强制复位

强制复位命令格式和响应格式如图2-41和图2-42所示。

图2-41 强制复位命令格式

图2-42 强制复位响应格式

图2-41中操作数的名称地址见表2-4。

(18)取消强制置位/复位

取消强制置位/复位命令格式和响应格式如图2-43和图2-44所示。

图2-43 取消强制置位/复位命令格式

图2-44 取消强制置位/复位响应格式

2.2.2 Hostlink协议C-Mode编程举例

计算机侧使用Visual Studio 2015作为开发工具编写程序,PLC侧选用的型号是CP1E-N40DR-D。另外,需要参考2.1.3节提前设置PLC的通信参数,注意有些C-Mode命令需要PLC工作在监控模式下才能起作用,具体参考表2-2。因此,本例首先需要改变PLC的运行模式到监控模式,然后计算机再通过编写的程序与PLC进行通信。这个程序无须事先计算校验码,只需要写入校验位前的Hostlink命令就行,然后程序代码会完成FCS校验并加到Hostlink命令后面,再将命令帧发送给PLC。计算机侧通信程序对话框如图2-45所示。

图2-45 计算机侧通信程序对话框

1.串口设定

串口设定区域设定串口号、数据位、波特率、停止位、校验位等参数,单击“打开串口”按钮,程序就会把串口打开,如果有问题,就会显示error提示。串口的参数设置要与PLC串口的参数设置一致。

2.命令设置

命令设置区域包括以下4个部分:

1)命令:可以选择动作是读还是写,参考表2-2所列的命令和2.2.1节中关于命令的描述。

2)起始地址:要读或者写的地址,例如若想读CIO10通道的数据,那么这个参数要写成“0010”;若想读CIO15通道的数据,那么这个参数要写成“0015”。这个参数必须是4位字符串,不够的前面用“0”补齐。

3)内容:如果前面的命令是读,那么这个参数表示要读的长度,例如若要读一个通道的数据,那么就是“0001”,该参数也是字符串型数字常量,必须写够4位,不够的用“0”补齐。如果前面的命令是写,那么这个参数就是要写的内容,例如若要把1写到这个通道里,那么就是“0001”,如果想写2AAA,那么就是“2AAA”。写的内容必须是十六进制的数,用字符串表示也是4个为一组,不够的用“0”补齐。

4)单元号:该参数表示PC要与PLC通信的节点号,如果只有一个PLC,那么单元号就是00。命令设置完毕后单击“发送/接收”按钮,完整命令就会被发送出去,发送的命令就会在发送数据区域显示出来,而PLC端反馈的数据则会在接收数据区域显示出来。

3.通信软件使用举例

1)计算机程序读PLC D区起始地址为0001且数据长度为1的数据,单击“发送/接收”按钮,发送数据区域就会显示发送的内容,即@00RD0001000156*,接收数据区域就会收到PLC的反馈,即@00RD0063C121*,表示D0001的内容是十六进制的63C1,RD后面的“00”代表发送成功。

D区内存数据如图2-46所示,可以看出D0001内的数据就是63C1。

图2-46 D区内存数据

通信对话框设置如图2-47所示。

图2-47 通信对话框设置

2)计算机程序写数据0000到PLC的D0001,如图2-48所示。

图2-48 写数据0000到PLC的D0001

单击“发送/接收”按钮后,发送数据区域就会显示发送的内容,即@00WD0001000052*,接收数据区域就会收到PLC的反馈,即@00WD0053*,WD后面的“00”表示写入成功。

写数据后D区内存数据如图2-49所示。

图2-49 写数据后D区内存数据

消息帧格式请参考2.2.1节相关命令格式的描述。

4.计算机程序C#源代码

见本书配套资源包

2.2.3 Hostlink发送FINS命令

欧姆龙的PLC也支持FINS命令,FINS命令是消息服务通信命令,不依赖于特定的传输路径。它们可用于各种网络上的通信(控制器连接、以太网连接等)和串行通信(Hostlink)。它们可以从CPU单元、特殊I/O单元或主机发出,也可以发送到其中任何一个,可以发送的命令取决于目标PLC的规定。本书以CP1E系列PLC为例,讲解如何通过串行通信Hostlink发送FINS命令,通过FINS命令可以形成用于跨不同欧姆龙网络的消息服务命令系统,它们可以用于各种控制操作,例如发送和接收数据、更改操作模式、强制设置和强制重置、执行文件操作等。另外,FINS命令和C-Mode不用PLC运行在监视模式,RUN模式也可以,而且FINS命令支持对PLC的位操作,例如读取I/O的逻辑状态。

1)FINS命令在应用层进行传输,它不依赖于低层次网络层(物理层和数据链接层)进行传输,这使得它们可以在各种网络和CPU总线之间传输。具体来说,它们可以通过以太网、Controller Link和Hostlink在两个PLC或PLC与计算机之间传输。

2)除了CPU单元外,FINS命令还可以访问各种设备,例如CPU总线单元、个人计算机等。

3)FINS命令支持网络中继操作,因此它们可以通过网络层次结构访问最多3个网络级别(包括本地网络)的设备。

4)FINS命令可以使用Hostlink协议在计算机与PLC之间传输通信。

当使用Hostlink发送或接收FINS命令和响应时,帧的前面必须是Hostlink头,后面是Hostlink的FCS校验码和结束符。

Hostlink协议发送FINS的命令帧格式如图2-50所示。

图2-50 Hostlink协议发送FINS的命令帧格式

FINS命令帧还包括响应等待时间、目标节点地址、源节点地址和其他FINS命令格式数据。

Hostlink协议发送FINS的响应帧格式如图2-51所示。

图2-51 Hostlink协议发送FINS的响应帧格式

FINS响应帧还包括传输时设置的内容和FINS命令帧的响应格式数据。

5)计算机发送FINS命令到PLC,计算机用以下的FINS命令帧格式发送命令到PLC,命令长度不能超过1114个字符,而且不能将FINS命令分割成单独帧发送。

①计算机直接连接到PLC(包括CPU单元和串口扩展单元)的FINS命令帧格式如图2-52所示,此格式也能用于计算机与串口板或串口通信组件的通信。

图2-52 计算机直接连接到PLC的FINS命令帧格式

②计算机连接到网络,可以跨网络连接到PLC,跨网络的FINS命令帧格式如图2-53所示。

图2-53 跨网络的FINS命令帧格式

③Hostlink命令解释如下:

● @符号必须在发送命令的开头。

● 单元号:指连接到计算机的PLC CPU单元的单元号,在计算机的设置中设置单元号。当计算机连接到串行通信单元时,单元号在CX-Programmer通信单元的设置中设定。

● 报文头:用于区分不同的命令,FINS命令设置为“FA”。

● 响应等待时间:从PLC接收命令到返回消息帧之间的间隔,它可以设置为0~F Hex,单位是10ms。

● ICF :80(ASCII 38 30)——网络中的PLC;

00(ASCII 30 30)——直接连接到计算机的PLC。

● DA2:目标单元地址。

● SA2:源单元地址。

● SID:重复发射时,作为计数器使用,通常设置为00(ASCII 30 30)。

● FCS:FCS校验码,校验范围从帧开始@到FCS之前所有的位。

● 结束符:设置为“*CR”。

④PLC返回信息到计算机。返回数据的长度必须小于1115个字符。

PLC直接连接到计算机的返回数据格式如图2-54所示。

图2-54 PLC直接连接到计算机的返回数据格式

PLC通过网络连接到计算机的返回数据格式如图2-55所示。

图2-55 PLC通过网络连接到计算机的返回数据格式

● ICF:C0(ASCII 43 30)——网络中的PLC;

40(ASCII 34 30)——直接连接到计算机的PLC。

● FINS响应码:分为Main code和Sub code,各2字节。0000(ASCII 30 30 30 30)代表正确,其他值代表通信有错误。

更多关于FINS命令的信息请参考第6章的描述。

2.2.4 Hostlink协议FINS编程举例

计算机侧选用的编程软件是Visual Studio 2015,PLC选择的是CJ1G,下面是计算机使用FINS协议通过Hostlink串口与PLC通信的设置对话框,按照计算机直接连接PLC CPU串口的FINS协议格式设计,上半部分是串口设定部分,需要与PLC的串口设定一致,下半部分是命令设置,输入命令的相关参数,单击“发送/接收”按钮,程序就自动把FCS校验等部分加到命令帧里并发送给PLC。

1)根据图2-56设置部分参数,把串口设定好,然后打开串口。

图2-56 设置对话框

2)发送/接收数据对话框如图2-57所示,命令设置包括Hostlink协议的各个字符段和FINS命令的字符段,下面的设置是读取CIO020.4~CIO020.7位的二进制数,发送数据部分是程序整理完毕后实际发送给PLC的字符串,接收数据部分是PLC给计算机的反馈。注意,这些字符发送给PLC和从PLC接收的实际对应的是ASCII码而不是字符串。

图2-57 发送/接收数据对话框

①发送消息帧字符段解释如下:

②接收消息帧字符段解释如下:

从图2-58可以看出,CIO020.4~CIO020.7的数据为1111,与测试程序接收的数据一致。

图2-58 CIO020.4~CIO020.7的数据

3)利用程序把1011写入CIO020.4~CIO020.7的设置对话框如图2-59所示。

①发送消息帧字符段解释如下:

②接收消息帧字符段解释如下:

图2-59 写数据设置对话框

从图2-60可以看出,CIO020.4~CIO020.7的数据为1011,与测试程序发送的数据一致。

图2-60 写入数据后的CIO020.4~CIO020.7

4)图2-61是读取D1~D4的字的设置对话框。

图2-61 读取D1~D4的字的设置对话框

①发送消息帧字符段解释如下:

②接收消息帧字符段解释如下:

实际读取的数据与PLC内存里的数据一致,D1~D4数据如图2-62所示。

5)把6666777788889999写入D1~D4,设置对话框如图2-63所示。

①发送消息帧字符段解释如下:

图2-62 D1~D4数据

图2-63 写数据到D1~D4的设置对话框

②接收消息帧字符段解释如下:

从图2-64可以看出,D1~D4的数据与测试程序发送的数据一致。

图2-64 写入数据后的D1~D4

6)FINS协议通信程序源代码:

见本书配套资源包。 QfeMI66VYqBdUu9jw4eHeor/rIKpSqWXWr8K69HSpPURWG0lo3FTAV3iOpYwBPN+

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开