为什么POS收银机第一次打印时总出现许多乱码?(以后打印就恢复正常)
在VFP中通过编程在POS收银机上进行打印票据操作(所使用的POS收银机为“好易通TM牌POS收银机”),但每次开机后第一次打印的票据全部是乱码,而且打印很长,约要打50cm长的乱码才停下。但以后发出打印命令程序后就能打出正常的票据,打印长度也能根据打印内容自动控制。
在VFP中设计的打印程序为:
SET DEVICE TO PRINTER
@1,7 say "商品销售单" font "宋体" ,9
@2,7 say "商品名:"+spmq1 font "宋体" ,9 &&spmq1为字符型变量
@3,7 say "销售数:"+xqsl1 font "宋体" ,9 &&xqsl1为字符型变量
@4,7 say "商品名:"+spmq2 font "宋体" ,9 &&spmq2为字符型变量
@5,7 say "销售数:"+xqsl2 font "宋体" ,9 &&xqsl2为字符型变量
……………………
set printer TO LPT1
(说明:以上程序在有的POS收银机上能正常运行,但现使用的“好易通TM牌POS收银机”总是在第一次打印时出现半米长的乱码,第二次和以后再打印就没有乱码。)
敬向电脑专家请教,为何POS收银机第一次打印时总出现许多乱码?该如何修改打印命令程序(或电脑设置)就能解决这一问题?不胜感激!
打印内容前 先发一个初始化命令, 或者把机器设置城EPSON 模式
[解决办法]
标准EPSON POS打印机的ESC/POS命令集
*---------------------------------
ESC/POS命令集
切纸指令:
发送:十六进制:1B69
4.1 基本控制指令
4.1.1 ESC @
[名称] 初始化打印机
[格式] ASCII码 ESC @
十六进制码 1B 40
十进制码 27 64
[描述] 清除打印缓冲区中的数据,复位打印机打印参数到当打印机缺省参数。
[注意] * 不是完全恢复到出厂设置,用户参数设置(见三、JPM112打印机工具软件)不会被更改。
4.1.2 FF
[名称] 打印并走纸到下页首
[格式] ASCII码 FF
十六进制码 0C
十进制码 12
[描述] 将打印缓冲区中的数据全部打印出来并返回标准模式。
[注意] * 打印后,删除打印缓冲区中的数据。
* 该命令设置打印位置为行的起始点。
* 如果打印纸有预印刷黑标,则打印缓冲区中的数据后,走纸到黑标处,如果打印纸无黑标,则
走纸0.5m后停止,预印刷黑标的规范请见附录B.预印刷黑标说明。
4.1.3 LF
[名称] 打印并换行
[格式] ASCII码 LF
十六进制码 0A
十进制码 10
[描述] 把打印缓冲区中的数据打印出来,并换行。
[注意] * 该命令把打印位置设置为行的开始位置。
4.1.4 CR
[名称] 打印并回车
[格式] ASCII码 CR
十六进制码 0D
十进制码 13
[描述] 打印但不进纸。
[注意] * 打印结束后,将下一行的开始设定为打印起始位置。
4.1.5 ESC J n
[名称] 打印并进纸
[格式] ASCII码 ESC J n
十六进制码 1B 4A n
十进制码 27 74 n
[范围] 0 ≤ n ≤ 255
[描述] 打印输出打印缓冲区中的数据,并进纸n个 垂直点距。
[注意] * 打印结束后,将下一行的开始设定为打印起始位置。
* 一个垂直点距为0.33mm,以下同。
4.1.6 ESC d n
[名称] 打印并进纸n 行
[格式] ASCII码 ESC d n
十六进制码 1B 64 n
十进制码 27 100 n
[范围] 0 ≤ n ≤ 255
[描述] 打印打印缓冲区中的数据并进纸n字符行。
[注意] * 该命令设置打印起始位置为行起点。
4.1.7 HT
[名称] 移动打印位置到下一个水平制表位置
[格式] ASCII码 HT
十六进制码 09
十进制码 9
[描述] 移动打印位置到下一个水平制表位置。
[注意] * 通过ESC D命令设置水平制表位的位置。
* 如果没有设置下一个水平制表位置,则该命令被忽略。
* 水平定位位置的缺省设定为字符A(6×12)的8个字符宽度(第9,17,25, … 列)。
4.1.8 FS U nL nH
[名称] 按Unicode编码向打印发送数据
[格式] ASCII码 FS U nL nH
十六进制码 1C 55 nL nH
十进制码 28 85 nL nH
[描述] 打印n(n=nL+nH*256)个Unicode编码字符。
[注意] * 因Unicode是双字节编码,此命令后的2*n(n=nL+nH*256)个字节被当作Unicode编码字符处理;
* 该指令中输入的汉字只支持GBK字库中包含的汉字,没有包含Unicode中所包含的所有汉字;
* 有关GBK的详细信息请参阅全国信息技术标准化技术委员会制定的 “汉字内码扩展规范”;
* 有关Unicode的详细信息可以参见Unicode的官方网站http://www.unicode.org;
* 本命令不受汉字命令的影响,也不受自定义字符命令的影响;
* 本命令可以嵌入其他ESC/GS/FS指令,但要采用Unicode编码。
4.2 字符参数设置命令
4.2.1 ESC ! n
[命令] 选择打印模式
[格式] ASCII码 ESC ! n
十六进制码 1B 21 n
十进制码 27 33 n
[范围] 0 ≤ n ≤ 255
[描述] 通过指定参数n 的值选择打印模式。参数n 的定义如下:
位 值 意义
0 0 西文字符 (半宽)字体A (6 ×12),汉字字符 (全宽)字体A (12×12)
1 西文字符 (半宽)字体B (8×16),汉字字符 (全宽)字体B (16×16)
1 - 未定义
2 - 未定义
3 0 取消粗体模式
1 设置粗体模式
4 0 取消倍高模式
1 设置倍高模式
5 0 取消倍宽模式
1 设置倍宽模式
6 - 未定义
7 0 取消下划线模式
1 设置下划线模式
[注意] * 当同时选择倍高及倍宽模式时,则打印出四倍大小字符。
* 打印机可以为所有字符加下划线,但不能为由HT命令产生的空白或顺时针旋转90°的字符加下划
线。
* 当一行中有一些倍高或更高字符时,行中所有字符都沿基线对齐。
* ESC M也可设定字体。最后接收到的命令的设定有效。
* ESC E也可设定或取消粗体模式。最后接收到的命令的设定有效。
* ESC –也可设定或取消下划线模式,最后接收到的命令的设定有效。
* GS !也可设定字符大小。最后接收到的命令的设定有效。
* 本命令对英数字符和汉字都有效。
[缺省值] n = 0
4.2.2 GS ! n
[名称] 放大字符
[格式] ASCII码 GS ! n
十六进制码 1D 21 n
十进制码 29 33 n
[范围] 0 ≤ n ≤ 255 (1 ≤垂直倍数≤ 2, 1 ≤ 水平倍数≤ 2)
[描述] 用位0~3位选择字符高度,用位4~7位选择字符宽度,如下所示:
0 1 2 3 高度 4 5 6 7 宽度
0 0 0 0 1倍 0 0 0 0 1倍
1 0 0 0 2倍 1 0 0 0 2倍
[注意] * 该命令对所有字符(英数字符和汉字) 有效。
* 如果n 在定义范围之外,忽略该命令。
* 垂直方向是指进纸方向,水平方向与进纸方向垂直。然而,当字符方向顺时针旋转90°后,垂直
方向与水平方向之间的关系颠倒,也就是说本命令优先级低于于ESC V,当两个命令同时有效时,
字符显示是先旋转,再放大。
* 当字符以不同的尺寸在一行中放大时,一行中所有的字符沿基线对齐。
* 用ESC ! 命令也可以设置字符大小。以最后接收到的命令设置当前模式。
[缺省值] n = 0
4.2.3 ESC M n
[名称] 选择字符字体
[格式] ASCII码 ESC M n
十六进制码 1B 4D n
十进制码 27 77 n
[范围] n = 0, 1, 16, 17,18,19
[描述] 选择字符字体。
N(十进制) 意义
0 西文字符 (半宽)字体(6×12)
1 西文字符 (半宽)字体(8×16)
16 简体汉字字符字体12×12
17 简体汉字字符字体16×16
18 BIG5汉字字符字体12×12
19 BIG5汉字字符字体16×16
[注意] * ESC !也可设定字体。最后接收到的命令的设定有效。
* 当使用该命令设定字体时。可以分别设定西文字体和汉字字体,而且互不影响。
4.2.4 ESC – n
[名称] 设置/取消下划线
[格式] ASCII码 ESC – n
十六进制码 1B 2D n
十进制码 27 45 n
[范围] 0 ≤ n ≤ 2
[描述] 基于以下的n值,设定 /解除下划线模式:
n(十进制) 意义
0 解除下划线模式
1 设定下划线模式(1 点粗)
2 设定下划线模式(2 点粗)
[注意] * 打印机不能给旋转字符以及反白字符打印下划线。
* 改变字符大小不影响当前下划线的粗细。
* 使用ESC !也可以设定或解除下划线模式。最后接收的命令设定有效。
* 该命令对英文和汉字字符都有效。
[缺省值] n = 0
4.2.5 ESC E n
[名称] 设定/解除粗体打印
[格式] ASCII码 ESC E n
十六进制码 1B 45 n
十进制码 27 69 n
[范围] 0 ≤ n ≤ 255
[描述] 设定或解除粗体打印模式。
当n 的最低位(LSB)为0时,解除粗体打印模式。
当n 的最低位(LSB)为1时,设定粗体打印模式。
[注意] * 仅n 的最低有效位允许使用。
* 使用ESC !也可以设置或取消粗体模式。最后接收的命令设定有效。
[缺省值] n = 0
4.2.6 ESC G n
[名称] 设定/解除重叠打印
[格式] ASCII码 ESC G n
十六进制码 1B 47 n
十进制码 27 71 n
[范围] 0 ≤ n ≤ 255
[描述] 设定或解除重叠打印模式。
当n 的最低有效位(LSB)为0时,解除重叠打印模式。
当n 的最低有效位(LSB)为1时,设定重叠打印模式。
[注意] * 仅n 的最低有效位允许使用。
* 在重叠模式和粗体模式中打印机输出是相同的。
[缺省值] n = 0
4.2.7 GS B n
[名称] 设定/解除反白打印模式
[格式] ASCII码 GS B n
十六进制码 1D 42 n
十进制码 29 66 n
[范围] 0 ≤ n ≤ 255
[描述] 设定或解除反白打印模式。
当n 的最低有效位为0时,关闭反白模式。
当n 的最低有效位为1时,打开反白模式。
[注意] * 仅n 的最低位有效。
* 该命令对内置字符和用户自定义字符均有效。
* 反白模式打开时,它对ESC SP设定的空白也有效。
* 该命令不影响位图,用户自定义位图,条形码,条码显示字符和由HT, ESC $, 及ESC \ 跳过的
间距。
* 反白模式优先于下划线模式。选择反白模式时,即使下划线模式打开也被禁止(但不取消)。
[缺省值] n = 0
4.2.8 ESC V n OK
[名称] 设置/解除字符旋转模式
[格式] ASCII码 ESC V n
十六进制码 1B 56 n
十进制码 27 86 n
[范围] 0 ≤ n ≤ 3
[描述] 设置/解除字符旋转模式
N (十进制) 意义
0 解除旋转模式
1 设置90°顺时针旋转模式
2 设置180°顺时针旋转模式
3 设置270°顺时针旋转模式
[注意] * 当设置了下划线模式时,对于顺时针90°旋转的字符,打印机不加下划线。
* 在 旋转模式下,倍宽和倍高命令放大字符的方向与一般模式下倍高倍宽命令放大字符的方向相
反。
[缺省值] n = 0
4.3 打印排版参数设置命令
4.3.1 ESC $ nL nH
[名称] 设置绝对打印位置
[格式] ASCII码 ESC $ nL nH
十六进制码 1B 24 nL nH
十进制码 27 36 nL nH
[范围] 0 ≤ nL ≤ 255
0 ≤ nH ≤ 255
[描述] 设定从一行的开始到将要打印字符的位置之间的距离。
从一行的开始到打印位置的距离为N个水平点距。
nL nH是双字节无符号整数N的低位和高位,N=nL + nH × 256
[注意] * 如果设定的打印位置超出了可打印区域(N>244),则被设置为可打印区域的最大值 (N=244)。
4.3.2 ESC D n1 n2…nk NULL
[名称] 设置水平制表位
[格式] ASCII码 ESC D n1…nk NULL
十六进制码 1B 44 n1…nk 00
十进制码 27 68 n1…nk 0
[范围] 1 ≤ n ≤ 255 0 ≤ k ≤ 8
[描述] 设置水平定位位置。
n 指定从一行开始的列号,用来设置水平定位位置。
k 表示将被设置水平定位点的总数。
[注意] * 水平制表位置作为一个值储存,这个值为n个西文字符宽度,是从行的开始测量的。字符宽度包