新手求教,在delphi中如何使用POS机的显示屏控制命令

tcfanqi 2013-05-31 11:49:42
有一台收银机,顾客显示屏的控制命令是如图,如何在DELPHI中调用来控制显示金额信息?
如图:
...全文
187 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gencheng 2013-06-03
  • 打赏
  • 举报
回复
你的哪个说明书写的很详细啊,什么ASCII码,十进制格式,十六进制都给你提供了,很方便调试啊。
gencheng 2013-06-03
  • 打赏
  • 举报
回复
要是不明白的话,下个串口工具,向设备试发一下数据就明白了。很简单吧。
gencheng 2013-06-03
  • 打赏
  • 举报
回复
cport也可很好用啊。 就是write---发送 例:Write(buf, size); read---读取 例:Read(buf, size); 然后注意一下读取超时,把它封装到一个线程里就可以了。读取结果可以用sendmessage()从线程中向主程序发送。
babydog01 2013-06-03
  • 打赏
  • 举报
回复
http://www.cnpack.org/index.php?lang=zh-cn 国产免费控件,推荐使用。
babydog01 2013-06-03
  • 打赏
  • 举报
回复
那个串口控件,CNPACK中有,用SPCOMM也可以。
yanghailun_ 2013-06-01
  • 打赏
  • 举报
回复
引用 5 楼 babydog01 的回复:

procedure TForm26.Button2Click(Sender: TObject);
var
  mystr: string;
begin
{
3.      ESC  @初始化命令
       ASCII码  格式:ESC  @
       十进制   格式:[027][064]
       十六进制 格式:[1BH][40H]
       说明:恢复到上电开机时的状态。

4.      CLR清屏命令
       ASCII码  格式:CLR
       十进制   格式:[012]
       十六进制 格式:[0CH]
       说明:清除屏幕上的所有字符。

5.      ESC  Q  A  d1d2d3…dn  CR送显示数据命令
       ASCII码 格式:ESC  Q  A  d1d2d3…dn  CR
       十进制格式:[027][081][065]d1d2d3…dn[013] 48<=dn<=57或dn=45或dn=46
       十六进制 格式:[1BH][51H][41H]d1d2d3…dn[0DH]
                                         30H<=dn<=39H或dn=2DH或dn=2EH
       说明:a.执行该命令时,会以覆盖模式送要显示的数据,这样就不需要在每次送显
               示数据前都去执行CAN清除光标行命令了。
             b.显示的d1…dn没有小数点时1<=n<=8。
             c.显示的d1…dn有小数点时1<=n<=15(8位数值+7位小数点)。
             d.显示的内容可用CLR或CAN命令清除。

6.      ESC  s  n设置“单价”、“总计”、“收款”、“找零”字符显示状态命令
       ASCII码 格式:ESC  s  n            0<=n<=4
       十进制   格式:[027][115] n           48<=n<=52
       十六进制 格式:[1BH][73H] n          30H<=n<=34H
       说明:(1)当 n=0,四种灯 全暗。
             (2)当 n=1,“单价”灯 亮,其它三种 暗。
             (3)当 n=2,“总计”灯 亮,其它三种 暗。
             (4)当 n=3,“收款”灯 亮。其它三种 暗。
             (5)当 n=4,“找零”灯 亮。其它三种 暗。
           // com_send(Pchar(PDStr),Length(PDStr))
}


//显示合计
  myStr := Chr(27) + Chr(115) + '2';

  try
    self.CnRS2322.WriteCommData(pchar(mystr), Length(myStr));
    sleep(30);
  except
  end;

//显示金额
  mystr := floattostr(self.DBGridEh1.Columns[10].Footers[0].SumValue);
  if trim(mystr) = trim(self.Edit2.Text) then exit;
  self.Edit2.Text := trim(mystr);
//if self.DBGridEh1.Columns[10].Footers[0].SumValue=0 then mystr:='';
//mystr:='         '+trim(mystr);
//mystr:=rightstr(mystr,8);
  myStr := Chr(27) + Chr(81) + Chr(65) + mystr + Chr(13);
  try
    self.CnRS2322.WriteCommData(pchar(mystr), Length(myStr));
    sleep(30);
  except
  end;

end;


以前项目中的应用,可供参考一下。。。。
tcfanqi 2013-06-01
  • 打赏
  • 举报
回复
我用的是delphi 10
tcfanqi 2013-06-01
  • 打赏
  • 举报
回复
引用 5 楼 babydog01 的回复:

procedure TForm26.Button2Click(Sender: TObject);
var
  mystr: string;
begin
{
3.      ESC  @初始化命令
       ASCII码  格式:ESC  @
       十进制   格式:[027][064]
       十六进制 格式:[1BH][40H]
       说明:恢复到上电开机时的状态。

4.      CLR清屏命令
       ASCII码  格式:CLR
       十进制   格式:[012]
       十六进制 格式:[0CH]
       说明:清除屏幕上的所有字符。

5.      ESC  Q  A  d1d2d3…dn  CR送显示数据命令
       ASCII码 格式:ESC  Q  A  d1d2d3…dn  CR
       十进制格式:[027][081][065]d1d2d3…dn[013] 48<=dn<=57或dn=45或dn=46
       十六进制 格式:[1BH][51H][41H]d1d2d3…dn[0DH]
                                         30H<=dn<=39H或dn=2DH或dn=2EH
       说明:a.执行该命令时,会以覆盖模式送要显示的数据,这样就不需要在每次送显
               示数据前都去执行CAN清除光标行命令了。
             b.显示的d1…dn没有小数点时1<=n<=8。
             c.显示的d1…dn有小数点时1<=n<=15(8位数值+7位小数点)。
             d.显示的内容可用CLR或CAN命令清除。

6.      ESC  s  n设置“单价”、“总计”、“收款”、“找零”字符显示状态命令
       ASCII码 格式:ESC  s  n            0<=n<=4
       十进制   格式:[027][115] n           48<=n<=52
       十六进制 格式:[1BH][73H] n          30H<=n<=34H
       说明:(1)当 n=0,四种灯 全暗。
             (2)当 n=1,“单价”灯 亮,其它三种 暗。
             (3)当 n=2,“总计”灯 亮,其它三种 暗。
             (4)当 n=3,“收款”灯 亮。其它三种 暗。
             (5)当 n=4,“找零”灯 亮。其它三种 暗。
           // com_send(Pchar(PDStr),Length(PDStr))
}


