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

通讯编程

开发平台:

Visual Basic

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