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

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

?? pci7233.pas

?? PCI7233接口板采集模塊,可直接實(shí)現(xiàn)數(shù)字IO的采集,支持中斷方式
?? PAS
字號(hào):
unit PCI7233;

interface

uses
  SysUtils,Windows,Forms,messages,Classes,Graphics,ExtCtrls,Dask7230;

const INTAccessMsg = WM_USER+400;

type
  TMode=(TINT,TLOOK);
  TOnIntEvent= procedure(Sender:TObject; aState:DWord; Port:SmallInt) of  Object ;
  TOnLogEvent= procedure(Sender:TObject; msg:string) of  Object ;
  TPCI7233 = class(TPanel)
  private
      CallbackFunc:  TCallbackFunc;
      FMode:TMode;
      FID:smallint;
      FSaveState: DWord;
      FWaitState: DWord;
      RePeatCount:Integer;
      FTimer:TTimer;
      
    FOnColor: TColor;
    FOFFColor: TColor;
    FOnIntEvent: TOnIntEvent;
    FOnOffChgColor: TColor;
    FOnOffChgBit:Byte;
    FIntBusying: Boolean;
    FWaitTime: Integer;
    FOnLogEvent: TOnLogEvent;
    procedure SetSaveState(const Value: DWord);

    procedure SetOffColor(const Value: TColor);
    procedure SetOnColor(const Value: TColor);
    procedure SetOnOffChgColor(const Value: TColor);
    procedure SetWaitTime(const Value: Integer);

    { Private declarations }
  protected
   procedure Paint; override;
   procedure DoLogEvent(msg:string);
   procedure  OnCall(var message:Tmessage); message INTAccessMsg;
   procedure  OnExpTime(sender:TObject);
    { Protected declarations }
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure  Open;
    procedure  Close;
    procedure  SetMode(Mode:TMode);


    Function ReadPort:Dword;
    Function ReadPortEX(SetpTime,SetpCount: Integer ):Dword;

    Function GetChangeBit(TestState:DWord):Byte;
    Function SaveStateBit1(B1_32:byte):Boolean;
    Function SaveStateBit0(B1_32:byte):Boolean;

    Property IntBusying:Boolean read FIntBusying  write FIntBusying;

    { Test }
    Function  NewState(chgBit:Byte):Dword;
    procedure  Test;
    procedure  Test2;
  published
    Property SaveState: DWord read  FSaveState  write  SetSaveState;
    Property OnColor: TColor read  FOnColor  write  SetOnColor;
    Property OffColor: TColor read  FOffColor  write  SetOFFColor;
    Property OnOffChgColor: TColor read  FOnOffChgColor  write  SetOnOffChgColor;
    Property WaitTime: Integer read  FWaitTime  write  SetWaitTime;
    Property OnIntEvent:TOnIntEvent read FOnIntEvent  write FOnIntEvent;
    Property OnLogEvent:TOnLogEvent read FOnLogEvent  write FOnLogEvent;
    { Published declarations }
  end;

procedure Register;

implementation

//uses Unit1;

procedure Register;
begin
  RegisterComponents('Standard', [TPCI7233]);
end;


procedure delay(ms:DWORD);
var t:DWORD;
begin
t:=gettickcount;
while gettickcount <t+ms do
application.ProcessMessages;

end;

    // bit =(1..32)
Function _Bit1(X:DWord;bit:byte):boolean;
begin
    bit    := bit -1;
    result:=(X and ($01 shl bit)) <>0;
end;

Function _Bit0(X:DWord;bit:byte):boolean;
begin
    bit    := bit -1;
    result:=(X and ($01 shl bit)) =0;
end;


constructor TPCI7233.Create(AOwner: TComponent);
begin
  inherited;
  FOnColor:=clred;
  FOFFColor:=clWhite;
  FIntBusying:=False;
  FWaitTime   :=60000;
  FTimer:=TTimer.Create(self);
  FTimer.Enabled:=False;
  FTimer.Interval:=FWaitTime;
  FTimer.OnTimer:=OnExpTime;
  RePeatCount:=0;
