问题
我目前正在研究一个应用程序,该应用程序需要发送信息以在爱普生TM-U295打印机上打印。所述打印机已启用蓝牙并与计算机配对。我目前能够向它发送一个字符串并打印所需的信息。然而,如果打印机里没有纸,字符串仍然被发送并打印在稀薄的空气中。
当前要打印的代码
请注意,Socket
是使用ConnectAsync()
方法的StreamSocket
,该方法允许您连接到配对的打印机。
'Print
Public Async Function Write(ByVal StrToSend As String) As Task
Dim Bytestosend As Byte() = System.Text.Encoding.UTF8.GetBytes(StrToSend)
Await Socket.OutputStream.WriteAsync(Bytestosend.AsBuffer())
Await Socket.OutputStream.FlushAsync()
End Function
'Send the command to print
Private Async Sub BtnPrint_Click(sender As Object, e As RoutedEventArgs)
Await Write(txtTextTosend.Text + vbLf)
End Sub
需要代码
我希望能够验证论文是否以类似于以下的条件发出:
'Send the command to print
Private Async Sub BtnPrint_Click(sender As Object, e As RoutedEventArgs)
if Status <> PRINTER_PAPER_OUT then
Await Write(txtTextTosend.Text + vbLf)
End if
End Sub
R&D
我在文档(另一个EPSON打印机型号的第10-11页)中注意到某些ASB Status
,其定义如下:
Auto Status Back:这是TM打印机的功能。这是一种状态当打印机状态改变时,从打印机自动发送(打开或关闭封面,出纸,打印完成等)。
后面提到(第22页)ASB_RECEIPT_END
是一个常数,它与打印机没有纸相关联
更多文档
问题
我们如何使用前面提到的ASB status
来知道打印机是否处于"Out of Paper"状态?
如果ASB status
不是获取信息的途径,有人能给我指出正确的方向吗?
请注意,我不介意c#或VB。NET代码
需要做什么
-
学习和使用ESC/POS命令
-
激活ASB (
GS a
命令) -
激活组分隔符命令
GS
这将区分
Write
的ASB
和Write
的文本避免打印这样的东西:aTEXTTOPRINT
-
读取打印机发回的状态
-
验证状态是否无纸
代码
-
首先需要一个
READ
函数,它将读取字节并将其转换为字符串Dim bytes(2000) As Byte ' 2000 bytes is random I wasnt sure how many were needed Dim result = Await Socket.InputStream.ReadAsync(bytes.AsBuffer, bytes.Length, InputStreamOptions.Partial) Dim lgtOfRead = result.Length Dim readstr As String = System.Text.Encoding.UTF8.GetString(bytes, 0, bytes.Length) Dim retstr As String = readstr.Take(lgtOfRead).ToArray() Return retstr
-
其次,需要发送上面提到的命令以使其工作
'Send the command to print Private Async Sub BtnPrint_Click(sender As Object, e As RoutedEventArgs) Dim cmd As Byte() = {29, 97} 'Send the command to enable ASB Await _Btcomm.Write(cmd) cmd = {29} 'Separate the information Await _Btcomm.Write(cmd) Dim strResult As String = Await _Btcomm.Read() 'Verify if the status has a "`" character linked to paper out state If Not strResult.Contains("`") Then Await _Btcomm.Write(txtTextTosend.Text + vbLf) Else Dim md As MessageDialog = New MessageDialog("The printer has no paper", "No Paper") Await md.ShowAsync() End If End Sub
文档
部分命令
更多命令
MOAR命令
http://www.asciitable.com (ASCII表更容易理解命令)