关于VB开发POS打印机控制程序的问题我使用VB开发POS打印机控制程序时,在程序上编写chr(27)传送给打印机时,在打印机上接受的数据可以 正常转换为16进制“1B”,但是只要是大于128的数,比如传送chr(192)给打印机时,在打印机上接收的 16进制数据却是"00",即是chr(192)=chr(00),我上网查了一下资料,好像都是说VB转换ASCII码的问题, 但是都没给出解决的办法,请问应该怎么解决啊?源代码:
Open "Lpt1" For Output As #1
a = Text1.Text
hjj = Chr(27) + Chr(51) + Chr(n)
s4 = a + Chr(10)
Print #1, hjj
Print #1, s4
Close #1上面的hjj = Chr(27) + Chr(51) + Chr(n)是控制打印文字的行间距,n的取值是0到255,当n的值在0到127的时候,行间距越来越大,但是当n大于127的时候行间距就变得最小。即是chr(255)=chr(0),后面在打印机输出16进制码的时候也证明了这一点,本来上面如果n=192的话程序输出的十六进制应该是:1B 33 CO 0D OA...但是实际的输出却是1B 33 00 0D 0A...
好像是跟ASCII码有关,在0到127就可以转换,而大于127就不能转换输出。这个应该怎么解决?另外:用CHRW这个函数也是不行
还有用位的方式也不行:
Open "Lpt1" For Output As #1
Dim sTemp As String
Dim a As String
Dim b As String
b = Text1.Text
Dim yTemp(1 To 10) As Byte
yTemp(1) = &H8
yTemp(2) = &H1
yTemp(3) = &HC8
yTemp(4) = &H49
yTemp(5) = &HB0
yTemp(6) = &H51
yTemp(7) = &H52
yTemp(8) = &H53
yTemp(9) = &H54
yTemp(10) = &H55
sTemp = StrConv(yTemp, vbUnicode)
a = sTemp
Print #1, a;
Print #1, b + Chr(10);
Close #1这个问题困扰很久了,麻烦有经验的前辈们指点一下!谢谢!
Open "Lpt1" For Output As #1
a = Text1.Text
hjj = Chr(27) + Chr(51) + Chr(n)
s4 = a + Chr(10)
Print #1, hjj
Print #1, s4
Close #1上面的hjj = Chr(27) + Chr(51) + Chr(n)是控制打印文字的行间距,n的取值是0到255,当n的值在0到127的时候,行间距越来越大,但是当n大于127的时候行间距就变得最小。即是chr(255)=chr(0),后面在打印机输出16进制码的时候也证明了这一点,本来上面如果n=192的话程序输出的十六进制应该是:1B 33 CO 0D OA...但是实际的输出却是1B 33 00 0D 0A...
好像是跟ASCII码有关,在0到127就可以转换,而大于127就不能转换输出。这个应该怎么解决?另外:用CHRW这个函数也是不行
还有用位的方式也不行:
Open "Lpt1" For Output As #1
Dim sTemp As String
Dim a As String
Dim b As String
b = Text1.Text
Dim yTemp(1 To 10) As Byte
yTemp(1) = &H8
yTemp(2) = &H1
yTemp(3) = &HC8
yTemp(4) = &H49
yTemp(5) = &HB0
yTemp(6) = &H51
yTemp(7) = &H52
yTemp(8) = &H53
yTemp(9) = &H54
yTemp(10) = &H55
sTemp = StrConv(yTemp, vbUnicode)
a = sTemp
Print #1, a;
Print #1, b + Chr(10);
Close #1这个问题困扰很久了,麻烦有经验的前辈们指点一下!谢谢!
Dim i As Integer
Open "LPT1" For Output As #1
Print #1, Chr(27); Chr(64) '清除原先的打印设置,即初始化
Print #1, Chr(28) & "@" '设置汉字状态
pnt1
Print #1, Chr(28) & "J" '设置汉字纵向打印
pnt1
Print #1, Chr(28) & "K" '设置汉字横向打印状态
Print #1, Chr(27); "3"; Chr(45) '设置换行量宽度
Print #1, Chr(27); "W"; Chr(1) '设置四倍放大
Print #1, Chr(27); "q"; Chr(3) '设置空心字
pnt1
Print #1, Chr(27); Chr(64) '清除原先的打印设置,即初始化
For i = 3 To 24 Step 3 '执行字符间隔调整
Print #1, Chr(28); "S"; Chr(0); Chr(i)
pnt1
Next
Print #1, Chr(28); "S"; Chr(0); Chr(3)
Print #1, Chr(27); "4"; '设置斜体
Print #1, Chr(27); "q"; Chr(3) '设置空心字
pnt1
'Print #1, Chr(28) & "." '切换回西文状态
Close #1
End SubPrivate Sub Form_Load()
Text1 = ""
Open "LPT1" For Output As #1
Print #1, Chr(27); Chr(64) '清除原先的打印设置,即初始化
Close
End SubPublic Sub pnt1()
Print #1, , "LPT1:" & "带有心脏的中英文打印机"
End Sub
我的问题是大于127它就无效了,就是是说chr(200)=chr(0)。这个应该怎么解决?
关于大于127的ASCII码是用于双字节汉字打印用的。一般打印机控制符的ASCII码应该小于128。
[格式] ASCII码 ESC 3 n
十六进制码 1B 33 n
十进制码 27 51 n
[范围] 0 ≤ n ≤ 255
[描述] 设置行间距为 [ n × 纵向或横向移动单位] 英寸。
[注释] • 行间距设置在标准模式和页模式下是相互独立的。
• 横向和纵向移动单位由 GS P 设置,改变这个设置不影响当前行间距。比如说这个指令,0 ≤ n ≤ 255,取值范围是0到255。这个只是一条指令,还有其他的很多指令的ASCII码都是大于127的,比如说定义字符和定义下载位图那些指令。取值范围都是0到255的。
所以能不能发送大于127的ASCII码对这些指令能不能用很重要。
数据dump方式(Data dump mode),才能检测已16进制字符方式显示的打印指令.
为了进入数据dump方式,在同时按下换页和换行按钮后打开打印机电源开关.你的情况还有一种可能是通信线有问题(缺位),或者是打印机的跳线与标准要求不一致.