我需要设置哪些Zebra QLn220设置(以及设置为“粘贴”的值)?

我正在尝试以编程方式配置Zebra QLn220打印机,将其“media.sense_mode”设置为“bar”或“gap”(取决于用户选择的内容)。

然而,这些命令工作的可靠性似乎非常低(有时它可以工作,有时它不工作)。

为了测试各种可能的命令,我使用了Zebra Setup Utilities,当然PC也插在了打印机上。

我从util发送了这个命令:

! U1 setvar "media.sense_mode" "gap" 

有效; 我知道这一点,因为测试它:

 ! U1 getvar "media.sense_mode" 

……向我展示了预期/希望的“差距”(在发送上述命令之前一直是“bar”)。

但是试图在代码中完成同样的事情是为了“bar”(几乎总是),但几乎没有“差距”

这是代码:

 const string quote = "\""; string advanceToBlackBar = string.Format("! U1 setvar {0}media.sense_mode{0} {0}bar{0}\r\n", quote); string advanceToGap = string.Format("! U1 setvar {0}media.sense_mode{0} {0}gap{0}\r\n", quote); . . . if (radbtnBar.Checked) { PrintUtils.SendCommandToPrinter(advanceToBlackBar); } else if (radbtnGap.Checked) { PrintUtils.SendCommandToPrinter(advanceToGap); } 

所以你可以看到,除了“bar”与“gap”之外,代码完全相同

附加的“\ r \ n”是否可能导致问题? 似乎添加那些是必要的或使命令更可靠,但我对这一点的挫折感到开放。

我总是测试替代命令来完成同样的事情,看看它们是否更可靠,但其他两个替代方案都没有用,即不是这个:

 ! U1 setvar "ezpl.media_type" "web" 

– 这个:

 {} {"media.sense_mode" "gap"} 

…通过getvar检查val继续显示“bar”,然后将这些命令发送到打印机(在设置回“bar”之后,“media.sense_mode”的值在发送这两个命令后仍为“bar”)。

是否需要为打印机设置某些其他打印机设置以更好地响应发送的命令? 不仅以编程方式设置命令不可靠,而且即使通过Zebra Setup Utility,它有时会在命令发送和返回之前的一段时间内“沙漏” – 有时它比Johnny Quick和Flash组合更快。

查看此命令的大量输出:

 ! U1 getvar "allcv" 

….以下是最有趣/最有可能的候选人。 哪些,如果有的话,需要改变,以及什么价值?

 wlan.ip.dhcp.request_timeout : 2 , Choices: 2-30 wlan.ip.dhcp.session_interval : 10 , Choices: 0-60 . . . wlan.ip.timeout.enable : on , Choices: on,off wlan.ip.timeout.value : 300 , Choices: 1-3600 . . . wlan.keep_alive.enable : on , Choices: on,off wlan.keep_alive.timeout : 15 , Choices: 5-300 . . . netmanage.avalanche.interval : 60000 , Choices: 0-4294967295 netmanage.avalanche.startup_update : off , Choices: on,off netmanage.avalanche.interval_update : off , Choices: on,off . . . netmanage.avalanche.udp_timeout : 3000 , Choices: 0-4294967295 netmanage.avalanche.tcp_connection_timeout : 3000 , Choices: 0-4294967295 . . . netmanage.avalanche.realtime_update_int : 300 , Choices: 0-4294967295 . . . zpl.zpl_mode : zpl II , Choices: zpl II,zpl . . . internal_wired.ip.arp_interval : 0 , Choices: 0-30 . . . internal_wired.ip.dhcp.requests_per_session : 2 , Choices: 1-10 internal_wired.ip.dhcp.request_timeout : 2 , Choices: 2-30 internal_wired.ip.dhcp.session_interval : 10 , Choices: 0-60 . . . internal_wired.ip.timeout.enable : on , Choices: on,off internal_wired.ip.timeout.value : 300 , Choices: 1-3600 . . . internal_wired.ip.wins.permanent_source : off , Choices: on,off . . . interface.network.active.arp_interval : 0 . . . interface.network.active.speed : 0 . . . weblink.printer_reset_required : no . . . weblink.ip.conn1.retry_interval : 10 , Choices: 1-600 . . . weblink.ip.conn1.maximum_simultaneous_connections : 10 , Choices: 1-100 . . . weblink.ip.conn1.test.retry_interval : 900 , Choices: 1-1800 weblink.ip.conn1.num_connections : 0 . . . capture.channel1.port : off , Choices: serial,usb,bt,parallel,off capture.channel1.count : 0 , Choices: 0-4294967295 

那里有线索的人吗?

UPDATE

