nrwms_java/youchain-system/src/main/java/com/youchain/rfid/RfidDocJava.java

224 lines
9.1 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<String> vt=new Vector<String>();
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<String> 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();
/* 初始化*/
rfidDocJava.OpenReader().toString();
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<apcf.antcnt;i++)
{
Reader.AntPower jaap=rdr.new AntPower();
jaap.antid=i+1;
jaap.readPower=(short)maxpower[0];
jaap.writePower=(short)maxpower[0];
apcf.Powers[i]=jaap;
}
err=rdr.ParamSet( Reader.Mtr_Param.MTR_PARAM_RF_ANTPOWER, apcf);
//*
if (err != READER_ERR.MT_OK_ERR)
return err;
//设置读写器执行GEN2空中接口协议
Reader.Inv_Potls_ST ipst=rdr.new Inv_Potls_ST();
ipst.potlcnt=1;
ipst.potls=new Reader.Inv_Potl[1];
for(int i=0;i<ipst.potlcnt;i++)
{
Reader.Inv_Potl ipl=rdr.new Inv_Potl();
ipl.weight=30;
ipl.potl= Reader.SL_TagProtocol.SL_TAG_PROTOCOL_GEN2;
ipst.potls[0]=ipl;
}
//不用检查返回值,不会失败
err= rdr.ParamSet(Reader.Mtr_Param.MTR_PARAM_TAG_INVPOTL, ipst);
//设置盘存到标签时的回调处理函数
rdr.addReadListener(RL);
//*
//设置读写器发生错误时的回调处理函数
rdr.addReadExceptionListener(REL);
//****************************************************************************
//以下为根据应用需求可能要设置的参数******************************************
//*
//标签数量比较大,且移动速度缓慢或静止不动,设置为Session1可取得更
//好效果,反之标签数量较少移动速度较快应设置为Session0,读写器默认
//为Session0
int[] gen2session=new int[]{1};
err =rdr.ParamSet(Reader.Mtr_Param.MTR_PARAM_POTL_GEN2_SESSION, gen2session);
if (err != READER_ERR.MT_OK_ERR)
return err;
return READER_ERR.MT_OK_ERR;
}
ReadListener RL=new ReadListener()
{
@Override
public void tagRead(Reader r, final Reader.TAGINFO[] tag) {
// TODO Auto-generated method stub
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
for(int i=0;i<tag.length;i++){
String v=Reader.bytes_Hexstr(tag[i].EpcId);
System.out.println("RFID》"+Reader.bytes_Hexstr(tag[i].EpcId)+":"+v.length());
// RFID长度验证
boolean flag = BaseStatus.lengthVerifyList.contains(Long.valueOf(v.length()));
if (flag) {
// String epcId = tag[i].AntennaID;
vt.add(Reader.bytes_Hexstr(tag[i].EpcId));
// System.out.println("测试》"+epcId+":"+Reader.bytes_Hexstr(tag[i].EpcId));
}
}
}
});
}
};
ReadExceptionListener REL=new ReadExceptionListener()
{
@Override
public void tagReadException(Reader reader, READER_ERR readerErr) {
System.out.println("读写器错误");
}
};
}