end;

destructor TPCI7233.Destroy;
begin
  FTimer.Free;
  inherited;
end;


{ TPCI7233 }


procedure TPCI7233.Paint;
 var i,B,L,DX:Integer;  Ri:Trect;  S:string;
     W:double;
begin
  inherited;
  B:=(borderWidth+bevelWidth);
  W:= (ClientWidth - 2* B) / 32 ;
  for i:=1 to 32 do begin
      L:= B+ Trunc((i-1)* W);
      Ri:=Rect(L,ClientRect.Top+B, Trunc( L+W ), ClientRect.Bottom-B );

      InflateRECT(Ri,-1,-1   );
      if _Bit1(FSaveState,i) then  canvas.Brush.Color:=FOnColor
                       else  canvas.Brush.Color:=FOffColor ;
      if FOnOffChgBit = i  then begin
                                canvas.font.Color:=OnOffChgColor ;
                                canvas.font.Style:=[fsBold] ;
                            end else   canvas.font:=font ;
                               
      S:= inttostr(i) ;
      Dx:= Trunc( (W- Canvas.TextWidth(S)) / 2 );
      Canvas.TextRect(Ri,Ri.Left+Dx,Ri.Top-1,S );
     // L:=L+W;
  end;

end;

procedure TPCI7233.Close;
begin
 if FID>0 then Release_Card( FID);
end;


procedure TPCI7233.Open;
begin
 FID:=-1;
 FID:=Register_Card(PCI_7233,0);
 setMode(TLOOK);
end;

procedure TPCI7233.SetMode(Mode: TMode);
begin
   if FID<0 then exit;
   
   if FMode =  Mode  then exit;
   FMode :=  Mode ;
   case FMode of
    TINT:  begin
             DIO_INT2_EventMessage(FID,INT2_EXT_SIGNAL, Handle,INTAccessMsg,CallbackFunc) ;
             DIO_INT1_EventMessage(FID,INT1_EXT_SIGNAL, Handle,INTAccessMsg,CallbackFunc) ;
           end;
    TLooK: begin
             DIO_INT2_EventMessage(FID,INT2_DISABLE, Handle,INTAccessMsg,CallbackFunc) ;
             DIO_INT1_EventMessage(FID,INT1_DISABLE, Handle,INTAccessMsg,CallbackFunc) ;
           end;
   end;

end;





procedure TPCI7233.SetSaveState(const Value: DWord);
begin
  FOnOffChgBit:=GetChangeBit(Value) ;
  FSaveState := Value;
  DoLogEvent( format('更新?tīng)顟B(tài)為%x',[FSaveState]));
  Repaint;
end;

procedure TPCI7233.SetOFFColor(const Value: TColor);
begin
  FOffColor := Value;    Repaint;
end;

procedure TPCI7233.SetOnColor(const Value: TColor);
begin
  FOnColor := Value;   Repaint;
end;



Function TPCI7233.NewState(chgBit:Byte):Dword;
 var M:dword;
begin
  result:= FSaveState;
  if chgBit<=0 then exit;
  if chgBit>32 then exit;
  M:= $01 shl (chgBit-1) ;
  if _Bit0(FSaveState,chgBit) then result:= FSaveState  or m
                      Else result := FSaveState Xor m;

end;

function TPCI7233.GetChangeBit(TestState: DWord): Byte;
  var i:Integer;
begin
   result:=0;
   for i:=1 to 32 do begin
      if _Bit1(FSaveState,i)<>_Bit1(TestState,i) then begin
          result:= i; exit;
      end;
   end;

end;

function TPCI7233.ReadPort: Dword;
begin
// result:=NewState(tag);
 //exit;

 result:=0;
 if FID>=0 then  DI_ReadPort(FID,0,result);
 result  :=     result   xor $FFFFFFFF;

end;

procedure TPCI7233.Test;
begin
  sendmessage(handle,INTAccessMsg,0,0);
