并口打印指令总结
打印机ESCPOS 控制指令

HDD-80260打印机ESC/POS控制指令ESC/POS控制指令
HT横向跳格
FF打印并走纸
CAN页模式下删除打印缓冲区内容
DLEDC4nmt实时产生钱箱开启脉冲
ESCFF页模式下打印
ESCSPn设置字符右间距
ESC!n选择打印模式
ESC$nLnH设置绝对打印位置
ESC&yc1c2[x1d1...d(y×x1)]...[xkd1...d(y×xk)]定义用户自定义字符
ESC*mnLnHd1...dk选择位图模式
ESC?n取消用户自定义字符
ESCGn选择/取消双重打印模式
ESCL选择页模式
ESCMn选择字体
ESCRn选择国际字符集
ESCS选择标准模式
ESCTn在页模式下选择打印区域方向
ESCVn选择字符旋转打印
ESCc5n允许/禁止按键
ESCpmt1t2产生钱箱控制脉冲
FSpnm打印下载到FLASH中的位图
FSqn[xLxHyLyHd1...dk]1...[xLxHyLyHd1...dk]n定义Flash位图
GS!n选择字符大小
GS#n定义当前下载图号
GS*xyd1...d(x×y×8)定义下载位图
GS/m打印下载位图
GS:开始/结束宏定义
GSHn选择HRI字符的打印位置
GSWnLnH设置打印区域宽度
GS\nLnH页模式下设置纵向相对位置
GShn选择条码高度
①GSkmd1...dkNUL②GSkmnd1...dn打印条码
FS!n设置汉字字符模式
FS&选择汉字模式
FS.取消汉字模式
FSSn1n2设置汉字字符左右间距。
PR2打印机指令串口指令分析

