package com.youchain.rfid; import com.alibaba.druid.sql.visitor.functions.Length; import com.uhf.api.cls.BackReadOption; import com.uhf.api.cls.ReadExceptionListener; import com.uhf.api.cls.ReadListener; import com.uhf.api.cls.Reader; import com.uhf.api.cls.Reader.READER_ERR; import com.youchain.basicdata.domain.LampLog; import com.youchain.utils.BaseStatus; import javax.swing.*; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Vector; public class RfidDocJava { public static String ip="192.168.0.224"; public static int POWER=3300; public static Reader rdr = null; private static HashSet vt; // Vector vt=new Vector(); public static void main(String[] args) { HashSet rfids = RfidDocJava.readRfid(); System.out.println(rfids); } public static String linkOpen(){ RfidDocJava rfidDocJava=new RfidDocJava(); return rfidDocJava.OpenReader().toString();// 初始化 } public static HashSet readRfid(){ RfidDocJava rfidDocJava=new RfidDocJava(); /*try { Thread.sleep(3000); }catch (Exception e){ }*/ rfidDocJava.stopRead(); return vt; } public static READER_ERR startRfid(){ RfidDocJava rfidDocJava=new RfidDocJava(); return rfidDocJava.startRead(); } public READER_ERR startRead(){ vt=new HashSet(); return StartReadTags(); } public void stopRead(){ rdr.StopReading(); } READER_ERR StartReadTags() { //初始化结BackReadOption BackReadOption m_BROption=new BackReadOption(); //本例只使用天线1进行盘存,如果要使用多个天线则只需要将使用的天线编 //号赋值到数组ants中,例如同时使用天线1和2,则代码应该改为ants[0] = 1; //ants[1] = 2;antcnt = 2; int antcnt=4; int[] ants=new int[]{1,2,3,4}; /*是否采用高速模式(目前只有slr11xx和slr12xx系列读写器才支持),对于 *一般标签数量不大,速度不快的应用没有必要使用高速模式,本例没有设置 *使用高速模式 * */ m_BROption.IsFastRead = true;//采用非高速模式盘存标签 ///非高速盘存模式下必须要设置的参数******************************************* //盘存周期,单位为ms,可根据实际使用的天线个数按照每个天线需要200ms //的方式计算得出,如果启用高速模式则此选项没有任何意义,可以设置为 //任意值,或者干脆不设置 m_BROption.ReadDuration = (short)(200 * antcnt); //盘存周期间的设备不工作时间,单位为ms,一般可设置为0,增加设备不工作 //时间有利于节电和减少设备发热(针对某些使用电池供电或空间结构不利 //于散热的情况会有帮助) m_BROption.ReadInterval = 0; //**************************************************************************** //高速盘存模式参数设置******************************************************** //以下为选择使用高速模式才起作用的选项参,照如下设置即可,如果使能高速 //模式,即把IsFastRead设置为true则,只需取消以下被注释的代码即可 //* //高速模式下为取得最佳效果设置为0即可 m_BROption.FastReadDutyRation = 0; //标签信息是否携带识别天线的编号 m_BROption.TMFlags.IsAntennaID = true; //标签信息是否携带标签识别次数 m_BROption.TMFlags.IsReadCnt = false; //标签信息是否携带识别标签时的信号强度 m_BROption.TMFlags.IsRSSI = false; //标签信息是否携带时间戳 m_BROption.TMFlags.IsTimestamp = false; //标签信息是否携带识别标签时的工作频点 m_BROption.TMFlags.IsFrequency = false; //标签信息是否携带识别标签时同时读取的其它bank数据信息,如果要获取在 //盘存时同时读取其它bank的信息还必须设置MTR_PARAM_TAG_EMBEDEDDATA参数, //(目前只有slr11xx和slr12xx系列读写器才支持) m_BROption.TMFlags.IsEmdData = false; //保留字段,可始终设置为0 m_BROption.TMFlags.IsRFU = false; return rdr.StartReading(ants, antcnt, m_BROption); } READER_ERR OpenReader() { READER_ERR err = READER_ERR.MT_OK_ERR; if (rdr != null) { rdr.CloseReader(); rdr=null; } //初始化读写器实例************************************************************ //当使用设备的串口进行连接的时候,InitReader_Notype函数的第一个参数也可 //能是串口号(例如com1)当设备仅有一个天线端口时(例如一体机或者发卡器), //InitReader_Notype函数的第二个参数也可能为1 //读写器出厂默认IP为192.168.1.100 com4 int portnum = 4; //注意是读写器天线端口数,不是已连接数量 rdr=new Reader(); err =rdr.InitReader_Notype(ip, portnum); System.out.println("connect:"+err.toString()); if (err != READER_ERR.MT_OK_ERR) return err; //**************************************************************************** //以下为必须要设置的参数和事件回调处理函数************************************ //设置读写器发射功率,本例设置为最大发射功率,可根据实际情况调整, //一般来说,功率越大则识别距离越远 //获取读写器最大发射功率 int[] maxpower=new int[1]; maxpower[0]=POWER; /*err=rdr.ParamGet(Reader.Mtr_Param.MTR_PARAM_RF_MAXPOWER, maxpower); //* if (err != READER_ERR.MT_OK_ERR) return err;*/ Reader.AntPowerConf apcf=rdr.new AntPowerConf(); apcf.antcnt=portnum; for(int i=0;i