2012-03-12 71 views
2

我有一个钱箱连接到Epson TM-T20上,连接到USB端口。 我发现一个例子here并应用于他们的想法与here到打印机的代码:打开连接到USB打印机的钱箱

echo -en "\033\160\040\025" | lp -d "USB_TM-T20" -o raw 

但这似乎并没有工作。由于epson提供了一个java库,我决定查看并反编译它。

protected byte[] getOpenDrawerCommand() 
{ 
    byte[] arrayOfByte = new byte[5]; 
    if (this.m_objDrawerPort.isSupportRealTimeCommand()) 
    { 
    arrayOfByte[0] = 16; 
    arrayOfByte[1] = 20; 
    arrayOfByte[2] = 1; 
    arrayOfByte[3] = (byte)this.m_objDrawerSettings.getPinNumber(); // seems to be 0 
    arrayOfByte[4] = (byte)this.m_objDrawerSettings.getOnTime(true); // between 1 and 8 
    } 
    else 
    { 
    arrayOfByte[0] = 27; 
    arrayOfByte[1] = 112; 
    arrayOfByte[2] = (byte)this.m_objDrawerSettings.getPinNumber(); // seems to be 0 
    arrayOfByte[3] = (byte)this.m_objDrawerSettings.getOnTime(false); // [1, 255] 
    arrayOfByte[4] = (byte)this.m_objDrawerSettings.getOffTime(false); // [1, 255] 
    } 
    return arrayOfByte; 
} 

我们看到keyfile中的值似乎是正确的(至少前两个)。不幸的是,我无法找到它发送数据的代码。 你有一个想法,我可以找到更多的信息?爱普生网站似乎很少见。

编辑: 事实证明,连接电缆已损坏,需要重新连接新电缆才能连接打印机。

回答

1

根据手册页,bashecho命令以及独立的echo需要八进制字符常量以前导零开头。这从C

略有不同

所以,尽量

echo -en '\033\0160\040\025' 

或只使用十六进制。

它也看起来像你发送4个字节,而Java代码段表明5是必要的。

+0

是的,我也观察过。但我也观察到,打印机驱动程序不知怎的不喜欢我的原始命令: “/ usr/lib/cups/backend/epsontm失败” 我会尝试解决这个问题,然后再进行更多测试。 – Pascal 2012-03-12 16:37:26

+0

发现安装了错误的ppd。我用另一个替换了它。但是这并没有解决问题。现在,我正在用Windows试一下。 – Pascal 2012-03-13 10:17:51

0

我也有一个爱普生TM-T20,发现这个答案,并链接到主要解决我的问题,但我查了手册,发现该代码打开抽屉被ESC p m t1 t2

这翻译成:

echo -en '\033p011' | lp -d EPSON_TM_T20 -o raw 

我用lpstat -p来找到正确的打印机名称来使用。