end;

procedure TPCI7233.OnCall(var message: Tmessage);
 var  aState :DWord;
begin

  

  if  IntBusying then exit;  //阻斷中斷響應(yīng)

  IntBusying:=True; //關(guān)中斷響應(yīng)

       // 延時(shí)查詢進(jìn)行中斷確認(rèn)
  Astate:=  ReadPortEX( 100,10);
  DoLogEvent( format('中斷響應(yīng)到:確認(rèn)狀態(tài)= %x',[aState]));
  if  Astate = FSaveState then begin   // 中斷確認(rèn)無(wú)變化= FSaveState
     IntBusying:=False;  //開(kāi)中斷
     exit;              //退出
  end;
       // 確認(rèn)有變化
  FWaitState:= Astate;  //記住確認(rèn)的新?tīng)顟B(tài)WaitState  以便與常延時(shí)后進(jìn)行對(duì)照
  FTimer.Enabled:=True;//開(kāi)啟常延時(shí)
  DoLogEvent( '開(kāi)啟常延時(shí)');
end;
  //常延時(shí) 到
procedure TPCI7233.OnExpTime(sender: TObject);
 var  aState :DWord; port:SmallInt;
begin
  FTimer.Enabled:=False;//關(guān)閉常延時(shí)
  DoLogEvent( '常延時(shí)到');

       // 延時(shí)查詢進(jìn)行  常延時(shí)后   狀態(tài)確認(rèn)
  Astate:=  ReadPortEX( 100,5);   //500ms
  if  Astate = FWaitState then begin   // 確認(rèn)常延時(shí)后狀態(tài)與中斷確認(rèn)的狀態(tài)一致
      RepeatCount:=0;
      Port :=GetChangeBit(FWaitState);  //判別是那個(gè)端口 發(fā)生 中斷
      if assigned(FOnIntEvent) then// 最終確認(rèn)端口Port發(fā)生變化
           FOnIntEvent(self,FWaitState,Port);  //啟動(dòng)讀表程序
     exit;   //退出  至此,中斷仍處于阻斷狀態(tài)

      // 確認(rèn)常延時(shí)后狀態(tài)與中斷確認(rèn)的狀態(tài)  不 一致
  end else if   Astate = FSaveState  then begin  //但與發(fā)生中斷之前的狀態(tài)一致
     RepeatCount:=0;
     DoLogEvent( '大干擾不需處理');     //認(rèn)為是 大干擾  不需處理
     IntBusying:=False;  //開(kāi)中斷
     exit;              //退出
  end  else begin  // 常延時(shí)后確認(rèn)的狀態(tài) 確實(shí)發(fā)生變化(<> FSaveState )
                   //但與中斷確認(rèn)的狀態(tài)WaitState 也不一致
       //認(rèn)為是 中斷確認(rèn)出錯(cuò) 或 常延時(shí)后 查詢的狀態(tài)出錯(cuò) 或 7233卡有故障
     IntBusying:=False;  //開(kāi)中斷        
     if  RepeatCount <2 then begin
           inc( RepeatCount);
           DoLogEvent( '意外出錯(cuò),重新判別');
           Test2;
           exit;
     end else begin
          RepeatCount:=0;
          DoLogEvent( '意外出錯(cuò),退出');  // 怎么辦
                    //以失敗告終
                    //更新保存狀態(tài)
          SaveState:= Astate;
          exit;              //退出

     end;

 



  end;




end;



procedure TPCI7233.SetOnOffChgColor(const Value: TColor);
begin
  FOnOffChgColor := Value;
  Repaint;
end;

function TPCI7233.SaveStateBit0(B1_32: byte): Boolean;
begin
  result:= _Bit0(FSaveState,B1_32  );
end;

function TPCI7233.SaveStateBit1(B1_32: byte): Boolean;
begin
  result:= _Bit1(FSaveState,B1_32 );
end;

function TPCI7233.ReadPortEX(SetpTime,SetpCount: Integer ): Dword;
 var  CNT:Integer;  ErrCount:Word;