以下是发送命令的代码:

 public static bool SendCommandToPrinter(string cmd) { bool success; // init'd to false by default try { using (SerialPort serialPort = new SerialPort()) { serialPort.BaudRate = 19200; serialPort.Handshake = Handshake.XOnXOff; serialPort.Open(); serialPort.Write(cmd); serialPort.Close(); // <= should be redundant within a using statement, but still getting "File 55" err... } success = true; } catch // may not need a try/catch block, as success defaults to false { success = false; } MessageBox.Show(success.ToString()); //TODO: Remove after testing return success; } 

有问题的SerialPort来自OpenNETCF.IO.Ports.SerialPort

注意: SerialPort.Write()返回void。

命令:

 ! U1 getvar "appl.name" 

在Zebra Setup Utility中返回“ V68.19.7Z ”。

这是否意味着我的固件是最新的(V68.19.7Z> v68.18.0Z),或者这是否意味着因为我的“appl”更新,我需要将固件升级 V68.19.7Z? 如果我确实需要更新固件,我该怎么做? 是将查找和下载最新固件到我的电脑,然后在通过USB连接PC和打印​​机时运行其安装应用程序,或者…… ???

更新2

从这里搜索QLn220,我看到V68.18.0Z是唯一可供下载的固件版本。 因为我的打印机上似乎有一个更新的版本,我很困惑……为什么他们不提供似乎更新的版本(V68.19.7Z)?

更新3

如果我单击上面引用的页面上的“ 自解压存档 ”链接,我只是得到一个页面 ,其中包含一些通用但不可行(似乎是)的方向。

如果我点击那里的下载链接,我会看到一个页面,上面写着“这个网页有一个重定向循环”

更新4

它在添加一些调试字符串后工作; 在打印代码中:

 MessageBox.Show(success.ToString()); //TODO: Remove after testing return success; 

……并在设置代码中:

 if (radbtnBar.Checked) { MessageBox.Show(advanceToBlackBar); PrintUtils.SendCommandToPrinter(advanceToBlackBar); } else if (radbtnGap.Checked) { MessageBox.Show(advanceToGap); PrintUtils.SendCommandToPrinter(advanceToGap); } 

可能是这个小小的“行动中的突破”在某种程度上是有益的吗?

更新5

注意:没有“SerialPort.Flush”可能:

 serialPort.Close(); 

……正在完成同样的事情?

SGD命令格式正确。 您描述的间歇性行为使我认为问题源于打印机实际接收命令的一致性,而不是命令本身的语法。 一般而言,不,您不必更改其他命令以使此命令有效。 由于您可以通过Zebra Setup Utilities成功发送命令并获得所需的行为,因此您应该能够通过代码执行相同的操作。

  1. 您是通过USB还是通过其他方式(蓝牙,TCP等)以编程方式发送命令? 您在使用Zebra Setup Utilities时提到了USB,但是在您的代码中呢?

  2. 你能在PrintUtils.SendCommandToPrinter()的底层提供代码吗? 我不熟悉这个API。 它是哪种API?

  3. 在连接的最低级别,您通常会调用’write()’或’writeData()’或类似的东西。 有时’write’命令会返回写入的字节数。 如果您可以深入研究一下代码,可能会有一个“write”命令返回该值,您可以validation返回值是否等于预期消息的长度(包括换行符)。

  4. 根据较低级别的API,还可能存在一个flush()命令,强制将流中的所有数据推送到另一端。 同样,这取决于你在’PrintUtils’引擎盖下使用的API。

在过去,我看到USB通信的行为不一致。 您应该确保您的固件尽可能是最新的。 您的QLn220目前位于v68.18.0Z: http ://www.zebra.com/id/zebra/na/en/index/drivers_downloads/firmware/results.html?productType = 6 。 您可以通过发送以下内容查看当前版本:

 ! U1 getvar "appl.name" 

在一天结束时,您可以在设置后立即查询打印机的间隙/条形模式。 这将导致程序执行中的额外延迟,但这是确保您发送的任何内容实际生效的好方法。

对于标签打印时间过长的问题,我们必须通过zebra pc util正确设置所有打印机宽度..将这些命令发送到打印机.. PW表示打印机宽度,JUS表示保存设置…

 ^XA ^PW832 ^JUS ^XZ 

此命令也有助于双标签打印

传感器校准命令(来源:ZPL命令的function列表)zpl_manual.pdf

 ~JC 

它在添加一些调试字符串后工作; 在打印代码中:

 MessageBox.Show(success.ToString()); //TODO: Remove after testing return success; 

……并在设置代码中:

 if (radbtnBar.Checked) { MessageBox.Show(advanceToBlackBar); PrintUtils.SendCommandToPrinter(advanceToBlackBar); } else if (radbtnGap.Checked) { MessageBox.Show(advanceToGap); PrintUtils.SendCommandToPrinter(advanceToGap); } 

为什么它有效,我不知道,所以我仍然保持警惕。 但是,至少现在,它正在进行这一调整。