comport控件读取串口数据,如何经常把一整个数据分成2部分来读啊这就变成2个数据了啊
comport控件读取串口数据,怎么经常把一整个数据分成2部分来读啊,这就变成2个数据了啊~
帖下我的代码:
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
RecvS,Disps:shortstring;
RecvLen,DataIdx,xcidx:integer;
CardVer:dword;
p,i,CMD,SuccFlag,CID,Zoneb,DevID0,DevID1,DevID2:byte;
OldFn,OldFn1,NewFn,DirS:string;
UDPBuf:array[0..1023] of byte;
begin
//xcidx:=comport.Read(RecvBuf, ComPort.InputCount); //读取
//AddLog( ' 读取字节数: '+inttostr(xcidx));
{ xcidx:=ComPort.InputCount;
CardID:=xcidx+CardID;
if (CardID=16) or (CardID=13) then
begin
ComPort.Read(RecvBuf[RecvPos],count);
CardID:=0;
xcidx:=0;
end else Exit; }
ComPort.Read(RecvBuf[RecvPos],count);
DataIdx:=9;
CMD:=RecvBuf[DataIdx];
SuccFlag:=RecvBuf[DataIdx+1];
CID:=RecvBuf[DataIdx+2];
RecvS:= ' '; for i:=0 to 15 do RecvS:=RecvS+IntToHex(ord(RecvBuf[i]),2)+ ' ';
AddLog( ' 接收码: '+RecvS);
if (cmd =$16) or (cmd=$17) or (cmd=$12) then
begin
if CMD=$16 then
begin
case CID of
1 : if SuccFlag> 0 then begin Addlog( ' 外出布防成功 ');end else Addlog( ' 外出布防失败 ');
2 : if SuccFlag> 0 then begin Addlog( ' 在家布防成功 ');end else Addlog( ' 在家布防失败 ');
end;
end else if CMD=$17 then
begin
if SuccFlag> 0 then begin Addlog( ' 撤防成功 ');end else Addlog( ' 撤防失败 ');
end else if CMD=$12 then
begin
case CID of
24 : if SuccFlag> 0 then begin Addlog( ' 布防成功 ');end else Addlog( ' 布防失败 ');
56 : if SuccFlag> 0 then begin Addlog( ' 撤防成功 ');end else Addlog( ' 撤防失败 ');
40 : if SuccFlag> 0 then begin Addlog( ' 开设备1成功 ');end else Addlog( ' 开设备1失败 ');
8 : if SuccFlag> 0 then begin Addlog( ' 关设备1成功 ');end else Addlog( ' 关设备1失败 ');
48 : if SuccFlag> 0 then begin Addlog( ' 开设备2成功 ');end else Addlog( ' 开设备2失败 ');
帖下我的代码:
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
RecvS,Disps:shortstring;
RecvLen,DataIdx,xcidx:integer;
CardVer:dword;
p,i,CMD,SuccFlag,CID,Zoneb,DevID0,DevID1,DevID2:byte;
OldFn,OldFn1,NewFn,DirS:string;
UDPBuf:array[0..1023] of byte;
begin
//xcidx:=comport.Read(RecvBuf, ComPort.InputCount); //读取
//AddLog( ' 读取字节数: '+inttostr(xcidx));
{ xcidx:=ComPort.InputCount;
CardID:=xcidx+CardID;
if (CardID=16) or (CardID=13) then
begin
ComPort.Read(RecvBuf[RecvPos],count);
CardID:=0;
xcidx:=0;
end else Exit; }
ComPort.Read(RecvBuf[RecvPos],count);
DataIdx:=9;
CMD:=RecvBuf[DataIdx];
SuccFlag:=RecvBuf[DataIdx+1];
CID:=RecvBuf[DataIdx+2];
RecvS:= ' '; for i:=0 to 15 do RecvS:=RecvS+IntToHex(ord(RecvBuf[i]),2)+ ' ';
AddLog( ' 接收码: '+RecvS);
if (cmd =$16) or (cmd=$17) or (cmd=$12) then
begin
if CMD=$16 then
begin
case CID of
1 : if SuccFlag> 0 then begin Addlog( ' 外出布防成功 ');end else Addlog( ' 外出布防失败 ');
2 : if SuccFlag> 0 then begin Addlog( ' 在家布防成功 ');end else Addlog( ' 在家布防失败 ');
end;
end else if CMD=$17 then
begin
if SuccFlag> 0 then begin Addlog( ' 撤防成功 ');end else Addlog( ' 撤防失败 ');
end else if CMD=$12 then
begin
case CID of
24 : if SuccFlag> 0 then begin Addlog( ' 布防成功 ');end else Addlog( ' 布防失败 ');
56 : if SuccFlag> 0 then begin Addlog( ' 撤防成功 ');end else Addlog( ' 撤防失败 ');
40 : if SuccFlag> 0 then begin Addlog( ' 开设备1成功 ');end else Addlog( ' 开设备1失败 ');
8 : if SuccFlag> 0 then begin Addlog( ' 关设备1成功 ');end else Addlog( ' 关设备1失败 ');
48 : if SuccFlag> 0 then begin Addlog( ' 开设备2成功 ');end else Addlog( ' 开设备2失败 ');