begin
  CNT:=1;   ErrCount :=0;
  delay(SetpTime);
  while CNT<SetpCount do begin
    result :=ReadPort;
  //  form1.Memo1.Lines.Add(Inttostr(result))  ;
    delay(SetpTime);
    if (ReadPort<>result)  then  CNT:=1 else CNT:=CNT+1;
    inc(ErrCount);
    if  ErrCount > 200 then begin result:=FsaveState; exit;end;
  end;
  
end;

procedure TPCI7233.SetWaitTime(const Value: Integer);
begin
  FWaitTime := Value;
  FTimer.Interval:=FWaitTime ;
end;



procedure TPCI7233.Test2;
 var msg:Tmessage;
begin
   msg.Msg:= INTAccessMsg;
   OnCall(msg);
end;

procedure TPCI7233.DoLogEvent(msg: string);
begin
   if assigned(FOnLogEvent) then  FOnLogEvent(self,msg);
end;

end.

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久se这里有精品| 夜夜精品视频一区二区 | 日韩欧美国产小视频| 欧洲一区二区三区免费视频| 一本大道久久a久久精品综合| 成人手机在线视频| www.色精品| 91农村精品一区二区在线| 不卡区在线中文字幕| 99精品视频在线免费观看| 色婷婷国产精品| 欧美日韩国产免费一区二区 | 欧美亚洲一区二区在线| 在线亚洲免费视频| 欧美日韩免费电影| 日韩欧美一级二级| 国产日韩av一区二区| 亚洲婷婷国产精品电影人久久| 亚洲色图在线播放| 日本 国产 欧美色综合| 国产精品456| 色呦呦日韩精品| 欧美电影一区二区三区| 欧美精品一区二区三区视频| 日本一区二区成人| 亚洲福利视频三区| 精品影院一区二区久久久| 成人丝袜高跟foot| 欧美日韩国产综合视频在线观看| 日韩精品一区二区三区蜜臀| 国产欧美日韩激情| 亚洲国产wwwccc36天堂| 国产一区二区在线影院| 91亚洲男人天堂| 欧美一级黄色大片| 中文字幕日韩一区| 亚洲第一成人在线| 成人免费精品视频| 欧美一区二区精品| 夜夜操天天操亚洲| 国产精品影视在线观看| 欧美手机在线视频| 久久久久久久久久电影| 亚洲成人精品一区二区| 国产成人精品免费网站| 在线播放91灌醉迷j高跟美女 | 7777精品伊人久久久大香线蕉 | www..com久久爱| 欧美一级高清片在线观看| 国产精品二三区| 激情另类小说区图片区视频区| 97se亚洲国产综合自在线观| 精品毛片乱码1区2区3区| 亚洲美女一区二区三区| 大桥未久av一区二区三区中文| 91精品黄色片免费大全| 悠悠色在线精品| 国产成人免费在线观看不卡| 精品视频123区在线观看| 1024成人网色www| 国产精品一区二区三区乱码| 日韩一区二区三区四区五区六区| 亚洲精品欧美二区三区中文字幕| 国产成人在线观看免费网站| 欧美成人三级在线| 免费久久精品视频| 91精品国产综合久久香蕉麻豆| 亚洲制服丝袜av| 一本色道久久综合亚洲精品按摩| 中文一区二区在线观看| 国产激情一区二区三区桃花岛亚洲| 日韩欧美一级精品久久| 另类专区欧美蜜桃臀第一页| 5566中文字幕一区二区电影| 日韩高清电影一区| 欧美色综合久久| 亚洲午夜成aⅴ人片| 欧美三片在线视频观看| 亚洲一区二区视频在线| 欧美性感一类影片在线播放| 一区二区成人在线观看| 在线精品视频一区二区| 亚洲成av人**亚洲成av**| 欧美色综合久久| 日韩av中文字幕一区二区三区| 欧美性大战xxxxx久久久| 午夜激情久久久| 日韩亚洲欧美综合| 国产在线视频不卡二| 欧美极品另类videosde| 91视频免费看| 亚洲电影第三页| 精品国产成人系列| 成人一区二区在线观看| 亚洲狠狠丁香婷婷综合久久久| 欧美日韩一区二区在线观看| 人人爽香蕉精品| 欧美国产日韩亚洲一区| 91福利国产成人精品照片| 日韩经典一区二区| 国产网红主播福利一区二区| 国产**成人网毛片九色| 亚洲欧美另类小说视频| 91精品国产综合久久精品麻豆| 国产精品一区二区无线| 亚洲激情自拍偷拍| 精品成人免费观看| 91久久人澡人人添人人爽欧美| 人人狠狠综合久久亚洲| 国产精品久久久久久久久免费樱桃| 欧美优质美女网站| 国产福利视频一区二区三区| 亚洲精品乱码久久久久久黑人 | 欧美偷拍一区二区| 国产在线麻豆精品观看| 亚洲美女屁股眼交| 欧美大度的电影原声| 色天使色偷偷av一区二区| 日本欧美肥老太交大片| 国产精品久久久久久福利一牛影视 | 中文字幕av一区二区三区| 国产91精品在线观看| 日韩1区2区3区| 国产日本欧洲亚洲| 在线观看亚洲一区| 国产在线国偷精品产拍免费yy | 日本一区二区视频在线| 99久久99久久精品国产片果冻 | 成人性视频免费网站| 国产精品对白交换视频 | 日本中文字幕一区| 国产精品色噜噜| 欧美一区永久视频免费观看| 国产大陆亚洲精品国产| 亚洲精品国产视频| 精品粉嫩超白一线天av| 日本道色综合久久| 韩国精品在线观看| 亚洲成av人在线观看| 亚洲麻豆国产自偷在线| 欧美va亚洲va在线观看蝴蝶网| 成人sese在线| 成人精品视频网站| 国产日本亚洲高清| 精品人伦一区二区色婷婷| 色天天综合色天天久久| proumb性欧美在线观看| proumb性欧美在线观看| 国产乱人伦偷精品视频不卡| 蜜桃一区二区三区在线| 亚洲国产一二三| 亚洲国产精品久久不卡毛片| 亚洲色欲色欲www| 亚洲精品中文字幕在线观看| 久久综合色天天久久综合图片| 不卡视频在线观看| 91丨九色丨蝌蚪富婆spa| 国内外成人在线| 久久精品国产亚洲高清剧情介绍| 亚洲欧美成aⅴ人在线观看| 国产精品盗摄一区二区三区| 久久久久久久电影| 久久只精品国产| 日韩一区二区三| 欧美中文字幕一区二区三区| 欧美丝袜丝交足nylons图片| 色综合久久综合网97色综合| 日本精品一区二区三区高清| 99精品黄色片免费大全| 在线区一区二视频| 欧洲精品视频在线观看| 欧美亚洲禁片免费| 欧美日韩精品欧美日韩精品一综合| 91麻豆精品秘密| 色综合久久综合网欧美综合网| 精品一区二区三区欧美| av中文字幕亚洲| 91丨九色丨蝌蚪富婆spa| 欧亚洲嫩模精品一区三区| 一本大道久久精品懂色aⅴ | 国产精品国产三级国产普通话99| 久久久久久久久久久久久女国产乱| 综合av第一页| 美女在线观看视频一区二区| 三级精品在线观看| 美女尤物国产一区| 一本色道**综合亚洲精品蜜桃冫| 91在线视频播放| 欧美色手机在线观看| 日韩一区二区电影| 制服丝袜在线91| 精品乱码亚洲一区二区不卡| 久久蜜桃av一区二区天堂| 亚洲在线视频免费观看| 亚洲欧美激情插| 久久草av在线| 欧美日韩激情一区二区三区| 日韩免费福利电影在线观看| 亚洲在线观看免费视频| 狠狠色丁香婷婷综合久久片|