11 Replies Latest reply on Oct 6, 2015 7:00 AM by Beverly Vinson

    Read Tag without printing

    Sonu Kapoor



      I see that there is a way to read the current tag and print the output to a label using the below ZPL.







      Two questions:

      1. Is there a way to read it through the SDK without printing it? The reason I am asking is, I need to encode and print on the tag. Before encoding though I need to know what the current data is on the tag. After that I can print.
      2. Do you have an example on how to read using your iOS SDK?



        • Re: Read Tag without printing
          Sonu Kapoor


          • Re: Read Tag without printing
            Manuel Caicedo-Rivera

            We have developed some pieces of ZPL code for this particular use case. The below ZPL code would allow you to encode a tag and receive back a response with the code for saving it a database.






            ^FN1^FDSerial Number: #Q^FS



            1 of 1 people found this helpful
              • Re: Read Tag without printing
                Sonu Kapoor

                Thanks. Would I still use the write method of the iOS SDK?

                  • Re: Read Tag without printing
                    Sonu Kapoor

                    Please share iOS code to read the data into an iOS object so that it can be sent to our database.

                    • Re: Read Tag without printing
                      Manuel Caicedo-Rivera

                      We do not have this implemented for IOS, but we have added a seudo code(see below) that will allow you to implement multithreads for continuous tags encoding/prints. The logic should be same to be implemented in IOS.


                      string ip = "";
                      event epcFound(int threadID, string epc);
                      deligate epcFoundHandler epcFound;
                      int [] idList;


                      string [] jobList;
                      this += epcFoundHandler(handleFoundEPC);
                      Random rand = new Random();

                      while (true)

                      // open a maximum of 8 connections at a time
                      while ((jobList.Length > 0) && (idList.Length <= 8)

                      int threadID = rand.next();
                      Thread t = new Thread(printAndPullEPC);
                      t.parameters(jobList[0], threadID);
                      // store thread id and job

                      // check for new jobs


                      public handleFoundEPC(int threadID, string epc)


                      // store epc

                      public void printAndPullEPC(string printJob, int threadID)
                      ZebraPrinter printer = new ZebraPrinter();
                      string epc = printer.sendAndWaitForResponse(printjob, 1000, 200);
                      epcFound(threadID, epc);




                      Manuel Caicedo

                        • Re: Read Tag without printing
                          Sonu Kapoor

                          There is no sendAndWaitForResponse method available for that class in iOS.

                            • Re: Read Tag without printing
                              Manuel Caicedo-Rivera

                              You can try with the ZebraPrinterConnection Class for this operation in IOS, then you can separate this with two different methods in IOS.


                              1.) ZebraPrinterConnection:write -> Send data to the printer

                              2.) ZebraPrinterConnection:Read -> Read data from the printer.


                                id<ZebraPrinterConnection, NSObject> thePrinterConn = [[TcpPrinterConnection alloc] initWithAddress:theIpAddress andWithPort:9100];

                                 // Open the connection - physical connection is established here.

                                BOOL success = [thePrinterConn open];

                                 // This example prints "This is a ZPL test." near the top of the label.

                                NSString *zplData = @"^XA^FO20,20^A0N,25,25^FDThis is a ZPL test.^FS^XZ";

                                NSError *error = nil;

                                 // Send the data to printer as a byte array.

                                success = success && [thePrinterConn write:[zplData dataUsingEncoding:NSUTF8StringEncoding] error:&error];

                                 if (success != YES || error != nil) {

                                UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];

                                [errorAlert show];

                                [errorAlert release];


                                 // Close the connection to release resources.

                                [thePrinterConn close];

                                [thePrinterConn release];

                                • Re: Read Tag without printing
                                  Sonu Kapoor

                                  The Read function however does not take any arguments to send the command. How does it know what to read?

                                    • Re: Read Tag without printing
                                      Manuel Caicedo-Rivera

                                      One thought is based in the sequence of the data received while the connection is open. However, we do not have sample code at this time to test this use case. You probably would need to make three calls on the same connection object…first to ‘write’, second to ‘waitForData’, third to ‘read’…., it is possible that maybe you would need to make an additional call to ‘hasBytesAvailable’. You can try this suggested implementation, and you could let us know what results you got.

                                        • Re: Read Tag without printing
                                          Sonu Kapoor

                                          Ok, but but I can not write first. I need to read before writing.

                                            • Re: Read Tag without printing



                                              On page 35 of the RFID programming manual, there is an example on how to read the data from the tag and then print it (it does assume that the

                                              RFID Label Format is a specific format, namely that it uses Format 1, "Encode a Gen 2 Tag in Hexadecimal" on page 33 of the manual.


                                              Pages 93 & 94, show Set Get Do commands that allow you to read data from the RFID tag. To use these commands in iOS you would need to use the SGD utility class. You can find details on this class in the SDK documentation. I would try the above commands and see if it gets you the information that you need.


                                              Also, could you please help me understand better your use case, why do you need to read the tag before you write to it?


                                              Thank you,