How to access both EPC and USER memory banks in RFID tag (Motorola EMDK + .NET)

4.5k Views Asked by At

We are developing a custom fixed assets solution for a customer using RFID tags and Motorola 919Z handheld reader. So far it has been going well, as we based on the Motorola examples for its EMDK. We are using VB.NET.

The problem is, we have a set of Confidex Steelwave tags that cannot be tagged in a printer as they are hard tags, and so they were tagged using an example software, saving the relevant data into the USER memorybank, while another different set of printable Confidex tags was tagged using a Zebra RZ400 printer, and the relevant data was written to the EPC Tag ID field.

Now, we are asked to read both fields (EPC Tag ID in one case, USER memorybank in the other), at the same time. That is, if the relevant data was tagged in the USER memorybank, the Tag ID contains irrelevant hex numbers, and if the EPC Tag ID was used, the USER memorybank is blank or zero-filled.

Now, we cannot find the way to read both banks at the same time without the user stopping reading and switching banks (in software), so we are wondering if it is even possible in the first place.

I'm not sure if I should post code, as it is kinda long... maybe the relevant part is that:

If we use Inventory.Perform ...it doesn't read the USER memorybank, and it doesn't seem to take access filters

If we use OperationSequence.PerformSequence ...it forces you to specify the memorybank.

Thanks for your time.

2

There are 2 best solutions below

0
On

You need to perform operation sequence before the inventory of tags where you have to set memory bank.After it whenever you will start inventory,you will get EPC in tagID Property and memory bank data in MemoryBankData Property.

2
On

I have the same problem and I found the solution.

Use OperationSequence.PerformSequence, but the trick is to add multiple operations first. So add an operation that reads the USER bank, then add another operation that reads the EPC bank, like so:

RFIDReader reader = new RFIDReader();
reader.Connect();

MEMORY_BANK[] banks = new MEMORY_BANK[] {
    MEMORY_BANK.MEMORY_BANK_EPC, 
    MEMORY_BANK.MEMORY_BANK_USER, 
    MEMORY_BANK.MEMORY_BANK_RESERVED, 
    MEMORY_BANK.MEMORY_BANK_TID
};
foreach(MEMORY_BANK bank in banks) {
    TagAccess.Sequence.Operation op = new TagAccess.Sequence.Operation();
    op.AccessOperationCode = ACCESS_OPERATION_CODE.ACCESS_OPERATION_READ;
    op.ReadAccessParams.MemoryBank = bank;
    reader.Actions.TagAccess.OperationSequence.Add( op );
}

Then simply call reader.Actions.TagAccess.OperationSequence.PerformSequence, then you'll get Read events for each bank, for each tag, for as long as the tags are within readable distance of the scanner.