これは私の初めてのstackoverflowへの投稿です。C# - シリアルポート経由でKPLコマンドをzebra ttp 2010プリンタに送信
私は、zebra ttp 2010プリンタが接続されているシリアルポート(この場合はCOM1)に接続する必要があるWindowsフォーム(C#)アプリケーションを使用して、プリンタが理解して印刷できるKPLコマンドを送信しますが欲しいです。私はこのコードを実行すると、何も印刷されていないが、私は、プリンタ側で物理的な「フィード」ボタンを押すと、排出
serialPort1.PortName = "COM1";
serialPort1.Open();
//command that prints a EAN barcode
//i have tested the command using the zebra toolbox.exe and works as intended
string str = "<ESC>BS<0><0><h 48><0><0><00><0><h 40><0><2><02><ESC>BW<00>123456789<00><LF><RS>";
serialPort1.Write(str);
serialPort1.Close();
:私はこの非常に単純なコードをやっている時点では
紙にはコマンドの結果ではなく文字列が書かれています。
また、文字列をバイト配列に変換しようとしましたが、最終結果は同じです。
byte[] toBytes = Encoding.ASCII.GetBytes(str);
serialPort1.Write(toBytes, 0, toBytes.Length);
serialPort1.Close();
は、だから私は、プリンタの印刷に受信されたデータを作成することができるというわけではないだけでなく、プリンタがKPLコマンドとしてデータを処理されていません。
誰かが私が間違っていることを知っています。どうすれば修正できますか?
**** EDIT ***** 私は間違っていたことを理解しました。 KPLコマンド(例:"<ESC>"
)を16進表現に変換しないため、テキストをバイト配列に変換することはできません。私は、例えば改行コマンドが「0A」で表現されていることを発見したCOMポートを盗聴することにより
ので、私はこれを行うとき:
はbyte[] toSend = { 0x1B, 0x74, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x50, 0x61, 0x72, 0x6B, 0x4E, 0x61, 0x6D, 0x65, 0x00, 0x0A, 0x0A, 0x0D, 0x1E };
sp.Write(toSend, 0, toSend.Length);
プリンタが自動的に印刷を開始し、それはず
印刷するラインを増やしても、フィードボタンを押さない限り、プリンタは印刷しません。また、コマンドを送信した後にそのボタンを押すと、結果ではなくコマンドが印刷されます。 (例えば、プリンタのプリントは、この:「トン<10 2><20 2><0> ParkName <0>」の代わりに:私は私が間違って何をやっていた発見した「ParkName」 –
AndreB
が、私は単にGetBytesメソッド()を使用してバイトにコマンドを変換するカントので、それはちょうどます各文字を16進表現に変換する byte [] toSend = {0x0A、0x0D、0x1E}; sp.Write(toSend、0、toSend.Length); 私はプリンタの印刷を管理していますデータを受け取ると自動的に – AndreB