有一台收银机,顾客显示屏的控制命令是如图,如何在DELPHI中调用来控制显示金额信息?
如图:

解决方案 »

  1.   

    跟厂家要demo
      

  2.   

    把命令写成字符串,把字符串发给串口就行了
    var
      ComStr:string;
    begin
      ComStr := Chr(27) + Chr(12);//清屏
      //把ComStr给com口即可,具体发送方式有API也有com三方控件,自己可以搜一搜
    end;
      

  3.   


    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;以前项目中的应用,可供参考一下。
      

  4.   


    感谢!
    但是“self.CnRS2322”这个控件从那里找呢?
      

  5.   

    我用的是delphi 10
      

  6.   

    那个串口控件,CNPACK中有,用SPCOMM也可以。
      

  7.   

    http://www.cnpack.org/index.php?lang=zh-cn
    国产免费控件,推荐使用。
      

  8.   

    cport也可很好用啊。就是write---发送  例:Write(buf, size);
        read---读取   例:Read(buf, size);  然后注意一下读取超时,把它封装到一个线程里就可以了。读取结果可以用sendmessage()从线程中向主程序发送。
      

  9.   

      你的哪个说明书写的很详细啊,什么ASCII码,十进制格式,十六进制都给你提供了,很方便调试啊。