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

📄 hardwareinitialize_f.pas

📁 汽车行驶记录仪的数据初始化组件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit HardWareInitialize_F;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, FileCtrl,
  Dialogs, ExtCtrls, StdCtrls, Buttons, ComCtrls, DB, ADODB, pasMyComm, StrUtils, ComObj;

type
  TCheckThread=class(TThread)
  protected
    procedure Execute;override;
  public
    bCheckThread:boolean;
  end;
  TReceiveStatus = (
    rComOpen,       //打开
    rComStop);       //关闭
  TfrmHardWardInit = class(TForm)
    Panel1: TPanel;
    Panel3: TPanel;
    btnClose: TButton;
    GroupBox1: TGroupBox;
    RadioGroup: TRadioGroup;
    GroupBox2: TGroupBox;
    labCar_LicensePlate: TLabel;
    edtCar_LicensePlate: TEdit;
    labCar_LicensePlateColor: TLabel;
    edtCar_LicensePlateColor: TEdit;
    btnOK: TBitBtn;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    edtDriverLicence3: TEdit;
    Label5: TLabel;
    Label4: TLabel;
    edtDriverLicence2: TEdit;
    edtDriverLicence1: TEdit;
    Label8: TLabel;
    edtDriverID1: TEdit;
    edtDriverID2: TEdit;
    edtDriverID3: TEdit;
    Label3: TLabel;
    Label2: TLabel;
    Label1: TLabel;
    GroupBox5: TGroupBox;
    Label6: TLabel;
    edtVIN: TEdit;
    Label7: TLabel;
    Label9: TLabel;
    edtTime: TEdit;
    edtParameter: TEdit;
    Label13: TLabel;
    Label15: TLabel;
    edtCarType: TEdit;
    edtLicensePlate: TEdit;
    btnSendData: TBitBtn;
    btnSelectColor: TButton;
    Label17: TLabel;
    edtDriverID4: TEdit;
    Label18: TLabel;
    edtDriverLicence4: TEdit;
    Label19: TLabel;
    edtDriverID5: TEdit;
    Label20: TLabel;
    edtDriverLicence5: TEdit;
    ADOConnection: TADOConnection;
    ADOQuery: TADOQuery;
    btnOpenCom: TBitBtn;
    OpenDialog: TOpenDialog;
    btnCloseComm: TButton;
    Label10: TLabel;
    edtDeviceID: TEdit;
    Label11: TLabel;
    Label12: TLabel;
    edtFirstDown: TEdit;
    edtMaxSpeed: TEdit;
    panCOM1Sign: TPanel;
    panCOM2Sign: TPanel;
    panCOM3Sign: TPanel;
    lbCarLicList: TListBox;
    panCOM4Sign: TPanel;
    panCOM5Sign: TPanel;
    panCOM6Sign: TPanel;
    ProgressBar: TProgressBar;
    btnUSBItem: TButton;
    procedure btnCloseClick(Sender: TObject);
    function getData:Boolean;
    procedure btnOKClick(Sender: TObject);
    procedure btnOpenComClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure RadioGroupClick(Sender: TObject);
    procedure btnSendDataClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure formatData;
    procedure SendToUSB;
    procedure SendData;
    procedure btnCloseCommClick(Sender: TObject);
    procedure btnSelectColorClick(Sender: TObject);
    function DataCheck:Boolean;
    procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
    procedure edtCar_LicensePlateDblClick(Sender: TObject);
    procedure lbCarLicListClick(Sender: TObject);
    procedure btnUSBItemClick(Sender: TObject);
    procedure edtCar_LicensePlateKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
    TestComm:TComm;  //使用TComm类
    CheckThread:TCheckThread;  //读数据线程
  public
    { Public declarations }
  end;

