小票打印机和windows的COM开发

默认分类 2008-08-07 10:40:41 阅读44 评论0大小 订阅

首先, 谈一下打印机硬件
最为经典的小票打印机, epsonTM系列:

小票打印功能项目 Java 小票打印机开发_buffer

爱普生TM-T58参数



基本参数

设计类型

行式热敏打印

分 辨 率

360dpi

打印性能

打印速度

100毫米/秒

打印字体

12×24(ANK)/ 24*24(Chinese)

接口类型

RS-232,Bi-directional parallel

纸张耗品

纸张尺寸

Roll paper:57.5±0.5mm

其他特性

电源参数

24VDC±7%

产品外形

116*204*137mm

产品重量

1.3kg

其他特点

纸张厚度:0.06-0.07mm


小票打印功能项目 Java 小票打印机开发_小票打印功能项目 Java_02





爱普生TM-U120参数



基本参数

设计类型

针式打印

分 辨 率

360dpi

打印性能

打印方式

9针针式点阵打印

打印速度

Approx.4.3 lps (42 columns,16.8 cpi,1/6 line feed)

Approx. 5.7 lps(30 columns, 16.8 cpi, 1/6 line feed)

Approx. 8.3 lps (16 columns, 16.8 cpi, 1/6 line feed)

Approx. 2.2 lps (23 columns, 9.3 cpi, 1/6 line feed)

打印字体

Font(standard)Font A:9*9,Font B:7 x 9,Multilingual 16*16

接口类型

IEEE-1284并口

纸张耗品

纸张尺寸

76 + 0.5mm

耗材性能

色带:ERC-43(P) Purple life: 5,000,000 characters

Life based on continuous printing at 25℃(77oF)

其他特性

环境标准

操作温度:0 - 45℃(32 - 113℃);存储温度:0 - 50℃(14 - 122℃),without paper and nbbon cassette;操作湿度:10 - 90%, must be no condensation;存储湿度:10 - 90%,must be no condensation,without paper and nbbon cassette

电源参数

+24 VDC

产品外形

160*248*132mm

产品重量

1.5kg

其他特点

接收缓冲:42 bytes/2KB;接口类型:Serial I/F (RS-232) or parallel 1F (IEEE 1284)



当然在硬件的com连接上, 系统就算连接上了一个外设了, 然后安装对应的驱动程序.


epson的打印机相对来说贵一点, 其实小票打印机便宜的300多就可以了, 而epson价格则在1000以上,不过也许从驱动的支持程度,开发的简易性方面来考虑的话, 相对来说开发成本可以得到控制.



硬件说完了, 接下来看看怎么利用串口通信的技术来开发小票打印程序吧!!


首先, 设置通过com连接打印机的参数, 这一步就如要通过odbc连接数据库一样,是必须的.


参数包括port,speed,parity,data,flowctrl,stopbits, isgraphic等


另外在程序设计中,一般每个单独的设备的实现都是通过一个线程加一个自动状态机(automation states machine)来实现的, 状态的设计就很重要, 对于打印机来说, 其状态为:

typedef enum 
 
{ 
 
    PRINTER_INIT, 
 
    PRINTER_IDLE, 
 
    PRINTER_PRINTING, 
 
    PRINTER_OUTOFSERVICE, 
 
    PRINTER_MAX_AUTOMATON_STATES 
 
} PrinterStates;


另外线程要实现的主要功能比较简单:

- CMD_CONFIG 
 
-  CMD_PRINT 
 
- CMD_CUT 
 
- CMD_GET_STATUS 
 
- CMD_LOAD_FONT



而对于打印机来言, 需要的是程序通过com发送过来的command buffer指令, 而这些指令在epson的SPEC手册里应该有说明, 如对于epson,如下:


#define PRINTER_LF                         0x0A    /* print and line feed */ 
 
#define PRINTER_CR                        0x0D    /* carriage return */ 
 
#define PRINTER_INIT_CODE           0x40    /* CHAR_ESC + initialisation of the printer */ 
 
#define PRINTER_STATUS_DMD      0x76    /* CHAR_ESC + request the printer status */ 
 
#define PRINTER_CHAR_ESC           0x1B 
 
#define PRINTER_PRINT_FEED        0x61 
 
#define PRINTER_CHINESE_MODE  0x7E 
 
#define PRINTER_FONT_9x9            0x1E 
 
#define PRINTER_CUT                      'P'



- print 指令:  对于epson U120, 每次buffer最大程度是984,所以如果要打印的内容比较多, 则要分批打印.


buffer[0]= 0x1d;    
 
                                buffer[1] = 0x56; 
 
                                buffer[2] = 0x42;



com通信的代码其实就像文件读写一样,可以通过封装供所有的com编程使用.


至于打印出来的格式的设置,则主要在发到print的buffer中来设置. 最好的办法是把上面的指令看成一个API, 再设计一个receipt专门用来组织这个buffer的程序来负责格式.


- 设置一个大的结构体来定义各种小票的格式, 其中id识别各种要打印的receipt, 接下来可以定义fontname,


  fieldtype, headtype,language等, 另外也可以通过reference找到已经定义在"配置文件"中的内容, 该内容会copy给receipt_data这个打印buffer.


- 设置一个buffer, 就是receipt_data, 它用来存放通过格式得出来的要打印的buffer, 当然在组织这个buffer时,分两个部分, 一个是格式信息wordingreference, 另一个是实际数据 bussinessdata. 组织完整之后, 通过com发给打印机.