⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hardwareinitialize_f.pas

📁 汽车行驶记录仪的数据初始化组件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
                  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 + -