7

サーマル プリンターで ESC/POS コマンドを送信しようとしています。しかし、それらを送信するたびに、サーマルプリンターはそれらをコマンドとして実行するのではなく、テキストとして印刷します。これらのコマンドを .prn ファイルに書いています。lp コマンドを実行してファイルを印刷すると、これらの .prn ファイルもテキストとして印刷されます。

ESC/POS コマンドを .prn ファイルに書き込むには、次の方法を試しました。

1) PRINT #1, CHR$(&H1D);"h";CHR$(80);
   PRINT #1, CHR$(&H1D);"k";CHR$(2);
   PRINT #1, "48508007";CHR$(0);
   PRINT #1, CHR$(&HA);
   PRINT #1, CHR$(&H1D);"k";CHR$(67);CHR$(12);
   PRINT #1, "48508007";

2) <ESC>(0x1B) <L>(0x4C)
   <GS>(0x1D) <k>(0x6B) 73 2 4 5 6 7 8 9 NUL
   <FF>(0x0c)

3) <ESC L>
   <GS k 73 2 4 5 6 7 8 9 NUL>

4)「ESC L」「GS k 73 2 4 5 6 7 8 9 NUL」「FF」 Cプログラムを次のように使用してESC / POSコマンドを送信しようとしました:

#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>

int main() {
   int fd,ret;
   char buf[] = "HELLO"

   fd = open("/dev/bus/usb/003/007",O_WRONLY);
   if(fd < 3) {
      perror(open failed);
   }

   ret = write(fd,&buf,sizeof(buf));
   if(ret == -1) {
      perror("write failed");
   }
}

上記のコードを実行すると、次のようなエラーが発生します。

write failed: invalid arguments
4

3 に答える 3

3

サーマル プリンターが USB 経由で接続されている場合、CUPS がポートを要求している可能性が高くなります。したがって、通常のユーザーとしてデータを送信することはできません。

カップ経由で raw バイトを送信するには、 または のいずれlpr -l fileかを使用しますlp -o raw file。送信しようとしているバイトを検査するには、xxd16 進ビューアーを使用します。これらのプリンターは通常、行末で CRLF を取得するため、必ず\r\n.

C ライブラリはありませんが、python-escposで成功しました

于 2016-08-02T12:58:00.033 に答える
0

16 進コードに確信がある場合は、お気に入りの 16 進エディタを使用して適切なコマンド prn ファイルを作成できます。または、ここから 1 つを選択できます: Linux 用の優れた 16 進エディターが必要
なぜ 16 進エディターなのか? いくつかの隠しコンテンツ (改行 0x0d など)を含む他のすべての方法と、プリンターがコマンド シーケンスを理解できないためです。おそらく他の問題は、コマンドを配信するために使用するプログラムです-一部のプログラムは、プリンターに送信するときに他のコンテンツを追加したり、会話をしたりすることがあります(余分なページダウンなど)。確認してください - あなたのプログラムはこれを行うことができません。
今回の問題解決方法:

  • エスケープシーケンスが正しいことを確認してください。(一部のプリンターは、特別なエスケープ シーケンスを使用してマークを付けます。次のビットストリームは、データではなくコマンドになります)
  • プリンターに送信するファイルが正しいことを確認してください (ファイルに追加のコードはありません。簡単に確認するには、mc ビューアー - 16 進モード ビュー (F4) を使用します)。
  • プリンターへの配信が正しいビットバイスであることを確認してください-配信プログラムはコマンドファイルを操作しません(manを使用して確認します)-印刷できない文字を16進コードに変換するなど
于 2015-06-05T09:12:35.460 に答える