//显示合计
  myStr := Chr(27) + Chr(115) + '2';

  try
    self.CnRS2322.WriteCommData(pchar(mystr), Length(myStr));
    sleep(30);
  except
  end;

//显示金额
  mystr := floattostr(self.DBGridEh1.Columns[10].Footers[0].SumValue);
  if trim(mystr) = trim(self.Edit2.Text) then exit;
  self.Edit2.Text := trim(mystr);
//if self.DBGridEh1.Columns[10].Footers[0].SumValue=0 then mystr:='';
//mystr:='         '+trim(mystr);
//mystr:=rightstr(mystr,8);
  myStr := Chr(27) + Chr(81) + Chr(65) + mystr + Chr(13);
  try
    self.CnRS2322.WriteCommData(pchar(mystr), Length(myStr));
    sleep(30);
  except
  end;

end;


以前项目中的应用,可供参考一下。。。。
感谢! 但是“self.CnRS2322”这个控件从那里找呢?
tcfanqi 2013-05-31
  • 打赏
  • 举报
回复
引用 1 楼 SmallHand 的回复:
手册都给了,那就可以了。 原理是向串口发送命令就可以了。
感谢,请写个例子示下,不好意思真是新手
火龙岛主 2013-05-31
  • 打赏
  • 举报
回复
手册都给了,那就可以了。 原理是向串口发送命令就可以了。
babydog01 2013-05-31
  • 打赏
  • 举报
回复

procedure TForm26.Button2Click(Sender: TObject);
var
  mystr: string;
begin
{
3.      ESC  @初始化命令
       ASCII码  格式:ESC  @
       十进制   格式:[027][064]
       十六进制 格式:[1BH][40H]
       说明:恢复到上电开机时的状态。

4.      CLR清屏命令
       ASCII码  格式:CLR
       十进制   格式:[012]
       十六进制 格式:[0CH]
       说明:清除屏幕上的所有字符。

5.      ESC  Q  A  d1d2d3…dn  CR送显示数据命令
       ASCII码 格式:ESC  Q  A  d1d2d3…dn  CR
       十进制格式:[027][081][065]d1d2d3…dn[013] 48<=dn<=57或dn=45或dn=46
       十六进制 格式:[1BH][51H][41H]d1d2d3…dn[0DH]
                                         30H<=dn<=39H或dn=2DH或dn=2EH
       说明:a.执行该命令时,会以覆盖模式送要显示的数据,这样就不需要在每次送显
               示数据前都去执行CAN清除光标行命令了。
             b.显示的d1…dn没有小数点时1<=n<=8。
             c.显示的d1…dn有小数点时1<=n<=15(8位数值+7位小数点)。
             d.显示的内容可用CLR或CAN命令清除。

6.      ESC  s  n设置“单价”、“总计”、“收款”、“找零”字符显示状态命令
       ASCII码 格式:ESC  s  n            0<=n<=4
       十进制   格式:[027][115] n           48<=n<=52
       十六进制 格式:[1BH][73H] n          30H<=n<=34H
       说明:(1)当 n=0,四种灯 全暗。
             (2)当 n=1,“单价”灯 亮,其它三种 暗。
             (3)当 n=2,“总计”灯 亮,其它三种 暗。
             (4)当 n=3,“收款”灯 亮。其它三种 暗。
             (5)当 n=4,“找零”灯 亮。其它三种 暗。
           // com_send(Pchar(PDStr),Length(PDStr))
}


//显示合计
  myStr := Chr(27) + Chr(115) + '2';

  try
    self.CnRS2322.WriteCommData(pchar(mystr), Length(myStr));
    sleep(30);
  except
  end;

//显示金额
  mystr := floattostr(self.DBGridEh1.Columns[10].Footers[0].SumValue);
  if trim(mystr) = trim(self.Edit2.Text) then exit;
  self.Edit2.Text := trim(mystr);
//if self.DBGridEh1.Columns[10].Footers[0].SumValue=0 then mystr:='';
//mystr:='         '+trim(mystr);
//mystr:=rightstr(mystr,8);
  myStr := Chr(27) + Chr(81) + Chr(65) + mystr + Chr(13);
  try
    self.CnRS2322.WriteCommData(pchar(mystr), Length(myStr));
    sleep(30);
  except
  end;

end;


以前项目中的应用,可供参考一下。。。。
沉醉西亭 2013-05-31
  • 打赏
  • 举报
回复
把命令写成字符串,把字符串发给串口就行了 var ComStr:string; begin ComStr := Chr(27) + Chr(12);//清屏 //把ComStr给com口即可,具体发送方式有API也有com三方控件,自己可以搜一搜 end;
行风 2013-05-31
  • 打赏
  • 举报
回复
跟厂家要demo

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