分享

!!开钱箱通用指令

 quasiceo 2016-05-30

[delphi] view plain copy
  1. // 支持开钱箱的打印机有EPSON 210PD/220、STAR POS58、DIY-POS POS58N  
  2. function openmoneybox:boolean// 开钱箱 Epson210D+D7+Win2k测试通过  
  3. Var  
  4. F:TextFile;  
  5. pdStr:string;  
  6. pport:string// 打印机端口,开钱箱端口  
  7. prin:string// 打印机类型  
  8. cd:string;  
  9. begin  
  10. cd:=trim(sini.ReadString('Pos','use_pos_pd_led_omb','')); // 使用客显开钱箱  
  11. if cd='1' then // // diy 川田客显开钱箱,使用客显开钱箱  
  12. begin  
  13. pdstr:=chr(2)+chr(77); // {控制顾客显示屏开钱箱指令}  
  14. com_send(Pchar(PDStr),Length(PDStr));  
  15. exit;  
  16. end;  
  17. try  
  18. pdStr:=Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255); // 开钱箱 在win2000下,TP POS58  
  19. // pdstr:=chr(27)+chr(112)+chr(0)+chr(60)+chr(255); // 在DOS下开钱箱 RP-POS58NL-P、RP-POS58NS-P、EPSON 210、TP-POS58  
  20. // CHR(27)+"p"+CHR(07); // Star SP312 (Receipt)->Star SP2000系列的打印机  
  21. pport:=sini.readstring('Pos','posprinterport',''); // 打印机端口  
  22. prin:=sini.ReadString('Pos','posprintertype',''); // 打印机类型  
  23. if prin='STAR SP2000兼容针打' then  
  24. pdstr:=CHR(27)+chr(112)+CHR(07); // Star SP312 (Receipt)->Star SP2000系列的打印机  
  25. // STAR SP2000兼容针打  
  26. assignFile(F, 'LPT1');  
  27. // assignfile(f,pport);  
  28. Rewrite(F);  
  29. Write(F,pdStr);  
  30. CloseFile(F);  
  31. Except  
  32. application.messagebox('对不起,打开钱箱失败,请检查[打印机类型或设置]!'+#13+#13+  
  33. '系统提示:请先检查[打印机是否没纸或打印机连接线]!',  
  34. pchar(syscaption),mb_ok+mb_iconerror);  
  35. End;  
  36. end;   
  37.   
  38.   
  39. 通用:  
  40.   
  41. 其实开钱箱是有几种,一:通过钱箱卡来驱动 二:通过打印机 三:通过顾显 四:通过主板接口,每种都不一样,以下是通过打印机来驱动的:  
  42. var   
  43. F:TextFile;  
  44. pdStr:string;开钱箱指令  
  45. begin  
  46. pdStr:=#27+#112+#0+#100+#100//很通用  
  47. assignFile(F, 'LPT1');  
  48. Rewrite(F);  
  49. Write(F,pdStr);  
  50. CloseFile(F);  
  51. end;  

 

 

