我正在向Zebra QLn220发送命令,以便它(自然地)打印标签。不过,我也有代码为某些打印机设置分配值,例如:
const string quote = "\"";
string keepPrinterOn = string.Format("! U1 setvar {0}power.dtr_power_off{0} {0}off{0}", quote);
string advanceToBlackBar = string.Format("! U1 setvar {0}media.sense_mode{0} {0}bar{0}", quote);
string advanceToGap = string.Format("! U1 setvar {0}media.sense_mode{0} {0}gap{0}", quote);
PrintUtils.SendCommandToPrinter(keepPrinterOn);
if (radbtnBar.Checked)
{
PrintUtils.SendCommandToPrinter(advanceToBlackBar);
}
else if (radbtnGap.Checked)
{
PrintUtils.SendCommandToPrinter(advanceToGap);
}
这样做 - 在运行了检查了radbtnBar的代码之后,现在这些设置(通过运行" !U1 getvar" allcv" " in Zebra Setup Utilities应用程序):
power.dtr_power_off : off , Choices: on,off
media.sense_mode : bar , Choices: bar,gap
问题在于,通过上面的代码设置这些值,然后尝试打印标签(经过至少20秒后,并且测试时间超过一分钟),前几次尝试打印一个标签默默地失败(没有错误的消息,只是没有打印)。在第三次尝试时,标签打印出来。为什么设置这些值会导致打印机暂时“聋哑”,#34;在编程应用这些设置后,我可以采取哪些措施将其恢复到清醒状态,以便立即打印出来?
一旦QLn220最终重新获得响应,它会立即继续在应用程序的后续执行中打印而不会延迟;只有在发送了这些命令(" power.dtr_power_off"" media.sense_mode")后,打印机才会在一个赛季中被淘汰出局。真正的斑马永远不会像这样的骡子一样顽固。
Banno的想法很明显(将crlfs(" \ r \ n")附加到)设置打印机变量的命令。
所以看起来发生的事情是这样的:
命令1被发送到打印机以设置val(没有crlf)。
命令2被发送到打印机以设置另一个val(也没有crlf)
然后尝试打印标签;它没有打印。看到确实有一个crlf,打印机似乎说,"哦,你终于给了我一个你欠我的crlfs!但是你并没有那么轻松 - 你还欠我一个!"
打印标签的第二次尝试导致打印机实际上说,"好吧,那么,你已经支付了你的债务;从现在开始,我会听你发送的命令(只要你用crlf终止它们我非常渴望)。"
有时它仍然不起作用(行为不一致);我发现我不得不捅它"让它退出它的梦游;见What Zebra QLn220 settings do I need to set (and to what value[s]) to get a setting to "stick"?
答案 0 :(得分:3)
将“\ r \ n \”附加到每个命令