用户登陆 用户注册
您的位置:首页> 技术文章>内容正文
PLC及PC与RFID射频识别读写器串行通讯的实现
[正文]:本文以ems(escortmemorysystems)的rfid射频识别读写器lrp830为例,分别介绍了可编程控制器及微机与rfid射频识别读写器进行串行通讯,从而读取标识数据的具体实现方法:plc通过串行i/o通讯协议与rfid读写器实现串行通讯,pc通过windows多线程技术与rfid读写器实现串行通讯。
文中给出了实例。
rfid射频识别在我国的应用才刚刚开始,前景非常广阔。
本文所述方法具有一定代表性,对于推动rfid射频识别技术在工业自动化等领域的应用,具有一定的积极意义。
     rfid射频识别系统简介      rfid的全称是radiofrequencyidentification,即射频识别,它利用无线电射频实现可编程控制器(plc)或微机(pc)与标识间的数据传输,从而实现非接触式目标识别与跟踪。
     一个典型的rfid射频识别系统包括四部分:标识、天线、控制器和主机(plc或pc),系统结构图见图1。

点击查看大图片
     图1rfid射频识别系统结构图      标识一般固定在跟踪识别对象上,如托盘、货架、小车、集装箱,在标识中可以存储一定字节的数据,用于记录识别对象的重要信息。
当标识随识别对象移动时,标识就成为一个移动的数据载体。
以rfid在计算机组装线上的应用为例,标识中可以记录机箱的类型(立式还是卧式)、所需配件及型号(主板、硬盘、cd-rom等)、需要完成的工序等。
又如在邮包的自动分拣和跟踪应用中,可以在标识中存储邮包的始发地、目的地、路由等信息。
     天线的作用是通过无线电磁波从标识中读数据或写数据到标识中。
天线形状大小各异,大的可以做成货仓出口的门或通道,小的可以小到1mm。
     控制器用于控制天线与plc或pc间的数据通信,有的控制器还带有数字量输入输出,可以直接用于控制。
控制器与天线合称读写器。
     plc或pc根据读写器捕捉到的标识中的数据完成相应的过程控制,或进行数据分析、显示和存储。
     本文即以具有代表性的美国ems(escortmemorysystems)公司的13.56mhz无源rfid射频识别读写器lrp830为例,介绍了plc及pc与rfid读写器进行串行通讯,从而获取标识数据,用于控制或数据处理的具体实现方法。
     rfid射频识别读写器的命令集及串行通讯协议      以lrp830读写器为例,lrp830是ems13.56mhz无源系列射频读写器中的一种,它的标识和天线可以在水下或高温腐蚀环境中正常工作,可以一次读写99个标识,最大读写距离63.5cm。
它带有两个串口,一个devicenet接口,4个di隔离输入,4个di隔离输出,保护等级ip66,nema4封装,非常适合于在工业自动化中应用。
     lrp830读写器上的串口是合在一起的,通过专用电缆可以分接出com1和com2两个串口,两个串口作用不同,com1用作通讯口,从plc或pc接收命令并返回响应数据,可以配置为rs232、rs422或devicenet接口。
com2用于配置系统参数(如读写模式、波特率等)或下载系统升级程序。
     lrp830可以与所有ems的fasttracktm系列无源标识结合使用,每个标识中可以存储48个字节的数据,另外还有8个字节用于存储只读的唯一的序列号(出厂前由厂方设定)。
     lrp830提供了单标识读写命令集(见表1),多标识读写命令与此类似。
     表1单标识命令集 
点击查看大图片
     每种命令可以有三种通讯协议:abxs、abxf、abxascii。
表2是abxs通讯协议持续读单标识命令的一个例子,其它命令与此类似。
     表2abxs协议持续读单标识命令举例  
点击查看大图片
     rfid读写器与plc串行通讯      以emsrfid读写器lrp830与gefanucversamaxplc的串行通讯为例。
versamaxplc的rs232串口与lrp830的com1接线对应关系见表3。
     表3versamax与lrp830读写器的串口接线对应关系 
点击查看大图片
     通过plc控制rfid读写器读写标识数据的实现流程如图2所示。
  