[delphi] view plain copy
  1. 转:pos软件打印及开钱箱   
  2. PowerBuilder下使用并口控制打印机    
  3. 使用PowerBuilder编程的人员如果需要在Windows下使用并口打印机逐行打印,而又不想使用Windows的驱动程序。我们这里提供一种不需要任何外来的元件的方法。    
  4. integer  li_FileNum    
  5. String  PDStr    
  6. li_FileNum  =  FileOpen("LPT1",LineMode!,  Write!,  LockWrite!,  Append!)    
  7. PDStr=”PowerBuilder  Printer  on  LPT1”    
  8. FileWrite(li_FileNum,PDStr)    
  9. FileClose(li_FileNum)    
  10. 如果需要控制并口的POS58打印机开钱箱,使用以上方法是不可打开的,因为PowerBuilder会把chr(0)认为毫无意义而给屏蔽掉,所以就只有使用调用外部文件的方法来实现。把附带的OpenLptDoor.exe文件复制到程序的目录下,然后在PowerBuilder下调用以下语句就可以打开了,其实该文件执行的指令就是Chr(27)+”p”+Chr(0)+Chr(60)+Chr(255):    
  11. Run("OpenLptDoor.exe")    
  12. 如果OpenLptDoor.exe文件保存在别的位置,就要在调用语句中加入文件存放路径。    
  13. PowerBuilder环境下控制串口顾客显示屏    
  14. 使用PowerBuilder编程的人员如果需要在Windows下使用串口控制顾客显示屏或串口打印机,就需要使用外来方式。我们这里提供了API_COM.DLL这个链接库供调用。    
  15. 首先把API_COM.DLL文件复制到编写的源程序目录下,接着在程序中声明调用的三个函数:    
  16. 1、  打开源程序,然后选择下拉菜单“Declare”,接着从菜单中选择“Local  External  Functions”。    
  17. 2、  此时出现“Declare  Local  External  Functions”窗口,在窗口中输入如下内容:    
  18. function  Boolean  com_init(Int  com,int  baud)library  "api_com.dll"    
  19. function  Boolean  com_rest()  library  "api_com.dll"    
  20. function  Boolean  com_send(string  buf,int  len)library  "api_com.dll"    
  21. 按“OK”以后即对函数声明完毕。    
  22. 3、  现在就可以在程序中调用函数了。首先打开窗体的脚本编辑器,选择“show”事件,写入如下内容,该内容表示窗体显示时打开端口:    
  23. if  not  com_init(1,2400)  then    
  24. messagebox("错误","COM1打开错误!",exclamation!)    
  25. end  if    
  26. 4、  接着选择“close”事件,写入如下内容,该内容表示窗体关闭时关闭端口:    
  27. com_rest();    
  28. 5、  现在可以返回主窗体了,在窗体上增加一个按钮,打开该按钮的脚本编辑器,写入如下内容:    
  29. string  PDStr    
  30. PDStr=Char(27)+Char(81)+Char(65)+"1234.56"+Char(13);    
  31. com_send(PDStr,Len(PDStr))    
  32. 6、  按照如上操作,就可以向串口发送显示数字的指令了,如果需要实现其他的功能,只需要对PDStr进行赋值就可以了。    
  33. 下面是控制顾客显示屏显示“总计”灯的命令:    
  34. PDStr=Char(27)+Char(115)+”2”    
  35. 该代码还可以控制POS58打印机打印,给PDStr如下赋值就开始打印了:    
  36. PDStr=”PowerBuilder  Printer  on  COM1”+Char(10)    
  37. 使用打印开钱箱:    
  38. Chr(27)+”p”+Chr(0)+Chr(60)+Chr(255)    
  39.   
  40.   
  41.   
  42. 使用调用外部文件的方法来实现。把附带的OpenLptDoor.exe文件复制到程序的目录下,自定义打印按扭:  
  43.   
  44. Report(...)andRun(docdir +"OpenLptDoor.exe")    

 

 

