Zebra RFID API 读取访问操作代码返回空

问题描述

我正在尝试为 Zebra 手持式 rfid 阅读器开发一个小型应用程序,但找不到访问标签 MemoryBank 的方法。我的阅读器配置如下:

 private void ConfigureReader() {
    if (reader.isConnected()) {
        TriggerInfo triggerInfo = new TriggerInfo();
        triggerInfo.StartTrigger.setTriggerType(START_TRIGGER_TYPE.START_TRIGGER_TYPE_IMMEDIATE);
        triggerInfo.StopTrigger.setTriggerType(STOP_TRIGGER_TYPE.STOP_TRIGGER_TYPE_IMMEDIATE);
        try {
            // receive events from reader
            if (eventHandler == null){
                eventHandler = new EventHandler();
            }
            reader.Events.addEventsListener(eventHandler);
            // HH event
            reader.Events.setHandheldEvent(true);
            // tag event with tag data
            reader.Events.setTagReadEvent(true);
            reader.Events.setAttachTagDataWithReadEvent(true);
            // set trigger mode as rfid so scanner beam will not come
            reader.Config.setTriggerMode(ENUM_TRIGGER_MODE.RFID_MODE,true);
            // set start and stop triggers
            reader.Config.setStartTrigger(triggerInfo.StartTrigger);
            reader.Config.setStopTrigger(triggerInfo.StopTrigger);
        } catch (InvalidUsageException e) {
            e.printstacktrace();
        } catch (OperationFailureException e) {
            e.printstacktrace();
        }
    }
}

eventReadNotify 看起来像这样:

public void eventReadNotify(RfidReadEvents e) {
        // Recommended to use new method getReadTagsEx for better performance in case of large tag population
        TagData[] mytags = reader.Actions.getReadTags(100);
        if (mytags != null) {
            for (int index = 0; index < mytags.length; index++) {
                Log.d(TAG,"Tag ID " + mytags[index].getTagID());
                ACCESS_OPERATION_CODE aoc = mytags[index].getopCode();
                ACCESS_OPERATION_STATUS aos = mytags[index].getopStatus();
                if (aoc == ACCESS_OPERATION_CODE.ACCESS_OPERATION_READ && aos == ACCESS_OPERATION_STATUS.ACCESS_SUCCESS) {
                    if (mytags[index].getMemoryBankData().length() > 0) {
                        Log.d(TAG," Mem Bank Data " + mytags[index].getMemoryBankData());
                    }
                }
            }
        }
    }

当我扫描标签时,我得到了正确的 TagID,但 mytags[index].getopCode()mytags[index].getopStatus() 都返回空值。

我感谢每一个可能导致成功扫描的建议。

谢谢。

解决方法

我设法为我的问题找到了解决方案。要使用 Zebra 手持式扫描器执行任何读取或写入任务,必须满足以下两个条件。在此处查看参考:How to write to RFID tag using RFIDLibrary by Zebra?

// make sure Inventory is stopped
reader.Actions.Inventory.stop();

// make sure DPO is disabled
reader.Config.setDPOState(DYNAMIC_POWER_OPTIMIZATION.DISABLE);

您必须停止库存并确保禁用 dpo 才能从标签中获取 TagID 以外的数据。不幸的是,阅读 RFID 标签的文档中没有提到这一点。