Working on printing and encoding RFID labels with the Zebra ZD500R Printer.
Here is my ZPL: The field data is F1001001, which i can encode and print on the label. However the EPC returned is F10010010000000000000000. How can i do one of 2 things. Either get the ZPL to 4 Bytes with no 0's or encode random hexadecimals at the front and my field data at the end?
My other question is how do make my field data increment and have both the RFID encoded tag and label match?
`^XA
^BCN,100,N,N
^FO30,50^FDF1001001^FS
^FO30,160^ADN,18,15^FDF1001001^FS
^FO30,220^ADN,10,20^^FD12/1/2024^FS
^FO30,260^ADN,10,20^^FDUYT 098^FS
^RFW,H^FDF1001001^FS
^RFR,H^FN11^FS
^FH^HV11,,EPC:[,]_0D_0A,L
^XZ`
I know I'm a bit late to the party but it might be useful if someone else stumbles over this post...
Try:
^RS8
^RFW,H,,,A^FD12345678^FS
When read with a RFID reader this will return the EPC code 12345678 without the trailing zeros (or encode random hexadecimals). For reference this was written to a tag using a Zebra ZQ511.
https://www.zebra.com/content/dam/zebra_new_ia/en-us/manuals/printers/common/programming/rfid3-pg-en.pdf
If you want to encode fixed EPC length, use the ^RF command with a length paramter :
Example 3: This example encodes 4 bytes of hexadecimal formatted data, starting in block 3
of Gen 2 EPC bank 1. (The ^RS command can be omitted for printers that use Gen 2 tag types
only.)
^XA
^RS8
^RFW,H,3,4,1^FD11112222^FS
^XZ
For incrementation, I suppose Zebra has a builtin variable management but I don't know how it works... But you are better calling the Zebra printer through an external program...
Related
Im using a BG96 modem to connect to AWS iot over MQTT.
I'm trying to set my MQTT Last Will and Testament with the following AT-command:
+QMTCFG:"will",(0-5),(0,1),(0-2),(0,1),"willtopic","willmessage"
Which works great.
But now I'm trying to add a JSON formatted string to "willmessage", so I need to add "" (double quotes) in there, which means I need to escape them in my command. But I have no clue if I can escape them or what the escape character is.
Things I tried: \" (backslash) and "" (double double quotes)
I looked in all of the BG96 datasheets, and I don't see it mentioned anywhere.
I had the same issue while using MQTT commands on a SIMCOM SIM800c, and I noticed that the regular backslash (\) escapes the quotation marks (as it does in c) when communicating directly with the GSM unit via a USB to TTL converter. To implement this in software I printed the following string to the UART connected to the GSM Modem:
AT+SMPUB=\"testTopicPost\",0,1,\"{\x5c\x22Key\x5c\x22 : \x5c\x22Value\x5c\x22}\"
What this basically does is send the raw \ and " characters to the GSM unit. Hope this solution works for you as well.
Escaping of " within a string is covered in chapter 5.4.2.2 String constants in the V.250 standard - which is a MUST READ for anyone writing code handling AT commands (read at least all of chapter 5):
String constants shall consist of a sequence of ... except for the characters """ ... . String constants shall be bounded at the beginning and end by the double-quote character (""" ... . ... The double-quote character, used as the beginning and ending string delimiter, shall be represented within a string constant as "\22".
So the escape mechanism is \22 not \x22. This should be universally the case for all modems and not something that is implementation dependent.
I did not find reference to documentation of MQTT and BG96 and you did not link any of your "all of the BG96 datasheets" so I am just providing example syntax for an imaginary command to send a JSON payload of {"key": "value"}:
AT+SOMECOMMAND=...,"{\22key\22: \22value\22}"
Some special characters have different values between the ASCII character set and the GSM character set.
i.e.
In the ASCII character set: \ = 0x5C.
In the GSM character set: Ö = 0x5C.
Beyond this point, some special characters must be entered using a specific way, such as a 2-byte representation. I suggest you check the standard/version of AT commands implemented on your hardware (i.e. GSM 07.07, GSM 07.05, manufacturer specific set...).
i.e. I'm using a GPS+GPRS modem from Ai-Thinker called A9G. In this one, to use the AT+MQTTPUB command with data formatted in JSON style, I need to append \x5c\x32\x32. So the module will interpret this as \22 and the server as \".
i.g.
"{\x5c\x32\x32Key\x5c\x32\x32:\x5c\x32\x32Value\x5c\x32\x32}"
at the cloud it will be:
{"Key":"Value"}
I am trying to print to a GT800 Zebra printer thru serial port.
I am using ZPL. I want to control the width which is fine in auto mode. To address that in the >^BC> command I am using Auto mode as no other size setting under ^BY works
Following is the code
^XA
^MMT
^PW831
^LL400
^LS0
^BY2,,76^FT225,141^BCN,76,Y,Y,N,A
^FD:RNIP29200082034^FS
^FO225,157^A#N,18,10,E:CAL002.FNT^FD26030-0892R^FS
^FO383,157^A#N,18,10,E:CAL002.FNT^FD08.01.20 12:00PM^FS
^FO225,187^A#N,18,10,E:CAL002.FNT^FDLAMP-DR RH^FS
^FO453,187^A#N,18,10,E:CAL002.FNT^FDXBA3^FS
^PQ1,0,0,Y
^XZ
There is a funny problem. If the ^BC mode = A then if three zeros come together gives issues for eg ABCD29200082034 it prints ABCD29200 and does not complete the barcode. But the other lines are getting printed. But if the data is ABCD29200182034 , there are no issues.
If BC mode = U then even if the code is ABCD29200182034 it prints 292001820347. Note 7 is added in the end.
I am clueless as to what is this issue. I remember facing this same issue in Honeywell printer too once.
Thanks
NOTE : I replaced the 000 with 111 and the problem persists.
ZPL Manual says the following
A= Automatic Mode :This analyzes the data sent and automatically determines the best packing method. The full ASCII character set can be used in the ^FD
statement — the printer determines when to shift subsets. A string of
four or more numeric digits causes an automatic shift to Subset C.
Note , it says a string of four or more numeric digits causes an automatic shift to subset C, but when the same string is 290010 it has no issues. I am really lost
I want to send a String to the Zebra printer in which I have e.g. the energy E_{N} printed whereas N must be a subscript of E. I can send strings to the printer which are in a normal format (e.g. 'bla=7'), but I have no idea how to include this subscript. Up to now I have strings like '^FDbla^FS'
I searched for the problem but could only find a solution for fixed problems like ^2, which were solved with a special character. There was no general solution.
The way I solved this was to strip out the subscripts and print them on the next half-line down.
^XA
^FT78,76^A0N,28,28^FH_^FDH PO ^FS
^FT78,90^A0N,28,28^FH_^FD 3 4^FS
^XZ
I need to be able to print Hebrew characters on my Epson TM-T20ii. I am trying to get my printer to switch to character code page 36(PC862) using
ESC t36
for some reason the printer is switching to code page 3 and then printing the number 6.
Is there a way to let the printer know that the 6 is part of my command?
If you know of a different workaround please comment below.
Thanks
You are making a mistake, you aren't meant to replace n with an actual number.
The proper syntax in your case would be ←t$
Explanation: the manual says "ESC t n", n referring to the page sheet, however you don't replace n with a number rather with the ASCII character n, so in your example 36 = $ because $ is the 36th character on the ASCII table.
I am using the following page as a helper:
http://www.tharo.com/documents/tech582.htm
On that page the EPC is broken down into the bits that need to be passed to the printer in ZPL.
Based off that I have used the following ZPL and sent it to the printer:
^XA
^RB96,8,3,3,20,24,38^FS
^RFW,E^FD48,3,5,0614141,100041,1^FS
^XZ
Unfortunately I do not get the same EPC written to the tag as outlined in the document.
Update: I am using the Zebra iOS SDK to encode the tags. In their documentation the ZPL is all in one line.
I would look to the authoritative standards for this one. See the TDS Standard from GS1 (p92 and p132) for details on the format, and the ZPL programming manual for the printer.
To summarize, the data you are encoding is:
Header: SGTIN-968 bits, decimal 48
Filter: 33 bits, decimal 3
Partition: 24 bit company / 20 bit item3 bits, decimal 5
Company: 061414124 bits, decimal 0614141
Item: 10004120 bits, decimal 100041
Serial: 138 bits, decimal 1
So the ZPL should be:
^XA
^RB96,8,3,3,24,20,38
^RFW,E^FD48,3,5,0614141,100041,1^FS
^XZ
Note that there is no ^FS between ^RB and ^RF, and that partition 5 mandates 24,20. 20,24 would be partition 6. The ^RB is a comma separated list of the field widths, the ^FD is a comma separated list of the decimal field data. I will also note that filter 3 is "Reserved". I would imagine the filter you need to be 1.