为实现汽车衡与计算机通信,该汽车衡通信要求为:其始字符:STX(0X02) 地址:31-3F  功能码:A~Z 数据:字符串  结束:CR(0D)
地址为两位数的地址值,A~Z,实现不同功能的代码,我需要从汽车衡返回重量数据,只需要发送地址 值 02 加 功能代码 B 即可,完整的发送命令格式为: 02(起始字符)02(地址值)B(功能代码)0D(结束值) ,汽车衡就会返回数据,其连续输出数据格式为18个字节 :
STX  ABC  XXXXXX  XXXXX  CR   
  1    2        3         4      5   
其中第3项为重量值,6位不带符号和小数点的数字。程序如下:

解决方案 »

  1.   


    procedure TForm1.FormShow(Sender: TObject);
    begin
    comm1.StartComm;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    //comm1.StopComm;
    end;
      

  2.   

    请不要发表可能给我们带来伤害的言论,谢谢配合 ,伤害TMD什么了??急着找解决方法呢,就这样被CSDN折磨着
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    comm1.StartComm;
    sleep(10);
    sbuf[1]:=byte($02); 
    sbuf[2]:=byte($02); 
    sbuf[3]:=byte($55); 
    sbuf[4]:=byte($42); 
    sbuf[5]:=byte($0D);senddata;end;这是发送数据的代码
      

  4.   

    什么呀,你要找长度的话直接去那什么那个事件里边取不就行了,不是有个bufferlenth参数么
      

  5.   

    建议不要用spcomm,用cport,你收的时候用一个缓冲然后自己去找头和尾,自己分割,否则可能丢数或者错误
      

  6.   

    procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
    i:integer;
    begin
       viewstring:='';
        move(buffer^,pchar(@rbuf)^,bufferlength);
       for i:=1 to bufferlength do
       viewstring:=viewstring+inttostr(rbuf[i]);
        viewstring:='接受'+viewstring+' : ';
       memo1.lines.add(viewstring);
       memo1.lines.add('');
     comm1.StopComm;
    end;
      

  7.   

    这是接收数据的代码,就是这样在MEMO控件里返回的数据不固定长度
      

  8.   

    spcomm的接受事件中有长度参数的阿,按长度取就好了
      

  9.   

    各位高手们,我再试一下按长度取,只是问题在于返回的数据的总长度不是固定的,或长或短,按照预定的长度取,最后剩余的部分是否就该丢弃了?而且,输出的数据是不停的,即使是无称重物,依然是不停的输出数据,可能是重复的数据,我该怎么取得每次称重时准确的数据呢?
    另外哪位大虾给我一个CPORT的例子可以吗?非常感谢!!1