电子秤串口读数据的问题,大家帮忙看看。120分
fdadd 2005-03-30 07:39:56 通信协议: 波特率:600,1200,2400,4800可选。
字节格式:1位起始位
8位数据位
1位校验位(当校验方式为“NON”时,则无校验位)
1位停止位
串行口有两种工作方式。一种是连续方式,即仪表每测量一次便将结果通过串行口发送出去;另一种是命令方式,即仪表只有收到命令时才将当时的测量结果发送出去。
a、 命令格式(ASCⅡ码):
READ〈CR〉﹁〈LF〉﹂ 即52H 45H 41H 44H 0DH ﹁0AH﹂
b、仪表发送的数据格式:
仪表发送的一个完整数据由五个字节构成,其中一个标志字节(FFH),一个状态字节和三个数据字节(压缩BCD码,低位在前),
//**************代码***************************************//
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
s : string;
i : integer;
rbuf : array[0..100] of byte;
begin
//s:='';
ZeroMemory(pchar(@rbuf),100);
move(buffer^,pchar(@rbuf)^,bufferlength);
for i:=1 to bufferlength do
s:=s+inttohex(rbuf[i],2)+'';
//memo1.lines.add(Format('%d',[StrtoInt('$'+s)]));
memo1.lines.add(s);
{
SetLength(S, BufferLength); //接收RS232的数据并显示Memo1上。
Move(Buffer^, PChar(S)^, BufferLength);
Memo1.Lines.Add(S);
}
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Comm1.CommName :='com1';
Comm1.Baudrate :=strtoint(ComboBox1.Text);
Comm1.ByteSize:=_8;
Comm1.parity:=None;
Comm1.StopBits:=_1;
//Comm1.RtsControl
Comm1.StartComm;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
comm1.StopComm;
end;
//***************出现问题*******************************//
秤上的数为420,显示为8200372,不对,高手请给与指点。