var
  frmHardWardInit: TfrmHardWardInit;
  strCom: String;
  rReceiveStatus:TReceiveStatus;
  TempString: String;
  arrSendData: Array[0..11] of String;
  arrSendByte: array[0..8] of Byte;
  arrByteData: Array[0..1023] of Byte;
  strGB_CarLic: String;
  strGB_CarType: String;
  strGB_CarColor: String;
  strUsbDrive:String;
  intSendNum :Integer;
  arrCommand: Array[0..11] of String;
  strSpeedCheck: String;
  strKmCheck: String;
  strMemClearCheck: String;
const
  WM_RECEIVE_SUCCESS = WM_USER + 2000;    //发送成功
  WM_RECEIVE_FAILURE = WM_USER + 2001;    //发送超时
  WM_RECEIVE_CheckErr = WM_USER + 2002;    //发送超时
implementation
uses
  HardWareInitialize_IMP, HardWareInitialize_F_USBItem;
{$R *.dfm}

procedure TCheckThread.Execute;
var
  TempByte:Byte;
  i: Integer;
begin
  i:=0;
  while bCheckThread do
  begin
    if rReceiveStatus=rComOpen then         //超时
    begin
      if frmHardWardInit.TestComm.WaitForBytes(1,5000)=FALSE then
      begin
        bCheckThread:=False;
        PostMessage(frmHardWardInit.Handle,WM_RECEIVE_FAILURE,0,0);
        Continue;
      end;
    end;
    {if not frmHardWardInit.TestComm.GetCheckResult then
    begin
      bCheckThread:=False;
      PostMessage(frmHardWardInit.Handle,WM_RECEIVE_CheckErr,0,0);
      Continue;
    end; }
  //如果输入队列中有数据,读入并在队列中显示出来
    if (frmHardWardInit.TestComm<>Nil) and (frmHardWardInit.TestComm.BytesInInQue>=1) then
    begin
      frmHardWardInit.TestComm.ReadData(@TempByte,1);
      TempString:=TempString+Format('%.2x', [TempByte]);
    end;
    if (TempString=arrCommand[i]) and (intSendNum<=11) then     //单片机返回正确帧,发送下一段数据
    begin
      sleep(1000);
      TempString:='';
      intSendNum:=intSendNum+1;
      rReceiveStatus:=rComStop;        //接收成功,停止接收
      frmHardWardInit.TestComm.ClearComm;
      i:=i+1;
      frmHardWardInit.ProgressBar.Position:=10+frmHardWardInit.ProgressBar.Position;
    end;
    //if (TempString=arrCommand[Length(arrCommand)-1]) and (intSendNum=11) then
   // if TempString=arrCommand[9] then
      if intSendNum=12 then
      begin
        //intSendNum:=
        bCheckThread:=False;
        PostMessage(frmHardWardInit.Handle,WM_RECEIVE_SUCCESS,0,0);
      end;
    if TempString='557AFB00D4' then   //单片机返回错误帧,重发当前帧
    begin
      TempString:='';
      //TempString:=arrCommand[i];
      //intSendNum:=intSendNum-1;
      //i:=i-1;
      rReceiveStatus:=rComStop;      //接收出错,停止接收
    end;
    if rReceiveStatus=rComStop then       //接收完成,发送
      frmHardWardInit.SendData;
  end;
end;

procedure TfrmHardWardInit.btnCloseClick(Sender: TObject);
begin
  Close;
end;

function TfrmHardWardInit.getData:Boolean;
var
  strSql: String;
  //i: Integer;
  //j: Integer;
  intHigh: Integer;
  intLow: Integer;