[delphi] view plain copy
  1. 1、控制POS机的客户显示屏  
  2.   
  3. procedure TFrmMain.ShowMoney(Money_Port:   String;Money_String:String);  
  4. //Moneey_Port     顾显接口Com1   or   Com2     Money_String     顾显显示的内容  
  5. var  
  6.     PrnFileName:TextFile;  
  7. begin  
  8.     Assignfile(PrnFileName,Money_Port);  
  9.     printer.Canvas.Font.Name:='宋体';  
  10.     printer.Canvas.Font.Size:=8;  
  11.     printer.Canvas.Font.Charset:=GB2312_CHARSET;  
  12.     Rewrite(PrnFileName);  
  13.     write(PRNFileName,chr(12));         //清除顾显  
  14.     write(PRNFileName,chr(27)+chr(81)+chr(65)+Money_String+chR(13));       //显示信息  
  15.     CloseFile(PRNFileName);  
  16. end;  
  17.   
  18. 2、不换页走纸的打印  
  19.   
  20. procedure TFrmMain.AddPrintStrings(Strings: TStrings);  
  21. var  
  22. Prn: TextFile;  
  23. i: word;  
  24. begin  
  25. Assignfile(Prn,'lpt1');  
  26.     printer.Canvas.Font.Name:='宋体';  
  27.     printer.Canvas.Font.Size:=9;  
  28.     printer.Canvas.Font.Charset:=GB2312_CHARSET;  
  29. try  
  30.     Rewrite(Prn);  
  31.     try  
  32.       for i := 0 to Strings.Count - 1 do  
  33.         writeln(Prn, Strings.Strings[i]);  
  34.     finally  
  35.       CloseFile(Prn);  
  36.     end;  
  37. except  
  38.     on EInOutError do  
  39.       MessageBox(Handle,PChar('文本打印出错!'),'警告',MB_ICONEXCLAMATION or MB_OK);  
  40. end;  
  41. end;  
  42.   
  43.   
  44. 3、走纸换页的打印  
  45.   
  46. procedure TFrmMain.PrintStrings(Strings: TStrings);  
  47. var  
  48. Prn: TextFile;  
  49. i: word;  
  50. begin  
  51. AssignPrn(Prn);  
  52. try  
  53.     Rewrite(Prn);  
  54.     printer.Canvas.Font.Name:='宋体';  
  55.     printer.Canvas.Font.Size:=9;  
  56.     printer.Canvas.Font.Charset:=GB2312_CHARSET;  
  57.     try  
  58.       for i := 0 to Strings.Count - 1 do  
  59.         writeln(Prn, Strings.Strings[i]);  
  60.     finally  
  61.       CloseFile(Prn);  
  62.     end;  
  63. except  
  64.     on EInOutError do  
  65.       MessageBox(Handle,PChar('文本打印出错!'),'警告',MB_ICONEXCLAMATION or MB_OK);  
  66. end;  
  67. end;  
  68.   
  69. 4、打开钱箱  
  70.   
  71. procedure TFrmMain.OpenMoneyBox;  
  72. Var F:TextFile;  
  73.     PDStr:string;  
  74. begin  
  75. //弹出钱箱功能  
  76. PDStr:= Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255);  
  77. AssignFile(F, 'LPT1');  
  78. Rewrite(F);  
  79. Write(F, PDStr);  
  80. CloseFile(F);  
  81. end;  
  82.   
  83. 总结:以上代码经过测试通过。  

 

