关于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这个问题困扰很久了,麻烦有经验的前辈们指点一下!谢谢!

解决方案 »

  1.   

    似乎只用了7个数据位,LPT口有8个数据位。自己检查一些打印机协议,是否有命令进行设置。
      

  2.   

    请按VB老鸟的思路,仔细阅读打印机说明书。以下是按EPSON1600打印机写的POS机打印代码:Private Sub Command1_Click()
        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
      

  3.   

    老大,你好像没明白我的意思哦。你这些代码我都有,也运行过,确实是没问题,问题是你这些代码里面的控制指令都小于127.
    我的问题是大于127它就无效了,就是是说chr(200)=chr(0)。这个应该怎么解决?
      

  4.   

    你不是想调整行间距吗?建议你仔细阅读打印机说明书来解决问题。
    关于大于127的ASCII码是用于双字节汉字打印用的。一般打印机控制符的ASCII码应该小于128。
      

  5.   

    厄..不知道是我没有仔细看打印机说明书还是你没有仔细看打印机说明书ESC 3 n 设置行间距
    [格式] 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码对这些指令能不能用很重要。
      

  6.   

    LZ:你须确认你的打印机处于:
    数据dump方式(Data dump mode),才能检测已16进制字符方式显示的打印指令.
    为了进入数据dump方式,在同时按下换页和换行按钮后打开打印机电源开关.你的情况还有一种可能是通信线有问题(缺位),或者是打印机的跳线与标准要求不一致.