0

I'm attempting to read the TID bank of the current (Class 1 Generation 2) RFID tag sitting under the print-head in a Zebra RZ400 (running the latest firmware V53.17.22Z). I'm connected via USB.

I'm using the "Direct Communication" program in the Zebra Setup Utilities tool.

This is my program, annotated:

^XA             Start program
^RS8            Set RFID mode to Class 1 Gen 2
^RFR,H,0,8,2    Read the first 8 bytes of the TID bank as a Hexadecimal string
^FN1            Store the data into Memory Field #1
^FS             End Field
^HV1,,Foo       Transfer the contents of Memory Field #2 to the Host PC
^FS             End Field
^XZ             End program

When I run this, I do not get any output in the "Data received" window.

However, if I append a command like ^HH to the end (after the ^XZ) and re-run the program then the previous expected output will appear (followed by the output of ^HH). I need to keep on re-running the commands to get the previous output, making it impossible to see the current TID value.

It's as though the printer isn't flushing its output buffer until I run ^HH - other commands work temperamentally. The ^HH command isn't appropriate for my application because of the sheer amount of data it produces.

Is there some command that forces a flush?

1 Answer 1

1

I need to learn to read the documentation.

The ^HV command has 5 parameters. The sample code I based my program off only provides the first 3 parameters and I didn't think that the other parameters were relevant - mostly because Zebra gave the key parameter the nonobvious name "command applies to":

^HV(fieldNumber),(byteCount),(header),(terminator),(commandAppliesTo)

While I had set fieldNumber, byteCount, and header correctly (I ignored terminator) I completely overlooked the commandAppliesTo parameter, which states:

When ^PQ is greater than 1 or if a void label occurs, send one response for a label format or one for every label printed.

Accepted Values:

  • F = Format
  • L = Label

Default Value: F

So when you don't specify a value it defaults to F which means it will return the data only when the entire job has completed, by changing it to L I get a response for each label that is printed.

Here's my final working command:

^XA
^RS8
^RFR,H,0,8,2
^FN1
^FS
^HV1,256,HEADER,TERMINATOR,L
^FS
^XZ

Which gets me output like this:

HEADERE28011302000240CTERMINATORHEADERE28011302000241CTERMINATORHEADERE28011302000242CTERMINATOR

Sorted :)

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.