📄 hardwareinitialize_f.pas
字号:
Chr(StrToInt('$'+Copy(FormatDateTime('yymmddhhmmss',Now),3,2)))+
Chr(StrToInt('$'+Copy(FormatDateTime('yymmddhhmmss',Now),5,2)))+
Chr(StrToInt('$'+Copy(FormatDateTime('yymmddhhmmss',Now),7,2)))+
Chr(StrToInt('$'+Copy(FormatDateTime('yymmddhhmmss',Now),9,2)))+
Chr(StrToInt('$'+Copy(FormatDateTime('yymmddhhmmss',Now),11,2))); //6byte BCD
//当前实时时钟
for i:=0 to Length(arrSendData[5]) do
byteXor:=byteXor Xor Byte(arrSendData[5][i]);
arrSendData[5]:=arrSendData[5]+Chr(byteXor);
byteXor:=$00;
arrSendData[6]:=Chr($AA)+Chr($75)+Chr($04)+Chr($03)+Chr($00)+Chr($00)+ //命令字04 数据块长度3byte
Chr(StrToInt('$'+Copy(Format('%.6x',[StrToInt(edtParameter.Text)]),1,2)))+
Chr(StrToInt('$'+Copy(Format('%.6x',[StrToInt(edtParameter.Text)]),3,2)))+
Chr(StrToInt('$'+Copy(Format('%.6x',[StrToInt(edtParameter.Text)]),5,2))); //3byte Hex
//车辆特征系数
for i:=0 to Length(arrSendData[6]) do
byteXor:=byteXor Xor Byte(arrSendData[6][i]);
arrSendData[6]:=arrSendData[6]+Chr(byteXor);
byteXor:=$00;
arrSendData[7]:=Chr($AA)+Chr($75)+Chr($06)+Chr(41)+Chr($00)+Chr($00)+ //命令字06 数据块长度43byte
edtVIN.Text+ //17byte ASCII
strGB_CarLic+ //2byte区位码
RightStr(edtLicensePlate.Text,Length(edtLicensePlate.Text)-2)+Chr($00)+Chr($00)+Chr($00)+ //2byte区位码+8byte ASCII
//strGB_CarColor+ //2byte 区位码
strGB_CarType+
RightStr(Chr($00)+Chr($00)+Chr($00)+Chr($00)+Chr($00)+Chr($00)+Chr($00)+Chr($00),8-Length(strGB_CarType))+
Chr($00)+Chr($00)+Chr($00)+Chr($00); //12byte 区位码
//车辆VIN、车牌号码、车牌颜色、车辆类别
for i:=0 to Length(arrSendData[7]) do
byteXor:=byteXor Xor Byte(arrSendData[7][i]);
arrSendData[7]:=arrSendData[7]+Chr(byteXor);
byteXor:=$00;
arrSendData[8]:=Chr($AA)+Chr($75)+Chr($12)+Chr($03)+Chr($00)+Chr($00)+ //命令字12 数据块长度3Hex
Chr(StrToInt('$'+Copy(Format('%.6x',[StrToInt(edtDeviceID.Text)]),1,2)))+
Chr(StrToInt('$'+Copy(Format('%.6x',[StrToInt(edtDeviceID.Text)]),3,2)))+
Chr(StrToInt('$'+Copy(Format('%.6x',[StrToInt(edtDeviceID.Text)]),5,2))); //3byte Hex
for i:=0 to Length(arrSendData[8]) do
byteXor:=byteXor Xor Byte(arrSendData[8][i]);
arrSendData[8]:=arrSendData[8]+Chr(byteXor);
byteXor:=$00;
arrSendData[9]:=Chr($AA)+Chr($75)+Chr($13)+Chr($06)+Chr($00)+Chr($00)+ //命令字13初次下载日期6byte BCD
Chr(StrToInt('$'+Copy(FormatDateTime('yymmddhhmmss',StrToDateTime(edtFirstDown.Text)),1,2)))+
Chr(StrToInt('$'+Copy(FormatDateTime('yymmddhhmmss',StrToDateTime(edtFirstDown.Text)),3,2)))+
Chr(StrToInt('$'+Copy(FormatDateTime('yymmddhhmmss',StrToDateTime(edtFirstDown.Text)),5,2)))+
Chr(StrToInt('$'+Copy(FormatDateTime('yymmddhhmmss',StrToDateTime(edtFirstDown.Text)),7,2)))+
Chr(StrToInt('$'+Copy(FormatDateTime('yymmddhhmmss',StrToDateTime(edtFirstDown.Text)),9,2)))+
Chr(StrToInt('$'+Copy(FormatDateTime('yymmddhhmmss',StrToDateTime(edtFirstDown.Text)),11,2))); //6byte BCD
for i:=0 to Length(arrSendData[9]) do
byteXor:=byteXor Xor Byte(arrSendData[9][i]);
arrSendData[9]:=arrSendData[9]+Chr(byteXor);
byteXor:=$00;
arrSendData[10]:=Chr($AA)+Chr($75)+Chr($14)+Chr($01)+Chr($00)+Chr($00)+ //命令字14最高行驶速度1byte Hex
Chr(StrToInt(edtMaxSpeed.Text));
for i:=0 to Length(arrSendData[10]) do
byteXor:=byteXor Xor Byte(arrSendData[10][i]);
arrSendData[10]:=arrSendData[10]+Chr(byteXor);
byteXor:=$00;
arrSendData[11]:=Chr($AA)+Chr($75)+Chr($20)+Chr($07)+Chr($00)+Chr($00)+ //命令字20
strSpeedCheck+strKmCheck+strMemClearCheck;
for i:=0 to Length(arrSendData[11]) do
byteXor:=byteXor Xor Byte(arrSendData[11][i]);
arrSendData[11]:=arrSendData[11]+Chr(byteXor);
end;
procedure TfrmHardWardInit.SendToUSB;
var
msTmp: TMemoryStream;
i: Integer;
strBlank: String;
begin
//实时时间
strBlank:=Chr($00);
if FileExists(strUsbDrive+'WTI.DAT') then
DeleteFile(strUsbDrive+'WTI.DAT');
msTmp:=TMemoryStream.Create;
msTmp.Write(PChar(Copy(arrSendData[5],7,Length(arrSendData[5])-7))^,Length(arrSendData[5])-7);
msTmp.Write(PChar(strSpeedCheck+strKmCheck+strMemClearCheck)^,Length(strSpeedCheck+strKmCheck+strMemClearCheck));
ProgressBar.Position:=10+ProgressBar.Position;
msTmp.SaveToFile(strUsbDrive+'WTI.DAT');
msTmp.free;
//其他数据
if FileExists(strUsbDrive+'WTE.DAT') then
DeleteFile(strUsbDrive+'WTE.DAT');
msTmp:=TMemoryStream.Create;
//初次下载日期
msTmp.Write(PChar(Copy(arrSendData[9],7,Length(arrSendData[9])-7))^,Length(arrSendData[9])-7);
ProgressBar.Position:=10+ProgressBar.Position;
//车辆特征系数
msTmp.Write(PChar(Copy(arrSendData[6],7,Length(arrSendData[6])-7))^,Length(arrSendData[6])-7);
ProgressBar.Position:=10+ProgressBar.Position;
//车辆VIN号,车牌号码,车牌分类
msTmp.Write(PChar(Copy(arrSendData[7],7,Length(arrSendData[7])-7))^,Length(arrSendData[7])-7);
ProgressBar.Position:=10+ProgressBar.Position;
msTmp.Write(PChar(strBlank)^,Length(strBlank));
//记录仪编号
msTmp.Write(PChar(Copy(arrSendData[8],7,Length(arrSendData[8])-7))^,Length(arrSendData[8])-7);
ProgressBar.Position:=10+ProgressBar.Position;
msTmp.Write(PChar(strBlank)^,Length(strBlank));
msTmp.Write(PChar(strBlank)^,Length(strBlank));
msTmp.Write(PChar(strBlank)^,Length(strBlank));
msTmp.Write(PChar(strBlank)^,Length(strBlank));
//最高行驶速度
msTmp.Write(PChar(Copy(arrSendData[10],7,Length(arrSendData[10])-7))^,Length(arrSendData[10])-7);
ProgressBar.Position:=10+ProgressBar.Position;
//驾驶员代码及对应驾驶证号码
for i:=0 to 4 do
begin
msTmp.Write(PChar(Copy(arrSendData[i],7,Length(arrSendData[i])-7))^,Length(arrSendData[i])-7);
ProgressBar.Position:=10+ProgressBar.Position;
end;
msTmp.SaveToFile(strUsbDrive+'WTE.DAT');
msTmp.free;
ShowMessage('数据发送成功');
end;
procedure TfrmHardWardInit.SendData;
begin
TestComm.WriteData(pchar(arrSendData[intSendNum]),length(arrSendData[intSendNum]));
rReceiveStatus:=rComOpen; //发送数据后等待接收应答
end;
procedure TfrmHardWardInit.btnCloseCommClick(Sender: TObject);
begin
RadioGroup.Enabled:=True;
btnOK.Enabled:=False;
btnSendData.Enabled:=False;
btnOpenCom.Enabled:=True;
btnCloseComm.Enabled:=False;
if strCom='usb' then
begin
//panUSBSign.Color:=clRed;
Exit;
end;
if strCom='Com1' then
panCOM1Sign.Color:=clRed;
if strCom='Com2' then
panCOM2Sign.Color:=clRed;
if strCom='Com3' then
panCOM3Sign.Color:=clRed;
if strCom='Com4' then
panCOM4Sign.Color:=clRed;
if strCom='Com5' then
panCOM5Sign.Color:=clRed;
if strCom='Com6' then
panCOM6Sign.Color:=clRed;
TestComm.FreeComm;
TestComm:=nil;
end;
procedure TfrmHardWardInit.btnSelectColorClick(Sender: TObject);
var
TempCOM: Variant;
begin
TempCOM := CreateComObject(StringToGUID('{8EFBB15C-44B7-49BF-8529-F35147FAD8A4}')) as IDispatch;
edtCar_LicensePlateColor.Text := TempCOM.MMInvoke('','','',DataString);
end;
function TfrmHardWardInit.DataCheck:Boolean;
begin
if (edtDriverID1.Text<>'') and (edtDriverLicence1.Text<>'') and (edtVIN.Text<>'') and (edtCarType.Text<>'') and (edtTime.Text<>'') and (edtLicensePlate.Text<>'') and (edtParameter.Text<>'') then
Result:=True
else
Result:=False;
end;
procedure TfrmHardWardInit.AppMessage(var Msg: TMsg ;var Handled: Boolean);
begin
if Msg.message = WM_RECEIVE_SUCCESS then
begin
ShowMessage('发送成功');
if CheckThread<>nil then
begin
CheckThread.bCheckThread:=False;
if (WaitForSingleObject(CheckThread.Handle,1000)=WAIT_TIMEOUT) then
CheckThread.Terminate;
CheckThread.Free;
CheckThread:=nil;
end;
ProgressBar.Position:=0;
btnSendData.Enabled:=True;
Handled := True;
end;
if Msg.message = WM_RECEIVE_FAILURE then
begin
ShowMessage('超时请重发');
if CheckThread<>nil then
begin
CheckThread.bCheckThread:=False;
if (WaitForSingleObject(CheckThread.Handle,1000)=WAIT_TIMEOUT) then
CheckThread.Terminate;
CheckThread.Free;
CheckThread:=nil;
end;
ProgressBar.Position:=0;
btnSendData.Enabled:=True;
Handled := True;
end;
{if Msg.message = WM_RECEIVE_CheckErr then
begin
ShowMessage('校验错误');
if CheckThread<>nil then
begin
CheckThread.bCheckThread:=False;
if (WaitForSingleObject(CheckThread.Handle,1000)=WAIT_TIMEOUT) then
CheckThread.Terminate;
CheckThread.Free;
CheckThread:=nil;
end;
ProgressBar.Position:=0;
btnSendData.Enabled:=True;
Handled := True;
end; }
end;
procedure TfrmHardWardInit.edtCar_LicensePlateDblClick(Sender: TObject);
begin
lbCarLicList.Visible:=True;
end;
procedure TfrmHardWardInit.lbCarLicListClick(Sender: TObject);
var
lbindex: Integer;
begin
for lbindex:=0 to lbCarLicList.Items.Count-1 do
begin
if lbCarLicList.Selected[lbindex] then
Break;
end;
edtCar_LicensePlate.Text:=lbCarLicList.Items.Strings[lbindex];
lbCarLicList.Visible:=False;
end;
procedure TfrmHardWardInit.btnUSBItemClick(Sender: TObject);
begin
frmUSBItem.ShowModal;
end;
procedure TfrmHardWardInit.edtCar_LicensePlateKeyPress(Sender: TObject;
var Key: Char);
begin
if key=#97 then //a
key:=#65; //A
if key=#98 then //b
key:=#66; //B
if key=#99 then //c
key:=#67; //C
if key=#100 then //d
key:=#68; //D
if key=#101 then //e
key:=#69; //E
if key=#102 then //f
key:=#70; //F
if key=#103 then //g
key:=#71; //G
if key=#104 then //h
key:=#72; //H
if key=#105 then //i
key:=#73; //I
if key=#106 then //j
key:=#74; //J
if key=#107 then //k
key:=#75; //K
if key=#108 then //l
key:=#76; //L
if key=#109 then //m
key:=#77; //M
if key=#110 then //n
key:=#78; //N
if key=#111 then //o
key:=#79; //O
if key=#112 then //p
key:=#80; //P
if key=#113 then //q
key:=#81; //Q
if key=#114 then //r
key:=#82; //R
if key=#115 then //s
key:=#83; //S
if key=#116 then //t
key:=#84; //T
if key=#117 then //u
key:=#85; //U
if key=#118 then //v
key:=#86; //V
if key=#119 then //w
key:=#87; //W
if key=#120 then //x
key:=#88; //X
if key=#121 then //y
key:=#89; //Y
if key=#122 then //z
key:=#90; //Z
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -