Unit2.~pas
上传用户:lzd18710
上传日期:2009-11-26
资源大小:3595k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual Basic

  1. unit Unit2;
  2. interface
  3. uses
  4.   Classes, windows, SysUtils, OleCtrls, zkemkeeper_TLB;
  5. type
  6.   TLogReader = class(TThread)
  7.   private
  8.     { Private declarations }
  9.     NewLogs: tstrings;
  10.     FActive: boolean;
  11.     FPeriod: integer;
  12.     FConnected: boolean;
  13.     CZKEM1: TCZKEM;
  14.     DevID: integer;
  15.     IPAddress: string;
  16.     BaudRate, PortNo: integer;
  17.     procedure UpdateList;
  18.     procedure UpdateState;
  19.     function Connect: boolean;
  20.     procedure DisConnnect;
  21.     function ReadLogs: integer;
  22.     function SyncTime:integer;
  23.     procedure ClearLogs;
  24.     procedure SetActive(const Value: boolean);
  25.     procedure SetPeriod(const Value: integer);
  26.   protected
  27.     procedure Execute; override;
  28.   public
  29.     constructor Create(AIPAddress: string; APortNumber: integer=4370); overload;
  30.     constructor Create(APortNo: integer; ADevID: integer=1; ABaudRate: integer=115200); overload;
  31.     destructor Destroy; override;
  32.     property Connected: boolean read FConnected;
  33.     property Active: boolean read FActive write SetActive;
  34.     property Period: integer read FPeriod write SetPeriod;
  35.   end;
  36. implementation
  37. uses unit1;
  38. { TLogReader }
  39. procedure TLogReader.ClearLogs;
  40. begin
  41.   CZKEM1.ClearGLog(DevID);
  42. end;
  43. function TLogReader.Connect: boolean;
  44. begin
  45.   if not Connected then
  46.   begin
  47.     if IPAddress='' then
  48.       FConnected := CZKEM1.Connect_Com(PortNo, DevID, BaudRate)
  49.     else
  50.       FConnected := CZKEM1.Connect_Net(IPAddress, PortNo);
  51.     {$ifdef onlysynctime}
  52.     SyncTime;
  53.     {$endif}
  54.     if Connected then Synchronize(UpdateState);
  55.   end;
  56.   result := Connected;
  57. end;
  58. constructor TLogReader.Create(AIPAddress: string; APortNumber: integer);
  59. begin
  60.   inherited Create(true);
  61.   Period := 5;
  62.   NewLogs := tstringlist.Create;
  63.   IPAddress := AIPAddress;
  64.   PortNo := APortNumber;
  65.   DevID := 1;
  66.   CZKEM1:= TCZKEM.Create(nil);
  67.   resume;
  68. end;
  69. constructor TLogReader.Create(APortNo, ADevID, ABaudRate: integer);
  70. begin
  71.   inherited Create(true);
  72.   Period := 5;
  73.   NewLogs := tstringlist.Create;
  74.   IPAddress := '';
  75.   PortNo := APortNo;
  76.   DevID := ADevID;
  77.   BaudRate := ABaudRate;
  78.   CZKEM1:= TCZKEM.Create(nil);
  79.   resume;
  80. end;
  81. destructor TLogReader.Destroy;
  82. begin
  83.   CZKEM1.Free;
  84.   NewLogs.free;
  85.   inherited;
  86. end;
  87. procedure TLogReader.DisConnnect;
  88. begin
  89.   if Connected then
  90.   begin
  91.     CZKEM1.Disconnect;
  92.     FConnected := false;
  93.     Synchronize(UpdateState);
  94.   end;
  95. end;
  96. procedure TLogReader.Execute;
  97. var
  98.   i: integer;
  99.   OldActive: boolean;
  100. begin
  101.   while true do
  102.   begin
  103.     if FActive then
  104.     begin
  105.       if Connect then
  106.       begin
  107.         {$ifndef onlysynctime}
  108.         if ReadLogs>0 then
  109.         begin
  110.           ClearLogs;
  111.           Synchronize(UpdateList);
  112.         end;
  113.         {$endif}
  114.       end;
  115.     end
  116.     else
  117.       DisConnnect;
  118.     OldActive := FActive;
  119.     //Sleep Period
  120.     i := 0;
  121.     while i<FPeriod*2-1 do
  122.     begin
  123.       //sleep 500ms
  124.       WaitForSingleObject(GetCurrentThread(), 500);
  125.       if Terminated then exit;
  126.       if OldActive xor FActive then break;
  127.       inc(i);
  128.     end;
  129.   end;
  130. end;
  131. function TLogReader.ReadLogs: integer;
  132. var
  133.   dwTMachine, dwEnrollNumber,dwEMachineNumber,dwVerifyMode: Integer;
  134.   dwInOutMode,dwYear,dwMonth,dwDay,dwHour,dwMinute: Integer;
  135.   s: string;
  136.   TimeStr: WideString;
  137.   f: tfilestream;
  138. begin
  139.   NewLogs.Clear;
  140.   result := 0;
  141.   if CZKEM1.ReadGeneralLogData(DevID) then
  142.     while CZKEM1.GetGeneralLogDataStr(DevID, dwEnrollNumber, dwVerifyMode,
  143.       dwInOutMode,TimeStr) do
  144.     begin
  145.       s:=format('%5d %d %d %s', [dwEnrollNumber, dwVerifyMode, dwInOutMode,TimeStr]);
  146.       NewLogs.Add(s);
  147.       inc(result);
  148.     end;
  149. end;
  150. procedure TLogReader.SetActive(const Value: boolean);
  151. begin
  152.   FActive := Value;
  153. end;
  154. procedure TLogReader.SetPeriod(const Value: integer);
  155. begin
  156.   FPeriod := Value;
  157. end;
  158. function TLogReader.SyncTime: integer;
  159. begin
  160.   //
  161.   CZKEM1.SetDeviceTime(DevID);
  162. end;
  163. procedure TLogReader.UpdateList;
  164. begin
  165.   Form1.AddLogs(NewLogs);
  166. end;
  167. procedure TLogReader.UpdateState;
  168. begin
  169.   form1.UpdateState(self, FConnected);
  170. end;
  171. end.