「media.sense_mode」を「bar」または「gap」に設定するように Zebra QLn220 プリンターをプログラムで構成しようとしています (ユーザーの選択に応じて)。
ただし、これらのコマンドの動作の信頼性は非常に低いようです (動作する場合もあれば、動作しない場合もあります)。
考えられるさまざまなコマンドをテストするために、もちろん PC をプリンタに接続した状態で Zebra Setup Utilities を使用しました。
ユーティリティから次のコマンドを送信しました。
! U1 setvar "media.sense_mode" "gap"
出来た; 私はこれを知っています。
! U1 getvar "media.sense_mode"
...「ギャップ」の予想/希望を示しました(上記のコマンドを送信する前は「バー」でした)。
しかし、コードで同じことを達成しようとすると、「バー」に対しては (ほとんどの場合) 機能しますが、「ギャップ」に対してはほとんど機能しません。
コードは次のとおりです。
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);
}
ご覧のとおり、コードは「バー」と「ギャップ」を除いてまったく同じです。
追加された「\r\n」が問題を引き起こしている可能性はありますか? それらを追加することが必要だったか、コマンドの信頼性を高めたようですが、私はこのフラストレーションの時点で何でも受け入れます.
同じことを達成するための代替コマンドを常にテストして、それらがより信頼できるかどうかを確認しましたが、他の2つの代替コマンドのいずれも機能しませんでした。
! U1 setvar "ezpl.media_type" "web"
-これも:
{} {"media.sense_mode" "gap"}
... getvar を介して val をチェックすると、これらのコマンドをプリンターに送信した後も引き続き「bar」が表示されます (「bar」に戻した後、「media.sense_mode」の値は、これら 2 つのコマンドを送信した後も「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
手がかりを持っている人はいますか?
アップデート
コマンドを送信するコードは次のとおりです。
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 にアップグレードする必要があることを意味するのでしょうか? ファームウェアを更新する必要がある場合、どうすればよいですか? 最新のファームウェアを見つけて PC にダウンロードし、PC とプリンターが USB 経由で接続されている間にインストール アプリを実行するか、それとも...???
更新 2
ここからQLn220 を検索すると、V68.18.0Z がダウンロード可能な唯一のファームウェア バージョンとして表示されます。私のプリンターには新しいバージョンがあるように見えるので、私は混乱しています...なぜ彼らは新しいバージョン (V68.19.7Z) と思われるものを提供しないのですか?
更新 3
上記のページで「自己解凍型アーカイブ」リンクをクリックすると、一般的だが実行不可能な (そう思われる) 指示が記載されたページが表示されます。
そこにあるダウンロード リンクをクリックすると、「この Web ページにはリダイレクト ループがあります」というページが表示されます。
更新 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();
...同じことを達成していますか?