冯韶霞
(山西机电职业技术学院 数控工程系,山西 长治 046000)
射频识别(Radio Frequency Identification,RFID)技术是一种利用射频通信技术实现的非接触式自动识别技术。与传统的条形码、磁卡等接触式识别技术相比,RFID可实现非可视、多目标识别,其突出优点是防磁、寿命长、容量大、信息可加密、内容可更改。如今RFID 技术已经广泛应用于人们的日常生活和生产制造中。PLC作为一类可靠性高的控制器,可以与RFID进行通信,从而实现各种控制功能。
一个完整的RFID系统是由标签、读写器、主机(上位机、工控机、服务器、PLC)组成的,如图1所示。其中,标签存储数据及信息,通常放置在被识别的物体上;读写器包括读或者读/写装置,一般带有附加的接口,如USB、RS232、RS485等,方便将所获得的数据传输给主机系统;主机通常使用PLC控制器与读写器通信,根据控制要求,控制读写器对标签内的信息进行读或写操作,并实现数据交换。
图1 射频识别系统的基本组成
RFID系统根据工作频率的不同可分为低频、高频、超高频系统。低频系统主要包括125 kHz和134 kHz两种,用于短距离传输,如门禁卡、校园卡。高频系统主要是13.56 MHz,是目前被广泛使用的频段,用于生产管理、运输、图书。超高频系统主要包括915 MHz、2.4 GHz、5.8 GHz等,可应用于需要较长读写距离的场合,如高速公路收费等系统中。
本文以思谷SG-HR-I2读写器为例,该读写器是一款一体式的高频RFID读写设备,其工作频率为13.56 MHz,符合ISO-15693标准,支持RS-485/RS-232通信(本文以RS485通信为例),能够操作遵守ISO-15693协议的电子标签。读写器与主机之间的控制指令均为一次性执行,读写器接收到控制指令后,无论执行结果如何,均会返回消息以确认指令的执行情况。
思谷高频读写器通过访问不同的命令码,从而实现不同的指令,并返回相应的数据,其命令码如表1所示。
表1 高频读写器命令码
表1中,UID 数据区为RFID标签的出厂ID存放区,数据为只读,UID长度为 8 byte,地址范围 0x800E~0x8 011。
主机与读写器之间通信遵循的协议如表2所示。
表2 主机与读写器通信协议
协议的字段说明如下:
(1) 帧头(Header):长度为1 byte,取固定值0xFF。
(2) 包长度(Len):长度为1 byte,包含Len、Cmd、Data字段。
(3) 命令码(Cmd):长度为1 byte,参照表1。
(4) 用户数据(Data):长度为Nbyte。
(5) CRC校验:长度为2 byte,含Header、Len、Cmd、Data字段的CRC校验。其中Data格式如表3所示。
对Data段的说明如下:
(1) CtrlFlg:为2 byte,其中Bit0表示ReaderID,Bit1~Bit14默认取0,Bit15置位,表示此帧为响应帧,Bit15复位,表示此帧为请求帧。
(2) CtrlFlg 参数包括:
Status:为1 byte, 表示命令执行状态, 当CtrlFlg 的Bit15置位,此字段出现,此帧为响应帧,如果请求指令发送成功,则该字段取值为0x00, 请求指令发送失败,该字段取值为非0x00; Bit15复位,此字段不出现,此帧为请求帧。
ReaderID:为1 byte,Bit0:ReaderID 置位,此字段出现,此时只有读写器 ID 与 ReaderID 一致, 读写器才响应; Bit0:ReaderID 复位,此字段不出现,读写器ID与ReaderID默认值为0x00。
(3) 命令参数:Mbyte,根据各个功能来定义。
主机到读写器的指令为请求帧,读写器到主机的指令为响应帧,在响应帧指令中CtrlFlg除最高位置位,其他与请求帧保持一致,ReaderID同样与请求帧一致。
表3 Data格式
2.3.1 主机读取UID值
命令编码:0x01。
功能说明:读取天线场范围内标签的UID,不支持多标签读取。
(1) 首先主机向读写器发送读取请求指令,格式如下:
FF 05 01 0001 00 78D8
其中: FF表示帧头;05表示包长度;01表示命令码;0001表示CtrlFlg;00表示ReaderID;78D8表示CRC校验码。
(2) 命令执行完成,读写器响应数据的格式为:
FF 0E 01 8001 00(成功) 00 (797FBB39500104E0) 7D79
或
FF 06 01 8001 80(失败) 00 6930
其中:FF/FF表示帧头;0E/06表示包长度;01/01表示命令码;8001/8001表示CtrlFlg;00(成功)/ 80(失败)表示Status;00/00表示ReaderID;797FBB39500104E0表示UID值;7D79/6930表示CRC校验码。
2.3.2 主机按字节读取数据
命令编码:0x11。
功能:按照字节读取标签内存,需要配置字节的起始地址和字节数量。
(1) 首先主机向读写器发送读取请求指令,读地址 01 长度为 8 的请求数据,格式如下:
FF 08 11 0001 00 0001 06 3572
其中:0001为2 byte,表示读取寄存器的起始地址;06为1 byte,表示读取的字节数量。
(2) 命令执行完成,读写器返回的指令格式为:
FF 0C 11 8001 00(成功) 00 (AA AA AA AA AA AA) 9AB5
或
FF 06 11 8001 80(失败) 00 AAF1
其中:AAAAAAAAAAAA表示请求的数据。
2.3.3 主机按字节写入数据
命令编码:0x12。
功能:按字节的形式写标签内存。
(1) 首先主机向读写器发送写数据指令,从 0 地址开始写 5 个字节数据,格式如下:
FF 0D 12 0001 00 0000 05 (0001020304)66ED
其中:0000表示写入寄存器的起始地址;05表示写入的字节数量;0001020304表示需写入的数据。
(2) 命令执行完成,读写器返回的指令格式为:
FF 06 12 8001 00(成功) 00 6AD4
或
FF 06 12 8001 80(失败) 00 AAB5
本文使用西门子S7-1200型号为1215C的PLC作为主机与思谷SG-HR-I2读写器进行RS-485通信,通信板使用CM 1241。博途软件包中包含串行通信指令:Port_Config、Send_P2P、Receive_P2P。
在博途的硬件目录下选择 1215C 型号的 CPU 和 CM 1241 通信板进行硬件组态。双击 CM 1241 通信板查看其硬件标识符为271。配置Port_Config、Send_P2P、Receive_P2P的参数,新建全局数据块DB102和DB104,DB102用于直接与读写器传输数据,DB104用于给DB102赋值。Port_Config指令模块如图2所示。
图2 Port_Config指令模块
从DB102.DBB22~DB102.DBB42共21个字节,表示需要发送给RFID读写器的数据,如图3所示。
图3 发送数据模块
从DB102.DBB0~DB102.DBB20共21个字节,表示RFID读写器响应的数据需要存储的数据块地址,如图4所示。
从DB104.DBB0~DB102.DBB20共21个字节,表示PLC发送给读卡器读取标签UID值的指令,如图5所示。其中DB104.DBB0~DB102.DBB7对应发送指令为:
FF 05 01 0001 00 78D8
从DB104.DBB22~DB102.DBB42共21个字节,表示PLC发送给读卡器需要读取标签寄存器值的指令,如图6所示。其中DB104.DBB22~DB102.DBB32对应发送指令为:
FF 08 11 0001 00 0000 0A 64F2
图4 接收数据模块
图5 PLC发送给读卡器读取标签UID值的指令
从DB104.DBB44~DB102.DBB64共21个字节,表示PLC需要写入到读卡器中值的指令,如图7所示。其中DB104.DBB44~DB102.DBB53对应发送指令为:
FF 12 12 0001 00 00000A
(00010203040506070809) 66ED
本文介绍通过RS-485串口,在PLC与RFID之间实现通信的方法,重点介绍了对RFID读卡器中数据的读写功能,这种通信方式简单,灵敏度高,抗干扰能力强,广泛应用于工业领域中。
图6 PLC发送给读卡器需要读取标签寄存器值的指令
图7 PLC需要写入到读卡器中值的指令