亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pasmycomm.pas

?? 汽車行駛記錄儀的數(shù)據(jù)初始化組件
?? PAS
字號:
unit pasMyComm;
interface
uses
    Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs;
type
    //分配單獨(dú)的線程
    TReadThread=class(TThread)
    protected
      //重載Excute函數(shù)
      procedure Execute;override;
    public
      hCommFile:THandle;  //作為一個文件打開的串口
      bReadThread:boolean;  //讀寫線程的標(biāo)志
    end;
    //繼承TComponent的子類TComm
    TComm=class(TComponent)
    private
      hCommFile:THandle;  //作為一個文件打開的串口
      ReadThread:TReadThread;  //讀線程
      procedure CloseReadThread;
    public
      bOpened:boolean;  //串口是否打開
      CommName:string;  //串口名稱
      INQUESIZE,QUTQUESIZE:integer;  //讀寫緩沖隊(duì)列長度
      //重載構(gòu)造函數(shù)
      constructor Create(AOwner:TComponent);override;
      //重載析構(gòu)函數(shù)
      destructor Destroy;override;
      //初始化串口
      function InitComm(ThisCommName:string;BaudRate,DataByte,StopByte,ParityByte:integer):boolean;
      //釋放串口
      procedure FreeComm;
      //串口操作
      function WriteData(pDataToWrite:PChar;dwSizeofDataToWrite:DWord):boolean;   //寫數(shù)據(jù)
      function WriteDelayData(pDataToWrite:PChar;dwSizeofDataToWrite:DWord):boolean;   //延遲寫數(shù)據(jù)
      function ReadData(pBuffer:pChar;BufferSize:DWord):boolean;  //讀數(shù)據(jù)
      function BytesInInQue:DWord;  //輸入隊(duì)列中數(shù)據(jù)長度
      function BytesInOutQue:DWord;  //輸出隊(duì)列中數(shù)據(jù)長度
      function WaitForBytes(Bytes:DWord;TimeLen:DWord):boolean;  //等待讀入數(shù)據(jù)
      procedure ClearComm;           //清除串口數(shù)據(jù)
      procedure SendStr(str:String);  //發(fā)送字符串?dāng)?shù)據(jù)
      function OutputByte(const ByteData:array of Byte):Boolean;
      function GetCheckResult: boolean;
    end;
const
     PWM_COMMWRITE=WM_USER+1;
implementation
//構(gòu)造函數(shù),初始化變量
constructor TComm.Create(AOWner:TComponent);
begin
  inherited Create(AOwner);
  ReadThread:=nil;
  hCommFile:=0;
  bOpened:=False;
  //缺省隊(duì)列長度
  INQUESIZE:=129600;
  QUTQUESIZE:=129600;
end;
//析構(gòu)函數(shù),釋放串口
destructor TComm.Destroy;
begin
  FreeComm;
  inherited Destroy;  //執(zhí)行父類的析構(gòu)函數(shù)
end;
//初始化串口
function TComm.InitComm(ThisCommName:string;BaudRate,DataByte,StopByte,ParityByte:integer):boolean;
var
  dcb:Tdcb;  //Data Control Block 控制信息
