产品识别跟踪的利器

作者:杨文仲 文章来源:上汽通用五菱汽车股份有限公司 发布时间:2011-03-23
分享到


图1  Cobalt握手流程

Cobalt是EMS推出的一款新型射频识别读写器,具有抗干扰能力强、读写距离远及支持多种协议等优点。本文旨在阐明如何在PLC中应用Cobalt读写器,其应用有两步:连接与配置、协议选择与编程。

AVI系统,又称车体跟踪识别系统,它为每一辆车体提供惟一标识(车体识别码),然后通过分布在整个生产线的AVI站点将标识信息读出来并记录到服务器中。AVI系统通常是采用载码体(TAG)记录信息,用RFID读写器从载码体中读取信息。我公司的AVI系统采用的是Escort Memory Systems(以下简称“EMS”)的新型号RFID读写器——Cobalt HF-CNTL-DNT-01型号读写器(该型号读写器接入DeviceNet,以下均简称为“Cobalt”)。Cobalt系列产品具备抗干扰能力强、读写距离远、多接口、支持多种通信接口协议和支持多种TAG等优点,且支持Ethernet/IP、Modbus TCP等多种传输协议。

Cobalt安装与配置

Cobalt需要首先对自身参数进行配置:设置站点号(Node ID)、波特率(Bit Rate)和识别TAG类型。然后接入DeviceNet,在DNB模块(罗克韦尔自动化公司的DeviceNet模块,用于组建DeviceNet网络)中配置总线相关参数。完成这些配置之后才能使用。

1.Cobalt参数配置

Cobalt自身参数配置需要使用EMS的Dashboard软件。Dashboard是用来查看、修改Cobalt配置和刷新Cobalt Firmware的一种软件。配置方法如下:

(1)接入24V工作电源。就现场调试来说,一般直接接入DeviceNet网络,由DeviceNet网络供给24V电源。

(2)用EMS提供的专用的串口线连接Cobalt和PC机。注意,拔插串口线前必须断电,否则易造成设备损坏。

(3)打开Bashboard软件(EMS专用于配置Cobalt系列读写器的软件),通过串口连接Cobalt,进入参数配置页面,配置节点号、波特率和TAG类型。节点号是设备在DeviceNet中的惟一标识,配置好节点号后才能通过RSNetworx(罗克韦尔自动化公司一款配置DeviceNet的工具软件)扫描配置总线。

(4)将配置Download到Cobalt。

完成以上步骤后,方可配置DNB模块参数。

2.Cobalt与总线的连接

配置完Cobalt参数后将Cobalt接入DeviceNet。连接总线时需要注意,总线接头接线时要保证线头充分接触、牢固并保证接线对应关系正确,否则易出现死机、设备不稳定,甚至总线“Bus Off”故障。

3.DNB模块参数配置

接入DeviceNet后,通过RSNetworx配置DNB模块参数,为Cobalt分配输入输出地址。配置方法可参见RSNetworx的使用方法,本文不再赘述。

Cobalt在AB PLC架构中的编程控制

下面将从Cobalt支持的协议入手,分析其握手流程,然后举例分析如何编写读控制程序。

1.Cobalt的命令协议

要正确地识别和执行PLC发送的命令、PLC取到所需要的数据,就需要使用规定的语言和数据结构包,即命令协议(Command Protocol)。Cobalt支持两种命令协议:ABx Fast Command Protocol和CBx Command Protocol。

ABx Fast Command Protocol是一种点对点的协议,通常用于-232、-422和-USB类型的读写器(-232是指HF-CNTL-232-01,其他同理)。CBx Command Protocol是一种点对多的协议,常用于-485和-IND类型的读写器。两种协议虽具有不同的数据结构和命令设定,但应用的道理是相通的。下面我们将以CBx Command Protocol来举例说明Cobalt的编程应用。

2.Cobalt的握手流程

正确的握手才能触发Cobalt正确的执行命令。Cobalt在其握手流程中引入了Producer和Consumer两个概念。Producer和Consumer是两个相对的概念,Producer产生数据供其他设备(Consumer)用;Consumer使用其他设备(Producer)产生的数据。握手流程如图1所示,Cobalt的握手是双字,第一个字是Consumer,第二个字是Producer。

