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

通讯编程

开发平台:

Visual Basic

  1. unit Unit2;
  2. interface
  3. uses
  4.   Classes, windows, SysUtils, OleCtrls, zkemkeeper_TLB,Forms;
  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.     procedure ClearLogs;
  23.     procedure SetActive(const Value: boolean);
  24.     procedure SetPeriod(const Value: integer);
  25.   protected
  26.     procedure Execute; override;
  27.   public
  28.     constructor Create(AIPAddress: string; APortNumber: integer=4370); overload;
  29.     constructor Create(APortNo: integer; ADevID: integer=1; ABaudRate: integer=115200); overload;
  30.     destructor Destroy; override;
  31.     property Connected: boolean read FConnected;
  32.     property Active: boolean read FActive write SetActive;
  33.     property Period: integer read FPeriod write SetPeriod;
  34.   end;
  35. implementation
  36. uses unit1;
  37. { TLogReader }
  38. procedure TLogReader.ClearLogs;
  39. begin
  40.   CZKEM1.ClearGLog(DevID);
  41. end;
  42. function TLogReader.Connect: boolean;
  43. begin
  44.   if not Connected then
  45.   begin
  46.     if IPAddress='' then
  47.       FConnected := CZKEM1.Connect_Com(PortNo, DevID, BaudRate)
  48.     else
  49.       FConnected := CZKEM1.Connect_Net(IPAddress, PortNo);
  50.     if Connected then Synchronize(UpdateState);
  51.   end;
  52.   result := Connected;
  53. end;
  54. constructor TLogReader.Create(AIPAddress: string; APortNumber: integer);
  55. begin
  56.   inherited Create(true);
  57.   Period := 5;
  58.   NewLogs := tstringlist.Create;
  59.   IPAddress := AIPAddress;
  60.   PortNo := APortNumber;
  61.   DevID := 1;
  62.   CZKEM1:= TCZKEM.Create(nil);
  63.   CZKEM1.Width := 0;
  64.   CZKEM1.Parent := application.MainForm;
  65.   resume;
  66. end;
  67. constructor TLogReader.Create(APortNo, ADevID, ABaudRate: integer);
  68. begin
  69.   inherited Create(true);
  70.   Period := 5;
  71.   NewLogs := tstringlist.Create;
  72.   IPAddress := '';
  73.   PortNo := APortNo;
  74.   DevID := ADevID;
  75.   BaudRate := ABaudRate;
  76.   CZKEM1:= TCZKEM.Create(nil);
  77.   CZKEM1.Width := 0;
  78.   CZKEM1.Parent := application.MainForm;
  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.         if ReadLogs>0 then
  108.         begin
  109.           ClearLogs;
  110.           Synchronize(UpdateList);
  111.         end;
  112.       end;
  113.     end
  114.     else
  115.       DisConnnect;
  116.     OldActive := FActive;
  117.     //Sleep Period
  118.     i := 0;
  119.     while i<FPeriod*2-1 do
  120.     begin
  121.       //sleep 500ms
  122.       WaitForSingleObject(GetCurrentThread(), 500);
  123.       if Terminated then exit;
  124.       if OldActive xor FActive then break;
  125.       inc(i);
  126.     end;
  127.   end;
  128. end;
  129. function TLogReader.ReadLogs: integer;
  130. var
  131.   dwTMachine, dwEnrollNumber,dwEMachineNumber,dwVerifyMode: Integer;
  132.   dwInOutMode,dwYear,dwMonth,dwDay,dwHour,dwMinute: Integer;
  133.   s: string;
  134.   TimeStr: WideString;
  135.   f: tfilestream;
  136. begin
  137.   NewLogs.Clear;
  138.   result := 0;
  139.   if CZKEM1.ReadGeneralLogData(DevID) then
  140.     //while CZKEM1.GetGeneralLogDataStr(DevID, dwEnrollNumber, dwVerifyMode,
  141.     //  dwInOutMode,TimeStr) do
  142.     while CZKEM1.GetGeneralLogData(1,dwTMachine,dwEnrollNumber,dwEMachineNumber,dwVerifyMode,
  143.       dwInOutMode,dwYear,dwMonth,dwDay,dwHour,dwMinute) 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. procedure TLogReader.UpdateList;
  159. begin
  160.   Form1.AddLogs(NewLogs);
  161. end;
  162. procedure TLogReader.UpdateState;
  163. begin
  164.   form1.UpdateState(self, FConnected);
  165. end;
  166. end.