2

javascript から Epson TM-T88IV プリンターに印刷しようとしています。

(サーマルレシートプリンターです。)

状態:

  • プリンターはイーサネット経由でネットワークに接続されています。
  • プリンターに正常にpingできます。
  • プリンターの Web 構成ページにアクセスできます。
  • プリンターをリセットしました。
  • エプソンの Mac OS プリント ドライバを使用してプリンタに印刷できます。

開発環境:

  • Mac OS X 10.10 を実行しています
  • Homebrew を使用して Node と NPM を再インストールしました。
  • Ran: brew update...brew doctor...brew symlink...

問題:

発生している ECONNREFUSED エラーを解決する方法がわかりません。

すでに試した:

  • Tonicdev.com で実行しても、手がかりは得られませんでした。Tonic Notebook へのリンク。
  • Stackoverflow ですべてのECONNREFUSED の質問を検索して読みました。
  • このコードをスタンドアロンのprint.jsファイルに配置して呼び出してみました:

    node print.js

エラー:

{ Error: connect ECONNREFUSED 192.168.77.22:8008
    at Object.exports._errnoException (util.js:1012:11)
    at exports._exceptionWithHostPort (util.js:1035:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1080:14)
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect',
  address: '192.168.77.22',
  port: 8008 }

アップデート

デバイスで開いている/使用可能なポートを確認しました。エプソンの SDK ドキュメントが間違っていたことが判明しました! TCP/Printer リクエスト用に開いている実際のポートは 8008 ではなく 515 です。

nc -z 192.168.77.22 1-6000

printer.initが接続を確立していません。printer.isPrinterConnectedがfalseを返しています

エプソンの epos SDK を正しいポートで再試行しました。次のエラーが発生しました: ERROR_TIMEOUT

それで、TimeOut 値を正しく設定していないのではないでしょうか?

ノードサーマルプリンター (コード)

var printer = require("node-thermal-printer");
printer.init({
    type: 'epson',
    interface: '/dev/usb/lp0',
    ip: "192.168.77.22",
    port: '515'
});

printer.isPrinterConnected(function(isConnected){
    console.log(isConnected);
});

process.on('uncaughtException', function (err) {
        console.log(err);
}); 


printer.alignCenter();
printer.println("Hello world");
printer.cut();
printer.execute(function(err){
    if (err) {
        console.error("Print failed", err);
    } else {
     console.log("Print done");
    }
});

エプソン SDK (コード)

var ePosDev = new epson.ePOSDevice();

function connect() {
  var ipAddress = '192.168.77.22';
  var port = '515';
  ePosDev.connect(ipAddress, port, callback_connect);
}

function callback_connect(resultConnect){
    alert('Callback Called');
    var deviceId = 'local_printer';
    var options = {'crypto' : false, 'buffer' : false};
    alert(resultConnect);

    if ((resultConnect == 'OK') || (resultConnect == 'SSL_CONNECT_OK')) {
        alert('Connected!');
        ePosDev.createDevice(deviceID,ePosDev.DEVICE_TYPE_PRINTER,options,callback_createDevice);       
    }
    else {
        alert('Not Connected!');
    }
}

var printer = null;

function callback_createDevice(deviceObj, errorCode){
  if (deviceObj === null) {
//Displays an error message if the system fails to retrieve the Printer object
return; }
  printer = deviceObj;
//Registers the print complete event
  printer.onreceive = function(response){
    if (response.success) {
//Displays the successful print message
}
else {
//Displays error messages
} };
}

function createData(){
  printer.addTextAlign(printer.ALIGN_CENTER);
  printer.addText("Hello World\n");
}

function send(){
  if (ePosDev.isConnected) {
    printer.send();
  }
}

4

2 に答える 2

2

検索範囲を広げたところ、プリンターが別のポートでコマンドをリッスンしていることがわかりました。

nc -z 192.168.77.22 1-50000

...次の結果が返されました。

Connection to 192.168.77.22 port 80 [tcp/http] succeeded!
Connection to 192.168.77.22 port 515 [tcp/printer] succeeded!
Connection to 192.168.77.22 port 9100 [tcp/hp-pdl-datastr] succeeded!

したがって、コードのinit部分でポート番号を 9100 に変更するだけで、出来上がりです!

于 2016-08-01T16:42:09.443 に答える