点击查看大图片
     图2plc读写rfid标识数据的程序结构框图      以下是具体实现时要注意的技术细节:      1)lrp830与versamaxplc的串口相连时,信号线要错线,即versamaxrs232口的txd/rxd要接lrp830的com1的rxd/txd,lrp830与pc连接时则是直通的。
     2)plc使用串行i/o通讯协议与rfid读写器通讯。
串口初始化、设置缓冲区、清除缓冲区、写串口、读串口状态等操作都是先通过一组blkmovword指令给commreq的数据块赋值,然后执行commreq指令完成的。
例如,以下语句(见图3)通过rfid读写器写10个ff(46h)到标识中,从第一个字节写起。
 
点击查看大图片
     图3plc与rfid读写器串行通讯例程      3)要注意plc写标识数据只需要执行写串口命令就可以了,而plc读标识数据的过程则包含两步:一是plc执行写串口命令,即写读标识命令到rfid读写器;二是plc执行读串口命令,捕捉rfid读写器返回的数据。
这是由于rfid读写器在接到读标识命令后,会返回读命令的响应信息到串口缓冲区,其中包含了读到的标识数据。
     4)使用abxs协议时,要注意命令字的msb和lsb的顺序问题。
rfid读写器与plc通讯时,要将读写器指令的msb和lsb颠倒一下,即lsb在前,msb在后。
例如图3中,第二个blkmovword指令的第三个输入in3应为16#4aa,而非16#aa04。
     5)利用读写器指示灯的变化辅助plc程序调试。
lrp830读写器的面板上有两排led指示灯,其中,当“ant”亮时,表示天线在执行读写操作;“com1”亮时,表示串口1执行了写命令,“rf”亮时,表示有标识被读写且仍在读写范围内。
 rfid读写器与pc串行通讯      仍以emsrfid读写器lrp830为例。
与pc机相连时,lrp830的com1/com2与pc机的9针串口      com1/com2的连接对应关系见表4。
  
点击查看大图片
     表4lrp830的串口与pc串口连接对应关系      在pc机上开发串口通讯程序,可以使用现有的通讯控件(如vb的mscomm),也可以使用高级编程语言结合windowsapi实现。
本文用delphi6在windows2000环境中,应用多线程技术实现了pc与rfid读写器间的串行通信。
使用delphi的优点是,delphi对许多windows底层api函数作了封装,简化了程序代码。
使用多线程的优点是,程序编写比较灵活,而且串口监听线程不影响主线程其它任务的执行。
程序结构框图见图4。
       
点击查看大图片
      图4pc与rfid读写器串行通信程序框图      在具体实现上述思路时,要注意以下技术细节:      1)根据rfid读写器通讯协议的特点,读写器每执行一个主机发来的指令,无论是读标识还是写标识,都会返回一定字节的响应数据,用以确认命令已执行或返回标识中存储的数据。
因此,主机读或写标识数据都需要先写(串口命令)后读(返回的串口数据)。
     2)为了使程序体现模块化的设计思想,易于调试和维护,可以把各种rfid命令预先存入命令数组中,而把主机对rfid串口的命令和捕捉rfid读写器命令响应编制成单独的子程序,在调用它之前,先调用命令字赋值子程序。
     3)对主线程的说明:在主线程中用createfile函数建立串口事件,设置缓冲区和通信参数,创建串口监听线程。
