c# - 如何使用 C# 和 .NET 对 Zebra 打印机的 RFID 标签进行编码?

标签 c# .net encoding rfid zebra-printers

问题

我正在使用 Visual Studio、C# 和 .NET。我还使用 ZPL 命令将 hello world 打印到 Zebra ZD500R。我目前未能成功地弄清楚如何使用上述方法对 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);
            }
        }

这是一个基本的示例,但通过打印 hello world 来实现这一点。据我所知,我认为 RFID 编码方面应该是字符串 ZPLString 中的新行。不幸的是,当我查看 Zebra 编程书籍时,我没有看到任何 ZPL 命令来证实这个想法。

尝试

我已执行以下操作来尝试解决此问题。

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

任何建议、提示或评论将不胜感激。

最佳答案

一些注释 -

查看第 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。我们再次看到 ^FD 和 ^FS 分隔数据。


总结...

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

^XA
^FO10,10
^A0,100,150
^FDHello, World!^FS
^RS8
^RFW,H^FD1234^FS
^XZ

所以,在 C# 中:

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

您可能需要添加 ^RS 并离开上面的图表。 发送命令字符串时,不需要添加任何额外的换行符或 CR。

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

我会首先使用 Zebra 的实用程序测试您的 ZPL。如果有效,那么就开始用 c# 玩吧。只是想限制起作用的变量数量;)

关于c# - 如何使用 C# 和 .NET 对 Zebra 打印机的 RFID 标签进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33401575/

相关文章:

C# 列表仅包含

c# - xml节点实际上不是节点,需要获取属性

c# - 从 C# Windows 窗体应用程序检索当前 URL

encoding - 将 Quercus 数据库连接编码设置为 UTF-8

c# - ADO.NET Entity Framework - 复合主键 CRUD

c# - C# 中的计时器,如何控制发送到 timer1_tick 的内容

c# - 在不知道 T 的情况下将泛型类型指定为参数参数

.net - 如何将WPF应用程序制作为可以嵌入MS Excel中的OLE对象?

sql-server - 选择十六进制/字符转换

c# - 如何使用 streamreader 读取当前编码的 byte[]