图1中,P_P表示PLC数据中的Producer,即PLC发送给Cobalt的数据;P_C表示PLC中的Consumer,即PLC取得的Cobalt的数据;C_P表示Cobalt中的Producer,即Cobalt发送给PLC的数据;C_C表示Cobalt中的Consumer,即Cobalt取得的PLC的数据。P_P和P_C是PLC中的数据,C_P和C_C是Cobalt中的数据。编程时,我们主要就是控制P_P中的数据、读取P_C中的数据。简单来说就是操作图1中绿色框中的数据。具体流程如下:

(1)将P_P加1然后发送给Cobalt。

(2)Cobalt自动将PLC发送过来的数据P_P拷到C_C,确认收到信号。

(3)Cobalt自动将C_P加1,Cobalt响应PLC命令。

(4)PLC取出C_P数据,PLC确认Cobalt操作完成。

上述流程中,(2)、(3)步是Cobalt自动完成的,不需要我们干预。

3.Cobalt在AB PLC架构中的编程

清楚握手流程后,接下来就要明白在CBx协议中,读写命令及其响应的格式。下面用读命令举例说明编程应用,写命令与读命令应用方法相同。读命令格式如表1所示。

在编程中,首先要将握手信号加1,然后将命令字按上述读命令格式打包一起发送给Cobalt,如图2所示,Rfid_Cobalt_N.Output_Map是送Cobalt数据,从上述握手和读命令格式分析知,Rfid_Cobalt_N.Output_Map[1]及之后依次是放读命令长度(固定为6)、读命令、Node ID(固定为1)、超时值、起始地址和读长度等信息,Rfid_Cobalt_N.Output_Map[0]的高16位是放PLC Producer值。

从握手流程分析可知,接下来Cobalt就将PLC的Producer握手信号拷到Cobalt中,然后将Cobalt的Producer加1,之后再将此数送PLC,即PLC Consumer。此两步不需人为干预,编程时我们只需要将PLC Consumer值取出即可。取出Rfid_Cobalt_N.Input_Map[0]的高16位放到Rfid_Cobalt_N.C_Prod,此值即是Cobalt的Producer(见图3)。

按照握手流程,最后需要判断读操作完成。完成的条件是Cobalt将Cobalt Producer送到PLC Consumer(见图4)。

读命令送到Cobalt后,Cobalt操作完成,将数据反馈给PLC,那么PLC如何取出需要的数据?

要取出需要的数据,我们必须清楚Cobalt响应命令的结构。

由表2可知,数据区是从第4个字双字开始的,通常对我们来说最重要的信息就是在此区域内。当读操作失败时,数据区第4个双字的第8位到第16位显示的是错误代码。

图5中第二分行是当读成功后取出数据。因Cobalt读取的数据是以双字的方式存储的(从Rfid_Cobalt_N.Input_Map[4]开始),为方便编程,我们可以将其转换成以字节的方式来存储(从Rfid_Cobalt_N.Read_Buf[0]开始)。从响应数据结构表中不难看出,Cobalt数据区的数据都是以字为单位的,这一点在取数据的时候要注意,否则可能取到错误的数据。图5示例程序中,读取的数据放在Rfid_Cobalt_N.Input_Map[4]到[9]中,一共是6个双字,所以Rfid_Cobalt_N.Read_Buf设置成24个Bytes。

将数据存储到Rfid_Cobalt_N.Read_Buf后还需要对数据进行分解,使之方便阅读以及其他程序的使用。因Cobalt的数据区每个字的高位低位内容正好与TAG中内容相反,所以取数据时要注意Read_Buf的位置。图6是数据分解程序的片段,取Skid_No(数据类型:字)时,是将Read_Buf[0]送到Skid_No的高8位,Read_Buf[1]送到Skid_No的低8位。

至此,读程序编写完成。写或清除数据、重启Cobalt程序与此类似,此处不再一一列举。

需要特别注意的是,与一般的编写程序不同,Cobalt的程序不需要也不能在程序中作过多的判读条件,否则可能引起一些无法预知的问题。

收藏
赞一下
0