打印针检测工具 许鸥 1997-01-01   针式打印机如果操作不当或使用时间过久,容易出现断针漏针现象。如通过直接观察打印头很难判断故障所在,尤其是对针头完好而驱动电路有故障的打印头更是难以确定。笔者用Turbo C 2.0程序编写的打印针检测程序,可以快速而准确地找到故障所在针头。程序编译后可在DOS命令行下直接运行,并可带若干参数。 #3  功能:   检测所有打印针或任意指定8根以下的打印针。 #3  用法:   TESTPRN [N1] [N2] [N3] [N4] [N5] [N6]    [N7] [N8] #3  其中:   Ni为任意指定的打印针号,范围为1~24(从上至下)。   如果只有一个参数且为“/?”,则提示帮助信息;若无参数则默认检测所有打印针。 #3  程序说明:   该程序通过调用打印机图象控制命令实现单针打印,其命令格式为:“ESC * M N1 N2 DATA”,其中M表示图象选择,N1和N2表示打印列数,总列数为:N1+N2×255,DATA为打印数据,具体请参照有关打印机使用手册。程序所用的图象控制信息和打印数据分别存于数组STR1[]和STR2[]中。STR1[]中内容用户可根据需要自行修改。本程序在DOS 6.22下,对LQ-1600K、LQ-1900K、NEC-P8000等打印机进行测试,效果良好。注意:如果在UCDOS、CCDOS等汉字系统下运行,请先卸下打印驱动程序,否则将不能正常检测。 #3  程序清单如下:<文件名:TESTPRN.C>   /*快速检测打印针程序*/   #include "stdio.h"   #include "stdlib.h"   int n=1;   FILE *fprn;   main(argc,argv)   int argc;   char *argv[];   {int i,j,k,l,n1,n2,flag=0;   fprn=fopen("PRN","w");   if (argc<2)   for (i=0;i<3;i++)   { for (j=0;j<8;j++)  /*调用检测子程序*/   { test(i,j,flag);}}   else   {for(k=1;k<argc;k++)   {   /*转换命令行参数为整形数*/   l=atoi(argv[k]);   if((argc==2)&&(!(atrcmp(argv[1],"/?")))||(argc>9)||l<1||l>24)   {   /*参数错误显示帮助信息*/   help();   exit(0);}}   flag=1;   for(k=1;k<argc;k++)   {l=atoi(argv[k]);   n1=1/8;   n2=1%8;   test(n1,n2,flag);   }}   fprint(fprn,"\n");   fclose(fprn);}   test(x,y,z)   /*检测子程序*/   int x,y,z;   {int k,l,m;   /*图象命令控制信息*/   char str1[]={27,42,32,40,1,NULL};                        /*用于存放打印数据*/   char str2[3];   /*产生各打印针编码*/   str2[x]=128>>y;   switch(x)   {case 0:str2[1]=str2[2]=0;   break;   case 1:str2[0]=str2[2]=0;   break;   case 2:str2[0]=str2[1]=0;   break;}   fprintf(fprn,"\n\n\tPrint with %02-pin:",(!z)?(n++):(x*8+y+1));   for (m=0;m<5;m++)   /*发送图象打印指令*/   fprint(fprn,"%c",str1[m]);   for(k=0;k<296;k++)   for(l=0;l<3;l++)   /*传送打印数据*/   fprintf(fprn,"%c",str2[1]);   fprintf(fprn,"\n");}   help()   /*帮助信息*/   {printf("Useage:testprn [N1] [N2] [N3]    [N4] [N5] [N6] [N7] [N8]");}