【问题标题】:Node-Thermal-Printer Not Connecting to Epson T88IV Printer节点热敏打印机未连接到 Epson T88IV 打印机
【发布时间】:2016-12-01 19:01:00
【问题描述】:

我正在尝试从 javascript 打印到 Epson TM-T88IV 打印机。

(这是一台热敏收据打印机。)

状态:

  • 打印机通过以太网连接到网络。
  • 我可以成功 ping 打印机。
  • 我可以访问打印机 Web 配置页面。
  • 我已重置打印机。
  • 我可以使用 Epson 的 Mac OS 打印驱动程序打印到打印机。

开发环境:

  • 我正在运行 Mac OS X 10.10
  • 我使用 Homebrew 重新安装了 Node 和 NPM。
  • 运行:brew update...brew doctor...brew symlink...

问题:

我不知道如何解决我遇到的 ECONNREFUSED 错误。

已经尝试过:

  • 在 Tonicdev.com 上运行它,但无济于事。 Link 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/打印机请求打开的实际端口是 515,而不是 8008。天哪!

nc -z 192.168.77.22 1-6000

printer.init 未建立连接。 printer.isPrinterConnected 正在返回 false

我用 正确的端口重新尝试了 Epson 的 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");
    }
});

Epson 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();
  }
}

【问题讨论】:

    标签: node.js thermal-printer epson econnrefused


    【解决方案1】:

    不知道为什么我的 Epson TM-M30 POS 打印机的端口从官方的“8008”变成了“515”。

    问题在于 epos-2.7.0.js 已将连接端口声明为常量:

        ...
        this.IFPORT_EPOSDEVICE = 8008;
        this.IFPORT_EPOSDEVICE_S = 8043;
        ...
    

    但是真实的是515,所以要修改官方的js:

        this.IFPORT_EPOSDEVICE = 515;
    

    有了这个改变,这是我的代码:

    var ePosDev = new epson.ePOSDevice();
    var ipAddress = '192.168.150.162'; 
    var port = '515';
    var printer = null;
    ePosDev.connect(ipAddress, port, function callback_connect(resultConnect){
      var deviceId = 'local_printer';
      var options = {'crypto' : false, 'buffer' : false};
      if ((resultConnect == 'OK') || (resultConnect == 'SSL_CONNECT_OK')) {
        //Retrieves the Printer object
        ePosDev.createDevice(
          deviceId, 
          ePosDev.DEVICE_TYPE_PRINTER, 
          options, 
          function callback_createDevice(deviceObj, errorCode){
            if (deviceObj === null) {
              return; 
            }
            printer = deviceObj;
            printer.addTextAlign(printer.ALIGN_CENTER); 
            printer.addText('My text..\n');
            printer.send();
            if (ePosDev.isConnected) {
              printer.send(); 
            }
            ePosDev.deleteDevice(printer, function callback_deleteDevice(errorCode){
              ePosDev.disconnect();
            });
          });
      }});
    

    【讨论】:

      【解决方案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,瞧!

      【讨论】:

        猜你喜欢
        • 2014-03-17
        • 1970-01-01
        • 2012-01-21
        • 2022-10-17
        • 2017-09-19
        • 2012-10-05
        • 2021-03-12
        • 1970-01-01
        相关资源
        最近更新 更多