帖下我的代码:
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失败');
16 : if SuccFlag>0 then begin Addlog(' 关设备2成功');end else Addlog(' 关设备2失败');
32 : if SuccFlag>0 then begin Addlog(' 开设备3成功');end else Addlog(' 开设备3失败');
0 : if SuccFlag>0 then begin Addlog(' 关设备3成功');end else Addlog(' 关设备3失败');
end;
end;
end else if (cmd=$13) or (cmd=$14) or (cmd=$15) then
begin
Zoneb:=RecvBuf[DataIdx+2]; // 防区
DevID0:=RecvBuf[DataIdx+3];
DevID1:=RecvBuf[DataIdx+4];
DevID2:=RecvBuf[DataIdx+5];
Addlog(IntToHex(Zoneb,2)+' 防区 '+IntToHex(DevID2,2)+' 设备告警');
RecvPos:=0;
end;
end;
========================
我用的是TMemo的add添加日志的,老是把一条数据分成2次add,我都快疯球了。哪位遇到类似的问题啊,急等~~
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失败');
16 : if SuccFlag>0 then begin Addlog(' 关设备2成功');end else Addlog(' 关设备2失败');
32 : if SuccFlag>0 then begin Addlog(' 开设备3成功');end else Addlog(' 开设备3失败');
0 : if SuccFlag>0 then begin Addlog(' 关设备3成功');end else Addlog(' 关设备3失败');
end;
end;
end else if (cmd=$13) or (cmd=$14) or (cmd=$15) then
begin
Zoneb:=RecvBuf[DataIdx+2]; // 防区
DevID0:=RecvBuf[DataIdx+3];
DevID1:=RecvBuf[DataIdx+4];
DevID2:=RecvBuf[DataIdx+5];
Addlog(IntToHex(Zoneb,2)+' 防区 '+IntToHex(DevID2,2)+' 设备告警');
RecvPos:=0;
end;
end;
========================
我用的是TMemo的add添加日志的,老是把一条数据分成2次add,我都快疯球了。哪位遇到类似的问题啊,急等~~
设大点