Почему принтер Zebra QLn220 игнорирует первую пару команд, отправленных ему после отправки команды на обновление некоторых настроек?

Я отправляю команды 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»» в приложении Zebra Setup Utilities):

power.dtr_power_off : off , Choices: on,off
media.sense_mode : bar , Choices: bar,gap

Проблема в том, что после установки этих значений с помощью приведенного выше кода, а затем попытки распечатать этикетки (по прошествии не менее 20 секунд и при проверке до более минуты), первые несколько попыток печати этикетки молча fail (сообщения об ошибке нет, просто печать не происходит). С третьей попытки этикетка печатается. Почему установка этих значений может привести к тому, что принтер временно «оглохнет», и могу ли я что-нибудь сделать, чтобы вернуть его в режим бодрствования после программного применения этих настроек, чтобы он начал печатать немедленно?

Как только QLn220, наконец, восстанавливает отзывчивость, он продолжает печатать сразу при последующих запусках приложения без задержек; только после отправки этих команд («power.dtr_power_off» и «media.sense_mode») принтер выбивается из своей орбиты на сезон. Настоящая зебра никогда не будет такой упрямой, как этот мул.

ОБНОВИТЬ

Идея Банно, по-видимому, сработала (добавление crlfs ("\r\n")) к командам для установки переменных принтера.

Итак, кажется, что происходило что-то вроде этого:

Команда 1 была отправлена ​​на принтер для установки значения (без crlf).

Команда 2 была отправлена ​​на принтер для установки другого значения (также без crlf)

Затем была предпринята попытка напечатать этикетку; он не печатал. Однако, увидев, что у него действительно есть crlf, печатник, казалось, сказал: «О, вы наконец-то дали мне один из crlf, которые вы мне должны! должен мне один!"

Вторая попытка напечатать этикетку привела к тому, что принтер, по сути, сказал: «Хорошо, значит, вы заплатили свой долг по crlf; с этого момента я буду слушать команды, которые вы отправляете (до тех пор, пока вы завершаете их с помощью crlf я так жадно жажду)».

ОБНОВЛЕНИЕ 2

Иногда это все еще не работает (непоследовательное поведение); Я обнаружил, что мне нужно «ткнуть его», чтобы заставить его избавиться от сомнамбулизма; см. Какие настройки Zebra QLn220 мне нужно установить (и какое значение [s]), чтобы настройка оставалась неизменной?


person B. Clay Shannon    schedule 24.07.2014    source источник
comment
На самом деле зебры известны своим упрямством и неукротимостью. Вот почему вы не видите, чтобы люди катались на них.   -  person Matt Burland    schedule 24.07.2014
comment
Чем занят? К моменту попытки печати прошло несколько секунд, а то и минута и больше. Если бы это было так, я бы подумал, что такое пояснительное или оправдательное сообщение должно быть напечатано на экране, а не на этикетке, конечно.   -  person B. Clay Shannon    schedule 24.07.2014
comment
@MattBurland: Может быть, именно поэтому этот бренд принтеров получил свое название. Может, зебры и вправду полосатые мулы.   -  person B. Clay Shannon    schedule 24.07.2014
comment
Когда он занят, он не может распечатать сообщение. Но время актуально, я сначала искал это в вопросе. Отредактируйте его.   -  person Henk Holterman    schedule 24.07.2014
comment
@HenkHolterman: Готово (отредактировал [коэффициент промежутка времени])   -  person B. Clay Shannon    schedule 25.07.2014
comment
@HenkHolterman: я думаю, что зебрарианцам следует принять альтернативу методологии песочных часов Windows; когда они собираются начать операцию, они должны отображать на экране принтера изображение черепа и скрещенных костей. Когда принтер снова пробудится от своего мертвого сна, они могут либо просто удалить мешок, либо заменить его смайликом. Или, если им не нравится эта идея, спящая зебра, которая в конце концов встанет на свои четыре ноги.   -  person B. Clay Shannon    schedule 25.07.2014
comment
До недавнего времени на их принтерах не было экранов. Кроме того, кто сказал, что кто-то сидит и смотрит на экран. Скорее всего, это все равно будет код, отправляющий следующую инструкцию.   -  person krillgar    schedule 25.07.2014
comment
И как это поведение соотносится с реальным сбросом при выключении/включении питания?   -  person Henk Holterman    schedule 25.07.2014
comment
Если его выключить, а затем включить, он работает нормально (печатает сразу), если вы это имеете в виду. Но, конечно, пользователь не хочет этого делать.   -  person B. Clay Shannon    schedule 25.07.2014
comment
Просто хочу подтвердить, что ваша команда отправки на функцию принтера отправляет CR/LF в конце операции. У вас есть тег zpl, связанный с этим вопросом. Вы отправляете его ZPL, линейный режим или CPCL?   -  person banno    schedule 25.07.2014
comment
@banno: при отправке команд печати на принтер к каждой строке добавляется \r\n. При отправке команд изменения этого значения я не был; Я только что добавил этот код и проверю... Кстати: Вы не вокалист U2 (не путать с U1)?   -  person B. Clay Shannon    schedule 26.07.2014
comment
@banno: Кажется, это помогло. Сделайте это ответом (добавьте \r\n\ к каждой команде), и я отмечу его как таковой.   -  person B. Clay Shannon    schedule 26.07.2014


Ответы (1)


добавить "\r\n\" к каждой команде

person banno    schedule 26.07.2014