begin
  strGB_CarLic:='';
  strGB_CarType:='';
  strGB_CarColor:='';
  strSql:='SELECT Driver_ID,Driver_Licence,Car_VIN,Car_CharacterParameter,Car_DeviceID,Car_FirstDownload,Car_Type,Car_SpeedUpperLimit,Car_LicensePlate,Car_LicensePlateColor from View_Info_Car_Driver where Car_LicensePlate='''+edtCar_LicensePlate.Text+''' and Car_LicensePlateColor='''+edtCar_LicensePlateColor.Text+''' order by DriverDefault';
  Adoquery.Close;
  Adoquery.SQL.Clear;
  Adoquery.SQL.Add(strSql);
  Adoquery.Open;
  if Adoquery.RecordCount=0 then
  begin
    ShowMessage('没有找到符合条件的数据');
    Result:=False;
    Exit;
  end
  else
  begin
    edtVIN.Text:=Adoquery.FieldByName('Car_VIN').Value;
    edtTime.Text:=DateTimeToStr(Now);
    edtParameter.Text:=Adoquery.FieldByName('Car_CharacterParameter').Value;
    edtCarType.Text:=Adoquery.FieldByName('Car_Type').Value;
    edtLicensePlate.Text:=Adoquery.FieldByName('Car_LicensePlate').Value;
    edtDeviceID.Text:=Adoquery.FieldByName('Car_DeviceID').Value;
    edtFirstDown.Text:=Adoquery.FieldByName('Car_FirstDownload').Value;
    edtMaxSpeed.Text:=Adoquery.FieldByName('Car_SpeedUpperLimit').Value;
    if not Adoquery.Eof then
    begin
      edtDriverID1.Text:=Adoquery.FieldByName('Driver_ID').Value;
      edtDriverLicence1.Text:=Adoquery.FieldByName('Driver_Licence').Value;
      Adoquery.Next;
    end;
    if not Adoquery.Eof then
    begin
      edtDriverID2.Text:=Adoquery.FieldByName('Driver_ID').Value;
      edtDriverLicence2.Text:=Adoquery.FieldByName('Driver_Licence').Value;
      Adoquery.Next;
    end;
    if not Adoquery.Eof then
    begin
      edtDriverID3.Text:=Adoquery.FieldByName('Driver_ID').Value;
      edtDriverLicence3.Text:=Adoquery.FieldByName('Driver_Licence').Value;
      Adoquery.Next;
    end;
    if not Adoquery.Eof then
    begin
      edtDriverID4.Text:=Adoquery.FieldByName('Driver_ID').Value;
      edtDriverLicence4.Text:=Adoquery.FieldByName('Driver_Licence').Value;
      Adoquery.Next;
    end;
    if not Adoquery.Eof then
    begin
      edtDriverID5.Text:=Adoquery.FieldByName('Driver_ID').Value;
      edtDriverLicence5.Text:=Adoquery.FieldByName('Driver_Licence').Value;
      Adoquery.Next;
    end;
    {strSql:='SELECT GBCode FROM Code_GB WHERE GBCharacter='''+LeftStr(edtLicensePlate.Text,2)+'''';
    Adoquery.Close;
    Adoquery.SQL.Clear;
    Adoquery.SQL.Add(strSql);
    Adoquery.Open;
    if NOT Adoquery.Eof then
      strGB_CarLic:='苏'
      //strGB_CarLic:=Chr(StrToInt('$'+Copy(Adoquery.FieldByName('GBCode').Value,1,2)))+Chr(StrToInt('$'+Copy(Adoquery.FieldByName('GBCode').Value,3,2)))
    else
    begin
      ShowMessage('该省份字库中没有找到,无法下载');
      Result:=False;
      Exit;
    end; }
    strGB_CarLic:=LeftStr(edtLicensePlate.Text,2);
    {
    j:=1;
    for i:=1 to (Length(edtCarType.Text) div 2) do
    begin
      strSql:='SELECT GBCode FROM Code_GB WHERE GBCharacter='''+Copy(edtCarType.Text,j,2)+'''';
      Adoquery.Close;
      Adoquery.SQL.Clear;
      Adoquery.SQL.Add(strSql);
      Adoquery.Open;
      if NOT Adoquery.Eof then
        strGB_CarType:=strGB_CarType+Chr(StrToInt('$'+Copy(Adoquery.FieldByName('GBCode').Value,1,2)))+Chr(StrToInt('$'+Copy(Adoquery.FieldByName('GBCode').Value,3,2)))
      else
      begin
        ShowMessage('该车辆类型字库中没有找到,无法下载');
        Result:=False;
        Exit;
      end;
      j:=j+2;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -