如何使用C#和.NET为Zebra打印机编码RFID标签?

时间:2015-10-28 21:05:15

标签: c# .net encoding rfid zebra-printers

问题

我正在使用Visual Studio,C#和.NET。我也在使用ZPL命令向Zebra ZD500R打印hello world。我目前还没有成功地弄清楚如何使用上述方法对RFID标签进行编码。我知道存在适用于Java的SDK,但我的环境是严格的Microsoft堆栈。

打印的RFID标签在整个标签上印有VOID。像VOIDVOIDVOIDVOIDVOIDVOID之类的东西。我已在下面添加了更新的代码。

代码

以下是我在研究Zebra文档和示例代码后编写的以下代码:

  public static void PrintLabels()
        {
            try
            {

                string ipAddress = "127.0.0.1";
                int port = 1337;

                // ZPL Command(s)
                string ZPLString =
                "CT~~CD,~CC^~CT~" +
                "^XA~TA000~JSN^LT0^MNW^MTT^PON^PMN^LH0,0^JMA^PR4,4~SD10^JUS^LRN^CI0^XZ" +
                "^XA" +
                "^MMT" +
                "^PW300" +
                "^LL0526" +
                "^LS0" +
                "^FT267,433^A0I,42,40^FH\\^FDHello World^FS" +
                "^RS8" +
                "^RFW,H^FD1234^FS" +
                "^PQ1,0,1,Y^XZ";  






                // Open connection
                System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient();
                client.Connect(ipAddress, port);

                // Write ZPL String to connection
                System.IO.StreamWriter writer =
                new System.IO.StreamWriter(client.GetStream());
                writer.Write(ZPLString);
                writer.Flush();

                // Close Connection
                writer.Close();
                client.Close();

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

这是一个基本的例子,但通过打印你好世界的诀窍。据我所知,我认为RFID编码方面应该是字符串ZPLString中的新行。不幸的是,当我查看Zebra编程书时,我没有看到任何ZPL命令来确认这个想法。

尝试

我已尝试解决此问题。

  • Zebra ZPL的RTFM找到here
  • 下载了Zebra Label设计器。找不到编码功能。
  • 浏览了ZPL示例代码。
  • 检查堆栈溢出是否存在相关问题。我找到的最近的是thisthis,但仍然不是我的用例。

任何建议,提示或评论都将深表感谢。

1 个答案:

答案 0 :(得分:1)

一些注意事项 -

查看第381页(表18),了解与该打印机兼容的命令列表。

第400和401页包含一些写作示例。第一个是:

^XA
^RS8
^RFW,A^FD00 my data^FS
^XZ

让我们剖析一下。 ^ XA(开始)和^ XZ(结束)。加上另外两个:^ RS和^ RF。

^ RS - 设置RFID参数

UHF Printers
0 = None
1 = EPC Class 0
2 = EPC Class 0 Plus
3 = EPC Class 1 64-bit
4 = EPC Class 1 96-bit
5 = UCODE EPC 1.19
6 = Impinj Class 0 Plus
7 = ISO 18000-06A
8 = EPC Class 1, Generation 2 (Gen 2)
9 = ISO 18000-06B

不确定您使用的是哪个转发器。相应调整。

然后就是^ RF:读取或写入RFID格式。 在这个例子中,他们以ASCII(^ RFW,A)

进行写操作

接下来,我们看到

^FD00 my data^FS

哪个是数据的开始和结束标记。

另一个例子,这次写十六进制:

^XA
^RFW,H^FD1234^FS
^XZ

您看到,H使用的是,A,而不是^XA ^FO10,10 ^A0,100,150 ^FDHello, World!^FS ^RS8 ^RFW,H^FD1234^FS ^XZ 。我们再次看到^ FD和^ FS分隔数据。

摘要......

我猜你想要这样的东西(让我们假设你正在写十六进制):

string ZPLString = "^XA^FO10,10^A0,100,150^FDHello, World!^FS^RS8^RFW,H^FD1234^FS^XZ";

所以,在c#:

^RS

您可能需要投入|MatId | BaseId |Flag|Pkg1| CS1 -------------------------------- |3001 | 3001 | 1 | 20 | 2 | |3002 | 3001 | 0 | 15 | 3 | |3003 | 3001 | 0 | 10 | 4 | 并离开上图。 发送命令字符串时,您不需要添加任何额外的换行符或CR。

std_disclaimer:我只使用ZPL进行打印,而不是使用RFID编码。确保您拥有适用于此设备的正确发送应答器。根据文档,它支持与UHF EPC Gen 2 V1.2 /兼容的标签 ISO 18000-6C。

我会首先使用Zebra的实用程序测试你的ZPL。如果有效,则开始使用c#播放。只是试图限制变量的数量;)