ユーザー設定 (選択したラベルのタイプ、および「キープ アライブ」メッセージを送信するかどうか) に基づいて、さまざまな CPCL コマンドがハンドヘルド デバイスから Zebra QL[n]220 ベルト プリンターに送信されます。このコード:
const string quote = "\"";
string keepPrinterOn = string.Format("! U1 setvar {0}power.dtr_power_off{0} {0}off{0}", quote);
string shutPrinterOff = string.Format("! U1 setvar {0}power.dtr_power_off{0} {0}on{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);
...(新しい)QLn220プリンターで機能しますが、(古い)QL220では、プリンターがコマンドを受信してそれに基づいて動作するのではなく、生のコマンドをラベルに印刷するだけです。QL220 ベルト プリンターである IOW は、コマンドをアクションまたはバーコードに変換する代わりに、次のようなものをラベルに直接印刷します。
0 200 200 241 1
RIGHT
TEXT 4 3 0, 0 0.75
LEFT
TEXT 5 0 0 90 DRPEPPER (7X2) = 14
CENTER
BARCODE UPCA 1 1 50 0 137 054900000295
FORM
PRINT
QL220とQLn220でCPCLプロトコルが変わったのか、それとも…???
アップデート
これは奇妙です。奇妙なことに、次のコードを追加しました。
string getDeviceLang = string.Format("! U1 getvar {0}device.languages{0}", quote);
string setDeviceLangZPL = string.Format("! U1 setvar {0}device.languages{0} {0}ZPL{0}", quote);
. . .
String deviceLanguage = PrintUtils.GetSettingFromPrinter(getDeviceLang);
MessageBox.Show(deviceLanguage);
if (deviceLanguage.Equals("line_print"))
{
PrintUtils.SendCommandToPrinter(setDeviceLangZPL);
}
...GetSettingFromPrinter() の呼び出しは空の文字列を返しますが (MessageBox.Show に見られるように)、印刷リファッターはとにかく希望どおりに動作します (生のコマンドをラベルに印刷するだけでなく、希望どおりにラベルを印刷します)! ?
更新 2
注:私の QLn220 Zebra プリンタにはUSB ポートがあります (問題を引き起こした古い QL220 にはありません)。Zebra Setup Utils を使用して "what language are you using" (getDeviceLang) コマンドを送信すると、"hybrid_xml_zpl" と応答しました。