用writefile写串口函数完成通过rfid读写器写数据到标识中。
部分程序如下:      hcom:=createfile(pchar(whichcom),generic_writeorgeneric_read,      0,0,open_always,file_attribute_normal,0);//产生串口事件      setupcomm(hcom,totalbytes,totalbytes);//设置缓冲区      getcommstate(hcom,lpdcb);      lpdcb.baudrate:=baudrate;//波特率      lpdcb.stopbits:=stopbit;//停止位      lpdcb.bytesize:=bytesize;//每字节有几位      lpdcb.parity:=parity;//奇偶校验      setcommstate(hcom,lpdcb);//设置串口      mycomm:=tcomm2.create(false);//创建串口监听线程      writefile(hcom,writebuffer,sizeof(writebuffer),lpbytessent,0);//写标识命令      ……      4)对串口监听线程的说明:      程序中用到的方法主要有synchronize和terminate。
synchronize是delphi提供的一种安全调用线程的方法,它把线程的调用权交给了主线程,从而避免了线程间的冲突,这是一种最简单的线程间同步的方法,可以省去用其它语言编程时需要调用的多个windowsapi函数,例如createevent(创建同步事件),waitforsingleobject(等待同步事件置位),resetevent(同步事件复位),postmessage(向主线程发送消息)等。
用delphi编写多线程通讯程序的优点是显而易见的。
例如以下语句即可实现串口监听线程:      while(notterminated)do//如果终止属性不为真      begin      dwevtmask:=0;      wait:=waitcommevent(hcom,dwevtmask,lpol);//等待串口事件      ifwaitthen      begin      synchronize(dataprocessing);//同步串口事件      end;      end;      上述程序一旦检测到串口事件,就调用dataprocessing方法读串口数据,并写入数组,供程序其它部分调用,另外还要检测何时退出线程,程序如下:      proceduretmainform.dataprocessing      begin      clear:=clearcommerror(hcom,lperrors,@comms);//清除串口错误      ifclearthen      begin//处理接收数据      readfile(hcom,readbuffer,comms.cbinque,lpreadnumber,0);      recebytes[i+arrayoffset]:=readbuffer;      //读串口缓冲区数据并写入数组      gameover:=(recebytes[i+arrayoffset-1]=byte(36;ff))      and(recebytes[i+arrayoffset]=byte(36;ff));//终止条件      ifgameoverthenterminate;//退出线程      ……      end;      end;      其中,terminate将线程的terminated属性设置为true。
线程一旦检测到terminated属性为true,就会结束线程,去执行onterminate事件,在onterminate事件中对采集到的rfid标识数据进行处理。
由于rfid读写器的abxs协议的命令响应的最后两个字节都是ff,所以可以将收到连续的两个ff作为终止线程的条件之一。
     程序应用举例:      以持续读标识中所有48字节数据命令为例,在程序中用writebuffer数组保存该命令,对writebuffer数组的各个元素赋值如下:      writebuffer[0]:=byte(36;aa);writebuffer[1]:=byte(36;0d);//连续读标识命令字头      writebuffer[2]:=byte(36;00);writebuffer[3]:=byte(36;00);//从第一个字节开始读      writebuffer[4]:=byte(36;00);writebuffer[5]:=byte(36;30);//读48个字节数据      writebuffer[6]:=byte(36;00);writebuffer[7]:=byte(36;02);//延时2秒      writebuffer[8]:=byte(36;ff);writebuffer[9]:=byte(36;ff);//连续读标识命令字      执行持续读标识命令后,程序以writebuffer数组写串口,rfid读写器执行此命令,并返回响应数据。
   
点击查看大图片
      图5持续读标识命令执行结果      从图5窗口中可以看到,前4个字节aaodffff就是lrp830读写器对持续读命令的确认信息,然后是数据报文头aaod和标识中48个字节的数据(每字节数据前加00),最后是数据报文尾ffff。
     结束语      本文介绍了可编程控制器及微机与rfid射频识别读写器进行串行通讯,从而获取标识中的数据的具体实现方法:plc通过串行i/o通讯协议与rfid读写器实现串行通讯,pc通过windows多线程技术与rfid读写器实现串行通讯。
本文所述方法具有通用性,对于其它厂家的plc和rfid系统也有一定的参考价值。
rfid射频识别技术在我国工业自动化等领域的应用才刚刚开始,前景非常广阔。
本文对于促进该技术的推广应用具有一定的积极意义。



网站首页 培训课程 维修指南
技术文章 家电专栏 供应信息
求购信息 培训资讯 展会信息
电脑专栏 教程下载 资料下载
常用软件 PLC教程 PLC资料
变频伺服 低压电器 维修资料
人机界面 自控仪表 工控机类
文章标题: 搜文章
中国工控资源网手机版 2012
电话:010-67577139 13811659603
培训咨询QQ:657167934 471895637 销售咨询QQ:623769457
联系邮箱:zggkzyw@163.com
 京ICP备11002135号
报时(2026-04-07 01:54:11) 流量统计