[c-sharp] view plain copy
  1. 开钱箱   
  2. buffer   =   'CHR(27)+   ''+CHR(0)+CHR(20)+CHR(255) ';     
  3.     Assignfile(PrnFileName, 'LPT1 ');   
  4.     try   
  5.         Rewrite(PrnFileName);   
  6.         write(PRNFileName,buffer   +   #13#10);   
  7.     finally   
  8.         CloseFile(PRNFileName);   
  9.     end;   
  10. 打印票据   
  11.     buffer   =   '打印内容 ';     
  12.     Assignfile(PrnFileName, 'LPT1 ');   
  13.     try   
  14.         Rewrite(PrnFileName);   
  15.         write(PRNFileName,buffer   +   #13#10);   
  16.     finally   
  17.         CloseFile(PRNFileName);   
  18.     end;   
  19.   
  20. 如果我先打印在开钱箱就好使,否则就象死掉了一样,那为什么呢?  

 

[c-sharp] view plain copy
  1. //Delphi下使用并口控制打印机  
  2.   
  3.   
  4. //打开钱箱的代码  
  5.   
  6. 2008年01月10日 星期四 15:38  
  7.   
  8.   
  9. Delphi下使用并口控制打印机  
  10.   
  11. 使用Delphi编程的人员如果需要在Windows下使用并口打印机逐行打印,而又不想使用Windows的驱动程序。我们这里提供一种不需要任何外来的元件的方法。  
  12.   
  13. Var F:TextFile;  
  14.   
  15. Str:string;  
  16.   
  17. Begin  
  18.   
  19. try  
  20.   
  21. Str:=’ 欢迎使用票据打印机!’+Chr(10);  
  22.   
  23. AssignFile(F, 'LPT1');  
  24.   
  25. Rewrite(F);  
  26.   
  27. Write(F, Str);  
  28.   
  29. CloseFile(F);  
  30.   
  31. Except  
  32.   
  33. Messagedlg('数据发送失败!',mterror,[mbok],0);  
  34.   
  35. End;  
  36.   
  37. end;  
  38.   
  39. 如果需要控制并口打印机开钱箱,也只需要重新给Str如下赋值:  
  40.   
  41. Str:= Chr(27)+'p'+Chr(0)+Chr(25)+Chr(255);  
  42.   
  43.   
  44. Delphi下使用串口控制打印机  
  45.   
  46. 使用Delphi编程的人员如果需要在Windows下使用串口控制顾客显示屏或串口打印机,就需要使用外来方式。我们这里提供了API_COM.DLL这个链接库供调用。  
  47.   
  48. 首先把API_COM.DLL文件复制到编写的源程序目录下,接着在程序的开头声明调用的三个函数来源:  
  49.   
  50. var  
  51.   
  52. Form1: TForm1;  
  53.   
  54. {加入下面三行声明}  
  55.   
  56. function com_init(com:Integer; baud:Dword):Boolean;stdcall;external 'api_com.dll';  
  57.   
  58. function com_rest:Boolean;stdcall;external 'api_com.dll';  
  59.   
  60. function com_send(buf:PChar; len:Integer):Boolean;stdcall;external 'api_com.dll';  
  61.   
  62. implementation  
  63.   
  64. {$R *.DFM}  
  65.   
  66. Com_init(1,9600)是打开串口进行通讯,1是打开COM1,波特率为9600。如果打开成功,它会返回逻辑真告知串口打开。  
  67.   
  68. Com_rest是关闭串口。  
  69.   
  70. Com_send(命令,长度)是发送数据到串口。  
  71.   
  72. {在窗体创建时打开端口}  
  73.   
  74. procedure TForm1.FormCreate(Sender: TObject);  
  75.   
  76. begin  
  77.   
  78. Com_init(1,9600);  
  79.   
  80. end;  
  81.   
  82. {在按钮中发送内容}  
  83.   
  84. procedure TForm1.Button1Click(Sender: TObject);  
  85.   
  86. begin  
  87.   
  88. Str=Chr(27)+Chr(112)+Chr(0)+Chr(25)+Chr(255);{控制打印机开钱箱指令}  
  89.   
  90. if com_send(Pchar(Str),Length(Str)) then  
  91.   
  92. begin  
  93.   
  94. Label1.Caption :='已经发送命令';  
  95.   
  96. end  
  97.   
  98. else  
  99.   
  100. begin  
  101.   
  102. Label1.Caption :='发送失败';  
  103.   
  104. end;  
  105.   
  106. end;  
  107.   
  108. {在关闭窗体时关闭端口}  
  109.   
  110. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);  
  111.   
  112. begin  
  113.   
  114. Com_rest;  
  115.   
  116. end;  
  117.   
  118. 上面语句是控制打印机开钱箱命令,其他的命令集只需要改变按钮中的Str的值即可:  
  119.   
  120. 下面是控制打印机打印出“欢迎使用GP系列票据打印机!”的命令:  
  121.   
  122. Str=’欢迎使用GP系列票据打印机!’+Chr(13)  
  123.   
  124. if com_send(Pchar(Str),Length(Str)) then  
  125.   
  126. begin  
  127.   
  128. Label1.Caption :='已经发送命令';  
  129.   
  130. end  
  131.   
  132. else  
  133.   
  134. begin  
  135.   
  136. Label1.Caption :='发送失败';  
  137.   
  138. end;  
  139.   
  140.   
  141. 部分特殊打印机  
  142.   
  143.    
  144.   
  145.   
  146.    
  147.   
  148.   
  149.   评论这张  转发至微博  0人  |  分享到:          阅读(127)| 评论(0)| 引用 (0) |举报   
  150.    数据集处理成可视树,数据网格自动适应宽度  在delphi中如何发送打印机控制码?  
  151. 历史上的今天  
  152.   
  153. 相关文章  
  154. C#枚举系统安装的所有打印机2010-02-19 01:23:31 vb.net直接控制并口打印机的两种方法2010-04-28 00:56:56 直接把结果输出到打印机2010-05-21 16:55:26 用宏给打印机“记工”2010-06-08 18:37:15 取得网络上的打印机2010-04-07 21:24:12   
  155. 最近读者  
  156. 登录后,您可以在此留下足迹。 fairyhoo  kingmous   
  157.   
  158. 评论  
  159. 点击登录|昵称:   
  160.    取消 验证码:换一张    
  161.   
  162. 上一页 1... -1-1-1-1-1-1-1... -1下一页  

 

[delphi] view plain copy
  1. 我目前用的是川田POS58的,指令是这样的:   
  2.   
  3.   
  4. 使用Delphi编程的人员如果需要在Windows下使用并口打印机逐行打印,而又不想使用Windows的驱动程序。我们这里提供一种不需要任何外来的元件的方法。   
  5. Var F:TextFile;   
  6. PDStr:string;   
  7. Begin   
  8. try   
  9. PDStr:=’Delphi Printer on LPT1’+chr(10);   
  10. AssignFile(F, 'LPT1');   
  11. Rewrite(F);   
  12. Write(F, PDStr);   
  13. CloseFile(F);   
  14. Except   
  15. Messagedlg('数据发送失败!',mterror,[mbok],0);   
  16. End;   
  17. end;   
  18. 如果需要控制并口的POS58打印机开钱箱,也只需要重新给PDStr如下赋值:   
  19. PDStr:= Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255);     
  20.   
  21.   
  22. http://www.sddbbs.net/bbs/dispbbs.asp?boardID=89&ID=1707  
  23.   
  24. 【分享】POS钱箱的安装方法及零售单开钱箱指令设置  
  25.  钱箱类型比较多,它的接口也有较大区别,有的类似电话线接头的,有的只有两根电线,有的是COM口的,也有的是LPT口的,安装与连接方法也有所不同,软件驱动方式也不一样。  
  26.   
  27. 常见的钱箱是与票据打印机一起使用的,一般票据打印机的背面都有钱箱的驱动接口,将钱箱的RJ11接头(类似电话线接头)连接到票据打印机背面的驱动接口,一般票据打印机是连接在COM口或LPT口上的,然后通过软件向COM或LPT口发送信号,这样就可以打开钱箱了;  
  28.   
  29. 一般票据打印机的钱箱的驱动指令是通过票据打印机来发送的,跟钱箱没有关系,票据打印机的供应商会提供给您该型号打印机的驱动钱箱指令说明,您再将该指令加入您的POS前台软件里即可。  
  30.   
  31. 驱动指令有使用十六进制的,也有十进制的,也有ASCII代码的,在下面的例子中将把这三种数据表达形式对应关系列示出。  
  32.   
  33. 如:STAR票据打印机接在LPT1口中,驱动指令是:  
  34.   
  35. 进制  
  36.       指令  
  37.  开钱箱指令  
  38.    
  39. 十六进制  
  40.  1B  
  41.  70  
  42.  7  
  43.  CHR(0x1B)+ CHR(0x70)+ CHR(0x7)  
  44.    
  45. 十进制  
  46.  27  
  47.  112  
  48.  7  
  49.  CHR(27)+ CHR(112)+ CHR(7)  
  50.    
  51. ASCII代码  
  52.  ESC  
  53.  p  
  54.    
  55.  CHR(27)+'p'+ CHR(7)  
  56.    
  57.    
1
0

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多