IRP_MJ_WRITE 1B 6C
IRP_MJ_WRITE 1B 4C 30 30 39 //ESC L 009 [绝对垂直定位](009为定位座标)
IRP_MJ_WRITE 1B 6C
IRP_MJ_WRITE 1B 20 42
IRP_MJ_READ 1B 42 35 40 1B 5A
IRP_MJ_WRITE 1B 6C
1B 51 32 30 32 1B 5A //ESC Q X(3) ESC Z [定义页面长度]
1打印机设备类型选择](E:水平存磁条存折打印机;P,`为变量特征参数)
1B 6C //ESC l [取消错误状态]
IRP_MJ_WRITE 1B 20 42
IRP_MJ_READ 1B 42 35 40 1B 5A
IRP_MJ_WRITE 1B 6C
IRP_MJ_WRITE 1B 20 42
IRP_MJ_READ 1B 42 35 42 1B 5A
IRP_MJ_WRITE 1B 6C
IRP_MJ_WRITE 1B 6C
IRP_MJ_WRITE 1B 6C
1B 7C 41 31 36 39 39 38 37 36 35 34 33 32 31 30 0D 0A //ESC | A x(3) [定义存折本偏移量] (打印:9876543210)
IRP_MJ_WRITE 1B 6C
IRP_MJ_WRITE 1B 6C
IRP_MJ_WRITE 1B 6C
IRP_MJ_WRITE 1B 20 42
IRP_MJ_READ 1B 42 35 40 1B 5A
IRP_MJ_WRITE 1B 6C
打印机控制指令

HDD-80260打印机ESC/POS 控制指令ESC/POS 控制指令HT 横向跳格LF 打印并走纸一行FF 打印并走纸CR 打印并回车CAN 页模式下删除打印缓冲区内容DLE DC4 n m t 实时产生钱箱开启脉冲ESC FF 页模式下打印ESC SP n 设置字符右间距ESC ! n 选择打印模式ESC $ nL nH 设置绝对打印位置ESC % n 选择/取消用户自定义字符ESC & y c1 c2 [x1 d1...d(y ×x1)]...[xk d1...d(y ×xk)] 定义用户自定义字符ESC * m nL nH d1...dk 选择位图模式ESC – n 选择/取消下划线模式ESC 2 设置默认行高ESC 3 n 设置行高ESC = n 选择打印机ESC n 取消用户自定义字符ESC @ 初始化打印机ESC D n1...nk NUL 设置横向跳格位置ESC E n 选择/取消加粗模式ESC G n 选择/取消双重打印模式ESC J n 打印并走纸ESC L 选择页模式ESC M n 选择字体ESC R n选择国际字符集ESC S 选择标准模式ESC T n 在页模式下选择打印区域方向ESC V n 选择字符旋转打印ESC W xL xH yL yH dxL dxH dyL dyH 页模式下设置打印区域ESC \ nL nH 设置相对横向打印位置ESC a n 选择字符对齐模式ESC c 5 n 允许/禁止按键ESC d n 打印并向前走纸n 行ESC p m t1 t2 产生钱箱控制脉冲ESC t n 选择国际扩展字符码表ESC { n 选择/取消倒置打印模式FS p n m 打印下载到FLASH 中的位图FS q n [xL xH yL yH d1...dk]1...[xL xH yL yH d1...dk]n 定义Flash 位图GS ! n 选择字符大小GS # n 定义当前下载图号GS $ nL nH 页模式下设置纵向绝对位置GS * x y d1...d(x×y×8) 定义下载位图GS / m 打印下载位图GS : 开始/结束宏定义GS B n 选择/取消黑白反显打印模式GS H n 选择HRI 字符的打印位置GS L nL nH 设置左边距GS P x y 设置横向和纵向移动单位①GS V m②GS V m n 选择切纸模式并切纸GS W nL nH 设置打印区域宽度GS \ nL nH 页模式下设置纵向相对位置GS ^ r t m 执行宏命令GS f n 选择HRI 使用字体GS h n 选择条码高度①GS k m d1...dk NUL②GS k m n d1...dn 打印条码GS v 0 m xL xH yL yH d1....dk 打印光栅位图GS w n 设置条码宽度FS ! n 设置汉字字符模式FS & 选择汉字模式FS - n 选择/取消汉字下划线模式FS . 取消汉字模式FS 2 c1 c2 d1...dk 定义用户自定义汉字FS S n1 n2 设置汉字字符左右间距FS W n 选择/取消汉字倍高倍宽。
【VIP专享】打印机通过并口(或USB口)与电脑直接连接发送打印命令提示打印到LPT1错误

打印机通过并口(或USB口)与电脑直接连接,发送打印命令,提示打印到LPT1错误?并口一、现象二、原因分析 1、使用并口连接,通讯出现问题,并口电缆线故障、电脑端口或是打印机端口问题。
2、使用USB连接,驱动程序没有正确安装、端口没有正确设置、USB线故障或系统问题造成。
三、解决方案流程图:点击看大图 1、判断打印机硬件是否存在问题:1.1、查看指示灯状态是否正常:开机后错误指示灯是否长亮或闪烁,可以根据《用户指南》查找打印机故障。
1.2、做打印机自检,根据《用户指南》进行自检操作,如果打印机无法进行自检,请与当地Epson授权维修中心联系。
2、使用并口连接,发送打印命令,提示打印到LPT1错误。
2.1、检查电缆线状态,在打印机指示灯状态正常的情况下,进入MS-DOS,方法:“开始”-“运行”-输入“Com mand”-“确定”。
如图(1)图(1)MS-DOS下键入:“dir>prn”-“回车”,如图(2)。
此步骤是测试并口电缆是否存在问题,正常应输出Windows系统中的文件目录,若无法打印或打印乱码,则电缆线传输数据有问题,请更换另一根并口电缆线。
(并口线的长度一般不要超过1.8米)图(2)2.2、打印测试页(以Windows 2000为例,正确测试页样张),如图(3),进行下一步。
图(3)2.3、在Windows下升级端口驱动程序,操作方法如下: 2.3.1、Windows 98/Windows 2000系统: “控制面板”-双击“系统”-选择“硬件”(Windows 2000)-“设备管理器”。
如图(4)图(4) 双击“打印机端口(LPT1)”。
如图(5)图(5) 选择“驱动程序”-“更新驱动程序”,Windows 98系统选择“升级驱动程序”。
如图(6)图(6) 选择“显示已知设备驱动程序的列表,从中选择特定驱动程序”-“下一步”。
如图(7)图(7) 选择“显示这个设备类型的所有硬件”-“制造商”选择“标准端口类型”-“型号”选择“打印机端口”。
单片机控制打印机例程(北京荣达-并口)

/*********************************************************// 新荣达电子打印机测试程序// 51单片机,晶振11.0592// 时间:2009-7-10// 用与测试并行接口打印机// 常用打印机指令以函数行式体现// 可根据需要自行调用单一函数**********************************************************/#include<reg52.h> //51头文件#include<string.h> //字串处理函数头文件#include<math.h>#define uchar unsigned charsbit BUSY=P3^4; //并口打印机的BUSY,串口打印机的CTSsbit STB =P3^5; //打印机STB接P3.5unsigned char dat[]="新荣达电子测试程序,ABCDEFG123456"; //测试数据//---------------------单字节打印函数-------------------------void print(unsigned char ch){while (BUSY==1) //busy为1时,等待{;}P1= ch; //busy=0,将数据送到P1口STB = 0; //STB置0;; //空语句,延时使STB>1umSTB = 1; //STB置1}/***************************打印字串函数**********************************/ void print_chs(uchar ch[]){uchar i;for(i=0;i<strlen(ch);i++)print(ch[i]);}/*************************汉字打印例程***************************************/ void hanzitest(void){uchar i;print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("汉字命令测试:\n");for(i=0;i<5;i++) //搋环打印5次{print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print(0xd0);print(0xc2); //打印数据"新"print(0x1b);print(0x38);print(0x04); //调用12*12点阵汉字,24点阵为24*24print(0xc8);print(0xd9);print(0xb4);print(0xef); //打印数据“荣达”print(0x0d); //回车}}/*************************行间距例程************************************/void hangjianju(void){uchar i;print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("行间距测试:\n");for(i=0;i<11;i=i+2) //循环打印{print(0x1b);print(0x31);print(i); //ESC 1,设置行间距print_chs("LINE SPACING");print(0x0a); //打印字符串和换行}}/*************************水平造表例程***************************************/ void shuipingzhaobiao(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("水平造表测试:\n");print_chs("1234567890123456");// '标尺print(0x0d);print(0x1b);print(0x44);print(2);print(9);print(14);print(0);//ESC Dprint(9); //HT命令print_chs("HT1"); //打印字符串print(9); //HT命令print_chs("HT2"); //打印字符串print(9); //HT命令print_chs("HT3"); //打印字符串print(0x0d);}/*************************打印空格或换行例程**********************************/ void konggehuanhang(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("换行或空格测试:\n");print_chs("TE"); //打印字符串“TE”print(0x1b);print(0x66);print(0);print(0x06); //空六格print_chs("ST"); //打印字符串“ST”print(0x0d); //回车print_chs("TE"); //打印字符串“TE”print(0x1b);print(0x66);print(0x01);print(0x06); //换6行print_chs("ST"); //打印字符串“ST”print(0x0d); //回车}/*************************右限例程**********************************/ void youxian(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("右限测试:\n");print_chs("12345678901234567890123456789012");//标尺print(0x1b);print(0x51);print(0x06); //ESC Q 命令,右限为6print_chs("12345678901234567890123456789012");//打印字串print(0x0d); //回车}/*************************左限例程**********************************/ void zhuoxian(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("左限测试:\n");print_chs("12345678901234567890123456789012");//标尺print(0x1b);print(0x6c);print(0x06); //ESC I 命令,左限为6print_chs("12345678901234567890123456789012");//打印字串print(0x0d); //回车}/*************************放大指令例程**********************************/ void fangda(void){uchar i;print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("放大测试:\n");for(i=1;i<4;i++) //从1到3倍{print (0x1b);print(0x55);print(i); //横向放大print_chs("RD"); //打印字符}print(0x0d); //回车命令print(0x1b);print(0x40); //初始化打印机for(i=1;i<4;i++) //从1到3倍{print (0x1b);print(0x56);print(i); //纵放命令print_chs("RD"); //打印字符print(0x0d); //回车}print(0x1b);print(0x40); //初始化打印机for(i=1;i<4;i++) //从1到3倍{print (0x1b);print(0x57);print(i); //横纵向同时放大print_chs("RD"); //打印字符print(0x0d); //回车}}/*************************划线指令例程**********************************/ void huaxian(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("划线测试:\n");print(0x1b);print(0x57);print(2);//放大两倍打印,便于观察划线print_chs("RD"); //打印字串print(0x1b);print(0x2d);print(1);//允许下划线打印print_chs("UPT"); //UPT打印下划线print(0x1b);print(0x2d);print(0);//禁止下划线打印print_chs("RD"); //打印字串print(0x0d); //回车print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x57);print(2);//放大两倍打印,便于观察划线print_chs("RD"); //打印字串print(0x1b);print(0x2b);print(1); //允许上打印线打印print_chs("UPT"); //UPT上打印上划线print(0x1b);print(0x2b);print(0); //禁止上划线print_chs("RD"); //打印字串print(0x0d); //打印回车}/*************************上下标指令例程**********************************/ void shangxiabiao(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("上下标测试:\n");print(0x1b);print(0x57);print(0x02); //放大两倍print('M'); //打印字符'M'print(0x1b);print(0x57);print(0x01); //原倍print(0x1c);print(0x72);print(0); //上标命令print('2'); //打印字符'2'print(0x0d); //回车print(0x1b);print(0x57);print(0x01); //原倍print(0x1b);print(0x57);print(0x02); //放大两倍print('M'); //打印字符'M'print(0x1c);print(0x72);print(1); //上标命令print(0x1b);print(0x57);print(0x01); //原倍print('2'); //打印字符'2'print(0x0d); //回车}/*************************横纵向指令例程**********************************/void hengzhong(void){print(0x1b);print(0x40);print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("横纵向测试:\n");print(0x1c);print(0x4a); //设置纵向打印print_chs("ABCDEFGHI"); //打印字符print(0x0d); //回车print(0x1b);print(0x40);print(0x1C);print(0x4B); //设置横向打印print_chs("ABCDEFGHI"); //打印字符print(0x0d); //回车}/*************************自定义指令例程**********************************/void zidingyi(void){print(0x1b);print(0x40); //初始化指令print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("自定义字符测试:\n");print(0x1b);print(0x36); //如是24点阵机器,在自定义字符前面要加一个1B 36 指令才行print(0x1b);print(0x57);print(2); //横向纵向放大2倍print(0x1b);print(0x26);print(65); //ESC & 命令print(0x02);print(0x7C);print(0x40); //字模数据print(0xC0);print(0x40);print(0x00); //字模数据print(0x1b);print(0x25);print(65);print(65);print(0); //ESC %print(65); //打印定义字符print(0x1b);print(0x3a); //ESC:命令print(65); //复符集中的字符print(0x0d);}/*************************图形指令例程**********************************/void tuxing(void){uchar code tch[ ]={0x7c,0x44,0x44,0xff,0x44,0x44,0x7c,0x00,0x41,0x62,0x54,0xc8,0x54,0x62,0x41};uchar i;print(0x1b);print(0x40); //初始化指令print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("图形测试:\n");// print(0x1b);print(0x57);print(2); //横向纵向放大2倍print(0x1b);print(0x4b);print(15);print(0); //ESC K命令for(i=0;i<15;i++) //输入15个字节数据print(tch[i]);print(0x0d); //输入回车}/*************************曲线II指令例程**********************************/ //仅适用于热敏打印机void quxian_2(void){float X;unsigned int Y,YY;// Y1=50+40*abs(-0.01*X)*sin(X/10)// Y2=50-40*abs(-0.01*X)*sin(X/10)// Y3=50// Y4=50+40*abs(-0.1*X)// Y5=50-40*abs(-0.01*X)// 你可以用C语言编写如下的程序:// #include <math.h>// unsigned int Y,YY,X;print(0x1b);print(0x40); //初始化指令print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("曲线1测试:\n");for(X=0;X<150;X++) //打印150点行{Y= 40*exp(-0.01*X);YY= Y*sin(X/10);print(0x1b);print(39);print(5);print(0); //ESC命令,M=5,0print(50+YY);print(0);print(50-YY);print(0);print(50);print(0);print(50+Y);print(0);print(50-Y);print(0);print(13);}}/*************************曲线I指令例程**********************************/ //仅适用于针式打印机void quxian_1(void){float X;unsigned int Y,YY;// Y1=50+40*abs(-0.01*X)*sin(X/10)// Y2=50-40*abs(-0.01*X)*sin(X/10)// Y3=50// Y4=50+40*abs(-0.1*X)// Y5=50-40*abs(-0.01*X)// 你可以用C语言编写如下的程序:// #include <math.h>// unsigned int Y,YY,X;print(0x1b);print(0x40); //初始化指令print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("曲线2测试:\n");for(X=0;X<150;X++) //打印150点行{Y= 40*exp(-0.01*X);YY= Y*sin(X/10);print(0x1b);print(39);print(5); //ESC命令,M=5print(50+YY);;print(50-YY);print(50);;print(50+Y);print(50-Y);print(13);}}/************************旋转指令例程**********************************/ void xuanzhuan(void){uchar i;print(0x1b);print(0x40); //初始化指令for(i=0;i<4;i++) //0,90,180,270旋转{print(0x1c);print(0x49);print(i); //旋转指令print(0x1b);print(0x38);print(0); //汉字调出指令print_chs("旋转测试"); //打印汉字}print(0x0d); //回车}/************************反白指令例程**********************************/ void fanbai(void){uchar i;print(0x1b);print(0x40); //初始化指令for(i=0;i<2;i++) //i为1时,反白打印{print(0x1b);print(0x69);print(i);print(0x1b);print(0x38);print(0);print_chs("反白测试");}print(0x0d);}/************************反向指令例程**********************************/ void fanxiang(void){uchar i;print(0x1b);print(0x40); //初始化指令for(i=0;i<2;i++) //i为1时,禁止反向{print(0x1b);print(0x63);print(i);print(0x1b);print(0x38);print(0);print_chs("反向测试");print(0x0d);}}/************************条码指令例程**********************************/ //只有部分型号的打印机支持此指令void tiaoma(void){print(0x1b);print(0x40); //初始化指令print(0x1d);print(0x72);print(0x01); //打印条码字符print(0x1d);print(0x68);print(0x60); //设置条码高度为96点print(0x1d);print(0x6B);print(0x45);print(8); //打印长度为8的CODE39码print(0x2a);print(0x31);print(0x32);print(0x34);print(0x35);print(0x37);print(0x36);print(0x2a); //CODE39码数据print(0x0d); //回车print(0x1d);print(0x6B);print(3); //打印EAN13码print(0x32);print(0x37);print(0x30);print(0x38);print(0x35);print(0x38);print(0x35);print(0x30); //EAN13码数据print(0x30);print(0x39);print(0x32);print(0x34);print(0x38);print(0x00);print(0x0d); //回车}Main(){hanzitest();hangjianju();shuipingzhaobiao();konggehuanhang();youxian();fangda();huaxian();shangxiabiao();hengzhong();zhuoxian();zidingyi();tuxing();quxian_2(); //如用针打打印机将此函数去掉quxian_1(); //如用热敏打印机将此函数去掉xuanzhuan();fanbai();fanxiang();tiaoma();print(0x0d); //回车print(0x0d); //回车print(0x0d); //回车while(1); //死循环}。
打印机命令

ESC打印机的控制命令计算机能够完成数值计算、数据处理、图象设计、过程控制等工作都是在一种或多种计算机语言的指挥下进行的。
同样,打印机各种部件的运行和动作,各种打印动作的实现、在各种介质上打印出图形和字符,也是由一套能为打印机所识别的语言(命令)来进行控制。
通常将能完成上述功能的命令的集合成为打印机控制命令(Print Control Command)为了更好的熟知打印机控制命令,我们需先行了解打印机的数据处理流程。
二、打印机的控制命令目前主流的打印机控制命令主要有以下三种:EPSON公司的ESC PK命令集HP公司的PCL命令集Adobe公司的PostScript(简称PS)命令集ESC PK命令集是针式打印机(尤其是滚筒方式打印)领域事实上的工业标准;PCL命令集是中、低档激光打印机、喷墨机印机领域的工业标准;PS命令集则是高档排版、出版领域的应用标准。
1、名词解释1)控制命令:对打印机进行各种处理和控制动作,并为打印机所识别的命令序列。
2)仿真;控制打印机按照某种控制命令进行工作,就称为这个控制命令的仿真。
3)驱动程序;转换文件成为某种特定控制命令描述的文档,并进行输出的程序。
注:驱动程序就是打印控制命令的形体表现,其本质就是按照某一控制命令的格式,将计算机的数据进行翻译和组织,并形成相应的字符和位图的序列送往打印机。
2、命令分类打印机控制命令的种类可分为二大类:基本控制命令和扩充命令。
1)基本命令(Basic Control Code)基本命令其实就是ASCII码中规定的具有打印功能的控制命令,它的特点是均用一个ASCII码(一个字节)代表,使用比较方便。
它的数值范围如下:ASCII: 00H ~ 20H2)扩充命令(Extension Control Command)基本命令仅提供标准和基本的控制功能。
要实现字型大小、各种修饰功能、行与列间距控制、格式设定等较复杂的控制功能,就必须使用扩充命令。
打印机ESCPOS控制指令

打印机E S C P O S控制指令集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-H D D-80260打印机E S C/P O S控制指令ESC/POS控制指令HT横向跳格如果下一个跳格位置没有设置,该指令被忽略。
如果下一个横向跳格位置超越打印区域,将当前位置设置为[打印宽度+1]。
水平跳格位置由指令ESCD来设置。
如果接收到此命令时当前位置在[打印宽度+1],打印机执行当前行缓冲区满动作并且将打印位置移到下一行的起始位置。
默认值跳格位置是每8个标准ASCII字符(12×24)字符跳一格。
当前行缓冲区满时,打印机执行下列动作:标准模式下,打印机打印当前行内容并将打印位置置于下一行的起始位置。
页模式下,打印机进行换行并将打印位置置于下一行的起始位置。
LF打印并走纸一行该指令将当前位置置于行首。
FF打印并走纸打印后清除缓冲区的内容。
由ESCW指令设置的打印区域被重置为默认设置。
打印机不执行切纸动作。
该指令将当前位置置于行首。
该指令只在页模式下有效。
CR打印并回车设置打印位置为行首。
串行接口模式下该指令被忽略。
并口模式下该指令是否有效由打印机配置决定。
CAN页模式下删除打印缓冲区内容该指令只在页模式下有效。
如果先前设定区域与当前区域有重叠部分,重叠部分也被删除。
DLEDC4nmt实时产生钱箱开启脉冲当打印机正在执行钱箱开启命令(ESCp或DELDC4)时,该命令被忽略。
串口模式下,打印机接收该指令后立即执行。
并口模式下,打印机忙的时候该指令不执行。
如果打印数据中包含和此指令相同的数据,则这些数据将被当作该指令执行。
用户必须考虑到这种情况。
该指令尽量不要插在2个或更多字节的指令序列中。
即使打印机被ESC=(选择外设)命令设置为禁止,该指令依然有效。
ESCFF页模式下打印该指令只在页模式下有效。
打印后不清除打印缓冲区的内容、ESCT和ESCW设置和字符的位置。
并口打印指令总结

打印机(条码)打印标签、条码的方式一种是通过驱动发送图形的方式(这时一般需要排版软件),另一种是无需驱动直接通过发送指令到打印机执行打印。
这里就是采取第二种方式打印。
下面把实现过程中遇到的问题和一些心得总结一下:本实例使用DataMax-i-4308打印机。
1. VS(2008)中存在Com口操作的控件,却未有现成的LPT端口控件,而相对COM口来说,LPT的速度要快,所以在打印的时候客户一般选择LPT通讯方式,经过网上的一些查阅,终于实现了LPT口的打印,其他品牌打印机原理类似,只是打印指令有所区别。
实现LPT端口指令打印的方式是采用Windows下的API函数CreateFile,该函数要实现并口操作,需要设置几个关键参数。
函数原型为:HANDLE WINAPICreateFile( LPCTSTRlpFileName, DWORDdwDesiredAccess, DWORDdwShareMo de, LPSECURITY_ATTRIBUTESlpSecurityAttributes, DWORDdwCreationDispo sition, DWORDdwFlagsAndAttributes, HANDLEhTemplateFile);LPT操作需要设置:lpFileName应设为端口号;如"LPT1"或者"COM3"等;dwDesiredAccess设为GENERIC_WRITE或者GENERIC_READ或者GENERIC_WRITE|GENERIC_READ。
dwCreationDisposition应设为OPEN_EXISTING。
hTemplateFile需要设为NULL或者0。
在C#中使用API需要做一个dll库的使用声明,例:[DllImport("kernel32.dll ")]private static extern int CreateFile( string lpFileName, uint dwDesiredAccess, int dwShareMode, int lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile); 注:以上的宏需要自己定义,例:private const uint GENERIC_WRITE =0x40000000; private const int OPEN_EXISTING = 3;2. 使用CreateFile操作并口,然后使用CreateFile返回的句柄与并口通信。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
打印机(条码)打印标签、条码的方式一种是通过驱动发送图形的方式(这时一般需要排版软件),另一种是无需驱动直接通过发送指令到打印机执行打印。
这里就是采取第二种方式打印。
下面把实现过程中遇到的问题和一些心得总结一下:本实例使用DataMax-i-4308打印机。
1. VS(2008)中存在Com口操作的控件,却未有现成的LPT端口控件,而相对COM口来说,LPT的速度要快,所以在打印的时候客户一般选择LPT通讯方式,经过网上的一些查阅,终于实现了LPT口的打印,其他品牌打印机原理类似,只是打印指令有所区别。
实现LPT端口指令打印的方式是采用Windows下的API函数CreateFile,该函数要实现并口操作,需要设置几个关键参数。
函数原型为:
HANDLE WINAPI
CreateFile( LPCTSTRlpFileName, DWORDdwDesiredAccess, DWORDdwShareMo de, LPSECURITY_ATTRIBUTESlpSecurityAttributes, DWORDdwCreationDispo sition, DWORDdwFlagsAndAttributes, HANDLEhTemplateFile);
LPT操作需要设置:
lpFileName应设为端口号;如"LPT1"或者"COM3"等;
dwDesiredAccess设为GENERIC_WRITE或者GENERIC_READ或者GENERIC_WRITE|GENERIC_READ。
dwCreationDisposition应设为OPEN_EXISTING。
hTemplateFile需要设为NULL或者0。
在C#中使用API需要做一个dll库的使用声明,例:
[DllImport("kernel32.dll ")]
private static extern int CreateFile( string lpFileName, uint dwDesiredAccess, int dwShareMode, int lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile); 注:以上的宏需要自己定义,例:private const uint GENERIC_WRITE =
0x40000000; private const int OPEN_EXISTING = 3;
2. 使用CreateFile操作并口,然后使用CreateFile返回的句柄与并口通信。
例:(我这里是写入数据到LPT1)
int hPort = CreateFile("LPT1", GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
System.IntPtr hPortP = new IntPtr(hPort);//定义一个IntPtr对象并初始化,用于对句柄操作。
SafeFileHandle sfHandle = new SafeFileHandle(hPortP, true);//因为用hPortP给出警告。
FileStream fs;
fs = new FileStream(sfHandle, FileAccess.Write,1);//利用安全句柄和写模式实例一个文件流。
StreamWriter writer = new StreamWriter(fs);//定义一个写入流进行向LPT1写入数据。
writer.AutoFlush = false;//不让自动清空
writer.WriteLine(sContent);//把数据(字符串)写入到LPT1。
writer.Flush();
writer.Close();
fs.Close();
CloseHandle(hPort);
3. DataMax的指令DPL与Zebra的指令ZPL不同,开始编写指令发送,总是遇到一些无法打印(识别)的问题。
DPL看上去不如ZPL好理解,也许是很多人对ZPL比较熟悉的原因。
其实总的来说指令都大同小异,只是语法标示不太一样。
DPL指令在标签设置部分是以<STX>L做开始标示符的。
每行语句以<CR>
做结束符。
开始学习时一直把<STX>当做一个字符串来理解,在网上差了一些资料,说是需要转化为16进制才行,然后拼命的将<STX>转化为16进制,再把十六进制的数字格式化为字符串,发送给打印机仍然是无反应。
最后研究了下ASCII码,发现STX是一个控制字符。
<>只是起到说明里面的内容是控制字符的意思,需要用16进制转义字符。
例:
str = "\x02L\n" + "D11\n" + "1E0000000150100" + textBoxNum.Text + dateTimePickerDate.Value.ToString("yyyyMMdd") + strFor + "\n";//输入的单位编号加日期加流水号组成条码内容。
str += "121100000000100Barcode E\n" + "E\n";
把这里的str赋值给上面的sContent就行了,具体的函数编写可以根据自己的习惯或者思维方式来写。
实现的方式很多种,也可以自己定义一个类封装函数。
ASCII码表完整版。