ESC/POS(200分)

  • 主题发起人 主题发起人 zh_zhen
  • 开始时间 开始时间
Z

zh_zhen

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟刚接触POS机,公司从国外买回的一个POS机(CASIO TK6000)又没有技术支持,又没有同事了解这个东西,请各位大虾帮忙解决以下问题,感激不尽:
我现在的工作环境是这样的,手上只有一台CASIO TK6000收款机,没有打印机,现在需要在PC机上编写一个程序模仿打印机回复POS机发送过来的命令(ESC/POS),但我不知道回复得对不对.
现在只收到POS机发送过来的4条状态查询命令:
ASCII码 16进制 我的回复
DEL EOT 1 10 04 01 14H
DEL EOT 2 10 04 02 12H
DEL EOT 3 10 04 03 12H
DEL EOT 4 10 04 04 12H
我需要向POS机声明打印机正常,可以进行打印,不知道上面的回复对否
现在的结果是一笔交易结束,开始打印时发送上面4条状态查询命令,我按照上面列表中内容回复,然后POS机又发送两条字符编码设置命令ESC R n和ESC t n,我没有回复(手册上没有明确要求回复),最后POS机一直又循环发送上面的四条命令,我也按照上面同样回复,大概循环五次后停止动作,不知何故[:(][:(]
有几次还POS机还发出过字符'x'或'|'两个字符,不知道什么意思,好像不是真正要打印的字符
 
[:(]怎么没人回答?没有说清楚吗?
情况是比较复杂,哪里没有说清楚,大家也可以问啦[:(][:(]
 
谁有ESC/POS 1.23版的手册呀?
 
话题2456240的标题是: 在Delphi中如何执行ESC/POS指令打印东西? (100分)
分类:打印 runcow (2004-02-16 18:15:00)
在Delphi中如何执行ESC/POS指令打印东西?
在线等待!

流云飘雪 (2004-03-02 10:29:04)
var
F:System.Text;
begin
AssignFile(F,'LPT1');
Rewrite(F);
Printer.Canvas.Font.Name:='宋体';
Printer.Canvas.Font.Size:=9;
Writeln(F,StringOfChar(' ',6));
Writeln(F,'时间:'+FormatDateTime('mm"月"dd"日"
hh:mm', Now));
System.CloseFile(F);
end;


wwwwb (2004-03-02 10:47:22)
var
F:TEXTFILE;
begin
ASSIGNFILE(F,'LPT1');
REWRITE(F);
WRITELN(F,chr(27) '@');
//initial the printer
WRITELN(F,'TEST1 FIRST LINE');
WRITELN(F,chr(12));
// move the paper to a new page
CLOSEFILE(F);

toofy45 (2004-03-02 10:58:15)
楼上的方法是Right!

whbell (2004-03-05 19:27:40)
楼上各位, 我的程序要在访问网络打印机(热敏,连接在打印服务器上)
怎么办呢?
请各位帮忙,谢谢!
 
话题2545091的标题是: pos机的开钱箱程序 (100分)
分类:混合语言编程 arther (2004-04-07 15:36:00)
各位大侠:
小弟最近在做一个pos记得开箱命令时被难倒了,请各位大虾帮忙!
pos 机的开箱命令是:esc p m t1 t2,lpt1 口
我认为是在delphi 中加入汇编语言对lpt1(378H)编程,可是不知道如何下手?
请大侠帮忙!

kingdeezj (2004-04-07 15:46:57)
这是以前写的一段代码,可以控制打印机、钱箱。打印机连接在LPT1,不用安装驱动程序。
RPrinter为TextFile类型;
SContent为TStringList类型。
// 建立打印连接并打印数据
Assignfile(RPrinter,'lpt1');
// 设置打印机
Rewrite(RPrinter);
// 准备写文件
Writeln(RPrinter,chr($b)+chr(27)+'K'+chr(40));
// 向后倒纸!
...
for i := 0 to SContent.Count - 1do
Writeln(RPrinter,SContent.strings);
Writeln(RPrinter,chr($b)+chr(27)+'J'+chr(140));
// 向前进纸

CloseFile(RPrinter);
// 关闭打印机,结束打印
SContent.Free;
// 释放字符串列表


mstar (2004-04-07 16:59:35)
// 建立打印连接并打印数据
Assignfile(RPrinter,'lpt1');
// 设置打印机
Rewrite(RPrinter);
// 准备写文件
Writeln(RPrinter,chr(27)+'p'+'m'+(后面两个看起来像是参数) t1 t2);
// 开钱箱
CloseFile(RPrinter);
// 关闭打印机,结束打印

razy (2004-04-09 14:58:34)
加入汇编!!
procedure;
asm
.....
end;


Tiger_Dxj (2004-04-09 15:16:24)
我做过这种程序,用汇编是可以的,问题是程序如果运行在2000或XP下是无法直接嵌入汇编的,后来找了一个开钱箱的程序,在自己的delphi程序里直接调用它就可以打开钱箱了,要的话请发email : dxj_lhq@sina.com

1295118971 (2004-04-10 17:58:48)
{ *********************************************************************** }
{ 向指定的串口写批定的字符串 }
{ *********************************************************************** }
procedure PortOut(APortName,AExpress:string);
var
CustomerDisplay:TextFile;
begin
AssignFile(CustomerDisplay,APortName);
ReWrite(CustomerDisplay);
Write(CustomerDisplay,AExpress);
CloseFile(CustomerDisplay);
end;

{ *********************************************************************** }
{ 开钱箱 }
{ *********************************************************************** }
procedure OpenCashBox;
begin
PortOut('LPT1',#27+#112+#0+#20+#80);
PortOut('LPT1',#27+#112+#1+#20+#80);
end;
 
话题887750的标题是: 在delphi中如何打开POS机的钱箱? (100分)
分类:非技术问题 dana (2002-01-27 10:41:00)
客户向我提供这一串命令,可不知在delphi编程中如何调用去打开POS机的钱箱?
设定在windows下自动开钱箱功能
   LPRINT CHR$(27);"|w";CHR$(45);CHR$(n)
   n=0 FF走纸命令时钱箱无效
   n=1 钱箱1打开
   n=2 钱箱2打开

taozhiyu (2002-01-27 10:42:00)
应该可以的吧!不就是在delphi中用汇编嘛!我来听课!

Chenlili (2002-01-27 12:33:00)
hehe,basic下面这是往打印机(也就是并口发指令)
找一个串口/并口的控件,然后照写不就行了?

dana (2002-01-28 16:22:00)
怎么写啊,我看不懂。

snowbird (2002-01-28 16:55:00)
如钱箱接打印口的话,
try
assignFile(mytext,'Lpt1');
buf:=chr(27)+chr(45)+chr(2);
writeln(mytext,buf);
finally
closefile(mytext);
end;


bigroom (2002-01-28 17:06:00)
基本同意楼上,输出的字串为:
buf:=chr(27)+'|w'+chr(45)+chr(2);

Oldtiger (2002-01-28 17:23:00)
不需要控件啦,用TPrinter类型就行!

dana (2002-01-30 11:12:00)
snowbird:不行啊,打不开,这是为什么?

dana (2002-01-31 17:08:00)
还是不行啊?
有谁做过啊?

wgzhou (2002-02-04 22:02:00)
to oldtiger :
How can Ido
?

wgzhou (2002-02-04 23:28:00)
error : file access deny

dana (2002-02-05 9:39:00)
对不起厂家提供的是这样,我没写全。
开 钱 箱控制命令(该命令可同时开启两个钱箱,实际操作只需开启一个)
1、PK模式驱动钱箱指令
  ESC | r F9 M n1 n2
  M =0 代表一个钱箱 n代表脉冲宽度 n1 =40--50 之间
  M =1 代表两个钱箱 n2 =120--150之间
  QBASIC下编程
  LPRINT CHR$(27);"|";"r";CHR$(249);CHR$(0); CHR$(50);CHR$(150)
2、POS模式驱动钱箱指令
  ESC r p M n1 n2
  M =0 代表一个钱箱 n代表脉冲宽度 n1 =40--50 之间
  M =1 代表两个钱箱 n2 =120--150之间
  QBASIC下编程   LPRINT CHR$(27);CHR$(112);CHR$ (0);CHR$ (50);CHR$(200)
3、BS300K可同时打开两个钱箱,当接 2、4 时钱箱1打开,接4、5时钱箱2打开
4、设定在windows下自动开钱箱功能
   LPRINT CHR$(27);"|w";CHR$(45);CHR$(n)
   n=0 FF走纸命令时钱箱无效
   n=1 钱箱1打开
   n=2 钱箱2打开

Gregory (2002-02-05 10:02:00)
这是以前写的一段代码,可以控制打印机、钱箱。打印机连接在LPT1,不用安装驱动程序。
RPrinter为TextFile类型;
SContent为TStringList类型。
// 建立打印连接并打印数据
Assignfile(RPrinter,'lpt1');
// 设置打印机
Rewrite(RPrinter);
// 准备写文件
Writeln(RPrinter,chr($b)+chr(27)+'K'+chr(40));
// 向后倒纸!
...
for i := 0 to SContent.Count - 1do
Writeln(RPrinter,SContent.strings);
Writeln(RPrinter,chr($b)+chr(27)+'J'+chr(140));
// 向前进纸

CloseFile(RPrinter);
// 关闭打印机,结束打印
SContent.Free;
// 释放字符串列表

wgzhou (2002-02-05 18:43:00)
写并口可以,写串口出错!
Why ?

Gregory (2002-02-05 19:34:00)
打印机连接到并口→钱箱连接到打印机上,当然应该使用并口啊。
难道你的打印机连接在串口。

wgzhou (2002-02-05 23:03:00)
我的票据打印机是TM-U300A,是接在串口上的
我换了一台机器
使用Gregory方法,串口可以打印,但打出来是乱码.
打印机自检正常,没坏,是我从一台正在使用的pos机上拆下来的

drummer (2002-02-06 9:04:00)
l

DelphiCQ6 (2002-02-06 9:33:00)
呵呵,用Cport控件,一切问题迎仞而解。需要的话,给我e-mail:
easylife@21cn.com

dana (2002-04-21 11:53:00)
多人接受答案了。

bigroom-10,Chenlili-10,DelphiCQ6-10,drummer-10,Gregory-10,Oldtiger-10,snowbird-10,taozhiyu-10,wgzhou-20,的回答最终被接受。
 
[:(][:(]各位大虾,请注意,我现在是没有打印机,只有上位POS机,或者PC机;
在有打印机的前提下,发出命令让打印机执行相应操作,应该不难,但现在需要反过来,站在打印机的角度,响应上位机发来的命令
 
后退
顶部