begin
  //判斷有沒有打開該串口
  if hCommFile<>0 then
  begin
    InitComm:=False;
    exit;
  end;
  //用CreateFile打開串口
  hCommFile:=CreateFile(pChar(ThisCommName),GENERIC_READ or GENERIC_WRITE,0,{not shared}nil,{no security ??}OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  //如果打開失敗
  if hCommFile=INVALID_HANDLE_VALUE then
  begin
    hCommFile:=0;
    InitComm:=False;
    exit;
  end;
  //如果打開的文件類型不是FILE_TYPE_CHAR也算失敗,則關(guān)閉文件
  if GetFileType(hCommFile)<>FILE_TYPE_CHAR then
  begin
    CloseHandle(hCommFile);
    hCommFile:=0;
    InitComm:=False;
    exit;
  end;
  //如果設(shè)置失敗,則關(guān)閉文件
  if not SetupComm(hCommFile,INQUESIZE,QUTQUESIZE) then
  begin
    CloseHandle(hCommFile);
    hCommFile:=0;
    InitComm:=False;
    exit;
  end;
  //讀入串口信息
  PurgeComm(hCommFile,PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR);
  GetCommState(hCommFile,dcb);
  //設(shè)置串口參數(shù)
  dcb.BaudRate:=BaudRate;  //波特率
  dcb.ByteSize:=DataByte;  //數(shù)據(jù)位數(shù),如每byte4-8個bit
  dcb.Parity:=ParityByte;  //是否有校驗(yàn)位0-4=no,odd,even,mark,space
  dcb.StopBits:=StopByte;  //停止位,0,1,2=1,1.5,2
  dcb.Flags:=1;
  //如果設(shè)置串口參數(shù)失敗,則關(guān)閉文件
  if not SetCommState(hCommFile,dcb) then
  begin
    CloseHandle(hCommFile);
    hCommFile:=0;
    InitComm:=False;
    exit;
  end;
  //設(shè)置打開文件成功標(biāo)志
  InitComm:=True;
  bOpened:=True;
  CommName:=ThisCommName;
end;
//釋放串口
procedure Tcomm.FreeComm;
begin
  if hCommFile=0 then exit;  //如果沒有打開的串口,則直接退出
  //關(guān)閉讀數(shù)據(jù)線程
  CloseReadThread;
  //關(guān)閉文件
  PurgeComm(hCommFile,PURGE_RXABORT+PURGE_RXCLEAR+PURGE_TXABORT+PURGE_TXCLEAR);
  CloseHandle(hCommFile);
  bOpened:=False;
end;
//調(diào)用WriteFile向串口寫數(shù)據(jù)
function TComm.WriteData(pDataToWrite:PChar;dwSizeofDataToWrite:DWord):boolean;
var
  nSent:DWord;
begin
  Result:=WriteFile(hCommFile,pDataToWrite^,dwSizeofDataToWrite,nSent,Nil);
end;
//調(diào)用WriteFile和sleep向串口延遲寫數(shù)據(jù)
function TComm.WriteDelayData(pDataToWrite:PChar;dwSizeofDataToWrite:DWord):boolean;
var
  nSent:DWord;
  i:integer;
begin
  Result:=False;
  for i:=1 to dwSizeofDataToWrite do
  begin
    Result:=WriteFile(hCommFile,(i-1+pDataToWrite)^,dwSizeofDataToWrite,nSent,Nil);
    Sleep(50);  //延遲一段時間再寫下一段數(shù)據(jù)
  end;
end;
//發(fā)送字符串
procedure TComm.SendStr(str:String);
begin
  str:=str+Chr(13)+Chr(10);  //添加回車,換行
  WriteData(pChar(str),Length(str));
end;
//調(diào)用ReadFile讀入數(shù)據(jù)
function Tcomm.ReadData(pBuffer:pChar;BufferSize:DWord):boolean;
var
  nRead:DWord;
begin
  Result:=ReadFile(hCommFile,pBuffer^,BufferSize,nRead,Nil);
end;
//通過CloseEvent事件關(guān)閉讀線程
procedure TComm.CloseReadThread;
begin
  //如果讀線程存在則關(guān)閉
  if ReadThread<>nil then
  begin
    ReadThread.bReadThread:=False;
    //清除讀的數(shù)據(jù)
    PurgeComm(hCommFile,PURGE_RXABORT+PURGE_RXCLEAR);
    //等待一段時間,結(jié)束線程
    if(WaitForSingleObject(ReadThread.Handle,10000)=WAIT_TIMEOUT) then
      ReadThread.Terminate;
    ReadThread.Free;
    ReadThread:=nil;
  end;
end;
//返回輸入隊(duì)列中數(shù)據(jù)的長度
function TComm.BytesInInQue:DWord;
var
  stat:TCOMSTAT;
  errs:DWord;
begin
  ClearCommError(hCommFile,errs,@stat);
  Result:=stat.cbInQue;
end;
//返回輸出隊(duì)列中數(shù)據(jù)的長度
function TComm.BytesInOutQue:DWord;
var
  stat:TCOMSTAT;
  errs:DWord;
begin
  ClearCommError(hCommFile,errs,@stat);
  Result:=stat.cbOutQue;
end;
//等待數(shù)據(jù)
function TComm.WaitForBytes(Bytes:DWord;TimeLen:DWord):boolean;
var
  time1,time2:DWord;
begin
  //得到當(dāng)前時間
  time1:=GetTickCount;
  time2:=time1;
  //循環(huán)等待,直到TimeLen秒或讀入Bytes個數(shù)據(jù)
  while (BytesInInQue<Bytes) and (hCommFile<>0) and ((time2-time1)<TimeLen) do
  begin
    Application.ProcessMessages;
    time2:=GetTickCount;
  end;
  //返回是否成功讀入Bytes個數(shù)據(jù)
  if BytesInInQue>=Bytes then
    Result:=True
  else
    Result:=False;
end;
//清除串口
procedure TComm.ClearComm;
begin
  PurgeComm(hCommFile,PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR);
end;
//傳送二進(jìn)制的數(shù)據(jù)
function TComm.OutputByte(const ByteData: array of Byte ): Boolean;
var
  lrc: LongWord;
    i: Integer;
begin
   for i:=Low(ByteData) to High(ByteData) do
     WriteFile(hCommFile,ByteData[i],1,lrc, nil);
   Result := True;
end;
//讀數(shù)據(jù)線程
procedure TReadThread.Execute;
begin
  while bReadThread do
  begin
  end;
end;
//設(shè)置校驗(yàn)項(xiàng)目

function TComm.GetCheckResult:boolean;
var
  dwEventMask: DWORD;
  stat:TCOMSTAT;
  errs:DWord;
begin
  Result:=TRUE;
  dwEventMask:=0;
  SetCommMask(hCommFile,EV_ERR);
  ClearCommError(hCommFile,errs,@stat);
  WaitCommEvent(hCommFile,dwEventMask,nil);
  if ((dwEventMask and EV_ERR)=EV_ERR) then
    Result:=FALSE;
end;

end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区不卡| 一区二区三区日韩| 在线不卡的av| 欧美视频自拍偷拍| 欧美色综合天天久久综合精品| 成人涩涩免费视频| 不卡高清视频专区| kk眼镜猥琐国模调教系列一区二区| 国产精品1区2区| 国产91对白在线观看九色| 国产suv一区二区三区88区| 国产成人免费9x9x人网站视频| 国产传媒一区在线| 成人avav影音| 欧美三区免费完整视频在线观看| 日本韩国一区二区三区| 欧美日韩国产精品成人| 欧美成人午夜电影| 国产女主播在线一区二区| 亚洲少妇最新在线视频| 亚洲福利一区二区| 麻豆一区二区在线| 欧美日韩一区中文字幕| 精品视频一区三区九区| 欧美一卡二卡三卡| 久久看人人爽人人| 日韩理论电影院| 亚洲福利一区二区| 国产一区二区主播在线| 91在线视频官网| 91精品国产手机| 国产精品人成在线观看免费| 亚洲一区二区精品视频| 久久av资源站| 日本福利一区二区| 欧美精品乱人伦久久久久久| 欧美成人福利视频| 亚洲美女视频在线观看| 精品一区二区三区免费毛片爱| 国产高清不卡一区| 欧美日韩综合在线免费观看| 久久婷婷成人综合色| 精品精品国产高清一毛片一天堂| 久久免费精品国产久精品久久久久| 亚洲欧美自拍偷拍| 美女在线视频一区| 色综合中文字幕国产| 精品少妇一区二区| 亚洲精品乱码久久久久久久久| 日韩中文字幕91| 色老头久久综合| 国产日韩亚洲欧美综合| 天堂久久一区二区三区| 99久久久久久| 国产日韩视频一区二区三区| 日韩不卡一区二区| 在线视频中文字幕一区二区| 久久精品亚洲国产奇米99| 日韩电影免费在线观看网站| 在线观看91精品国产入口| 国产精品一级片在线观看| 色国产综合视频| 日本一区二区三区在线观看| 日本sm残虐另类| 色88888久久久久久影院野外| 久久亚洲影视婷婷| 久久超级碰视频| 日韩西西人体444www| 亚洲成人1区2区| 色婷婷综合激情| 亚洲欧美日韩国产一区二区三区 | 欧美mv和日韩mv国产网站| 夜夜精品视频一区二区 | 欧美一区二区三区性视频| 久久天堂av综合合色蜜桃网| 亚洲不卡av一区二区三区| 色综合夜色一区| 亚洲天堂av一区| 91麻豆免费观看| 亚洲欧美一区二区久久| 91理论电影在线观看| 亚洲欧美偷拍另类a∨色屁股| 成人精品国产免费网站| 中文av字幕一区| 99九九99九九九视频精品| 国产精品久线观看视频| 色先锋资源久久综合| 亚洲电影第三页| 91精品国产欧美一区二区18| 日本不卡视频在线观看| 精品国产一二三区| 国产风韵犹存在线视精品| 国产精品三级电影| 91免费国产在线观看| 亚洲成人自拍一区| 欧美电视剧免费全集观看| 亚洲人被黑人高潮完整版| 26uuu久久天堂性欧美| 国内精品嫩模私拍在线| 2023国产精品自拍| av电影天堂一区二区在线观看| 亚洲日穴在线视频| 337p亚洲精品色噜噜狠狠| 国产一区二区三区免费看| 国产精品天天看| 欧美综合亚洲图片综合区| 日本中文字幕一区二区有限公司| 精品国产一区二区三区不卡| av中文字幕亚洲| 日韩精品一级中文字幕精品视频免费观看| 欧美一区二区在线观看| 成人小视频免费在线观看| 亚洲国产日韩av| 久久色.com| 欧美日韩精品一区视频| 国产精华液一区二区三区| 国产在线看一区| 日韩欧美国产一区二区在线播放| 国产激情视频一区二区三区欧美| 亚洲欧美日韩成人高清在线一区| 3d成人h动漫网站入口| 国产99久久精品| 日韩av在线播放中文字幕| 国产精品成人免费在线| 日韩一级高清毛片| 欧洲精品在线观看| 国产一区二区主播在线| 午夜天堂影视香蕉久久| 中文字幕一区在线| 久久日一线二线三线suv| 欧美浪妇xxxx高跟鞋交| 91丨国产丨九色丨pron| 国产一区二区三区四| 日本成人在线电影网| 亚洲卡通欧美制服中文| 国产色产综合色产在线视频| 日韩一级欧美一级| 欧美日韩一区二区三区高清| www.久久久久久久久| 国产综合久久久久久久久久久久 | 91丨九色丨尤物| 国产成人福利片| 国产乱人伦偷精品视频不卡 | 中文字幕国产一区二区| 精品剧情v国产在线观看在线| 欧美日韩成人综合| 欧美丝袜丝交足nylons| 色久优优欧美色久优优| 91视频免费观看| 一本久道中文字幕精品亚洲嫩| 国产成人综合在线观看| 激情小说亚洲一区| 国产一区激情在线| 国产美女视频一区| 国产精品中文欧美| 国产乱理伦片在线观看夜一区| 极品尤物av久久免费看| 国产一区二区电影| 国产激情视频一区二区在线观看| 国产曰批免费观看久久久| 国产在线精品一区二区夜色| 国产一区二区日韩精品| 国产精品一区二区果冻传媒| 国内成人自拍视频| 国产老妇另类xxxxx| 国产传媒日韩欧美成人| 丁香亚洲综合激情啪啪综合| 波多野结衣中文字幕一区二区三区| 成人免费视频国产在线观看| 成人黄色av电影| 色999日韩国产欧美一区二区| 欧美亚洲一区二区在线| 欧美一区二区成人| 国产亚洲欧美色| 亚洲精品少妇30p| 蜜桃av一区二区三区电影| 激情五月播播久久久精品| 成a人片亚洲日本久久| 日本电影亚洲天堂一区| 日韩精品一区二区三区在线| 国产日韩欧美制服另类| 亚洲综合av网| 国内精品视频一区二区三区八戒| www.在线欧美| 69堂亚洲精品首页| 中文字幕av一区二区三区免费看| 亚洲乱码一区二区三区在线观看| 日韩av二区在线播放| 从欧美一区二区三区| 91精品一区二区三区久久久久久 | va亚洲va日韩不卡在线观看| 欧美视频一区二区三区| 久久久国产精华| 亚洲成a天堂v人片| 国产成人精品免费| 欧美日韩精品系列| 国产精品家庭影院| 久久国产精品无码网站| 色国产综合视频| 欧美国产一区视频在线观看|