打印针检测工具

Author: 许鸥 Date: 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]");}