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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? uniprotocol_timepos.pas

?? 很好用的串口通信工具軟件。Comport目錄下是用到的通信控件。
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
unit UniProtocol_TimePos;

{----------------------------------------------
       UniProtocol_TimePos

        考勤機協議插件
           Ver 1.04

  Copyright 1999-2001 AT Corp.Ltd
-----------------------------------------------}

interface

uses
  UniCommX, SysUtils, Classes, Windows;

type
  TPosData = record
    rtTime: TDateTime;                  // 日期
    rtCard: string;                     // 卡號
    rtReaderNO: string;                 // 讀卡頭號
    rtVoltage: Integer;                 // 電壓
    rtTemperature: Integer;             // 溫度
  end;

  TTimePos = class(TCustomProtocolExecutor)
  private
    FSenderSerialNO: string;
    FHostCmd: THostCommand;
    FFrameNo: Integer;
    FAlertData: string;                 // 報警數據
    FDataCount: Integer;
    function AdjustTimeCommand: string;
  public
    constructor Create(SenderID, ProtocolVersion: Integer; Hwnd: THandle); override;
    destructor Destroy; override;
    class function ParsePos(Data: string): TPosData;
    class function ProtocolImplemented(ProtocolType: Integer; ProtocolVersion: Integer; isCommander: Boolean): Boolean; override;
    class function SaveUncompletedData: Boolean; override;
    function ProcessProtocol(var FCommState: Integer; SendResult: Integer; Packet: string; Parameters: TStrings): THostCommand; override;
  end;

implementation

const
  MonitorID = 2;
  csACK = #$A5#$A5;                     // csACK: 確認
  csNAK = #$5A#$5A;                     // csNAK: 否定回應

constructor TTimePos.Create(SenderID, ProtocolVersion: Integer; Hwnd: THandle);
begin
  inherited;
end;

destructor TTimePos.Destroy;
begin
  inherited;
end;

class function TTimePos.ParsePos(Data: string): TPosData;
var
  Year, Mon, day, Hour, Min, Sec: Word;
begin
  DecodeDate(Now, year, Mon, day);
  Sec := 0;
  Min := StrtoInt(Copy(Data, 1, 2));
  Hour := StrtoInt(Copy(Data, 3, 2));
  day := StrtoInt(Copy(Data, 5, 2));
  Mon := StrtoInt(Copy(Data, 7, 2));
  with Result do
  begin
    rtTime := EncodeDate(year, mon, day) + EnCodeTime(Hour, Min, Sec, 0);
    rtCard := Copy(Data, 9, 8);
    rtReaderNO := Copy(Data, 17, 2);
    rtVoltage := StrtoInt('$' + Copy(Data, 19, 2));
    rtTemperature := StrtoInt('$' + Copy(Data, 21, 2));
  end;
end;

class function TTimePos.ProtocolImplemented(ProtocolType: Integer; ProtocolVersion: Integer; isCommander: Boolean): Boolean;
begin
  Result := (ProtocolType = cnTimePosID) and isCommander;
end;

class function TTimePos.SaveUncompletedData: Boolean;
begin
  Result := True;
end;

function TTimePos.AdjustTimeCommand: string;
var
  Year, Month, day, Hour, Min, Sec, Msec: Word;
begin
  decodeDate(now, Year, Month, day);
  decodeTime(now, Hour, Min, Sec, msec);
  Year := Year mod 100;
  SetLength(Result, 8);
  Result[1] := #$FD;
  Result[2] := Chr(convBCDToHex(Sec));
  Result[3] := Chr(convBCDToHex(Min));
  Result[4] := Chr(convBCDToHex(Hour));
  Result[5] := Chr(convBCDToHex(day));
  Result[6] := Chr(convBCDToHex(Month));
  Result[7] := Chr(convBCDToHex(Year));
  Result[8] := Chr(GenerateCRC(Result[1], 7));
end;

{                                      (主機與考勤機)
     考勤機 ?----------------------------------------------------------------------------------------à主機
等待主機呼叫
              ?------------------------------------------------呼叫考勤機------------------------------------定時收集考勤信息
     收到并確認是呼叫本機--------------------------------應答---------------------------------------------à
              ?------------------------------------------------呼叫考勤機------------------------------------未收到應答(超時呼叫其它考勤機)
              ?------------------------------------------------發送命令---------------------------------------收到應答,確定呼叫成功
     收到命令 -------------------------------------------------應答---------------------------------------------à

命令及回答:
注:◆為主機命令    ⊙考勤機應答  【】內為注解
     ACK = 0xA5 + 0xA5   NAK = 0x5A + 0x5A
●握手信號:
◆ "SWAT"
⊙ ACK+0002(考勤機標識)+0001(協議版本號)+CRC         	  【ACK】
●讀取考勤機號:
◆ 0xFE+0x10+CRC
⊙ ACK+4B(考勤機號)+2B(記錄條數)+5B(報警數據)+CRC      	  【ACK】
● 校正考勤機時間
◆ 0xFD+SSMMHHDDMMYY+CRC
⊙ ACK+0xFD+CRC           				  【ACK】
● 請求數據
       ◆ 0xFB+2B(記錄條數)+CRC			          【請求記錄】
       ⊙ 0xFB+2B(記錄條數)+16B(數據)+CRC
【16B數據:分時日月(4B)+卡號(4B)+讀卡頭號(1B)+電壓(1B)+溫度補碼(1B)+ [00000交流電紅外入侵門磁開關](1B)+預留(4B)】
● 下傳主機電話號碼:
       ◆ 0xFA+1B(號碼序號)+1B(號碼長度)+電話號碼+CRC
       ⊙ ACK+1B(號碼序號)+0xFA+CRC			  【ACK】
● 更新密鑰:
  ◆ 0xF9+2B(幀號)+6B(數據)+CRC				  【幀號為密鑰位置,6B數據為4B密鑰+1B權限(80H以上可開門)+1B預留】
⊙ ACK++2B(幀號)+CRC     				  【ACK】
● 追加新密鑰:
       ◆ 0xF8+6B(數據)+CRC
       ⊙ ACK+0xF8+CRC                   		  【ACK】
● 掛機命令:
       ◆ 0xF7+0x10+CRC
       ⊙ ACK+0xF7+CRC                   		  【ACK】
● 設置報警范圍:
       ◆ 0xF5+7B(報警范圍)+CRC			          【7B報警范圍:2B溫度上下限,2B電壓上下限,1B交流,紅外,門磁(低三位為1可報警),2B預留】
       ⊙ ACK+0xF5+CRC                   		  【ACK】
● 命令接收錯誤應答:
        ⊙ NCK+4B(考勤機號)+CRC                   	  【NCK】
注:
1、固定數據取CRC只是為延長命令長度,減少"正確誤碼"或為處理方便。
2、當主機沒有收到應答時,要求重發都由主機來執行。
3、當收到下一條命令,校驗正確,就屏蔽上條命令,以次類推。
}

function TTimePos.ProcessProtocol(var FCommState: Integer; SendResult: Integer; Packet: string; Parameters: TStrings): THostCommand;
const
  csGetDataInfo = csUser + 1;
  csAdjustTime = csUser + 2;
  csGetHistoryData = csUser + 3;
  csSetPhoneCode = csUser + 4;
  csUpdateKey = csUser + 5;
  csAppendKey = csUser + 6;
  csSetAlertLimit = csUser + 7;

  function FindParams(Key: string): string;
  begin
    Result := Parameters.Values[IntToStr(cnTimePosID) + '_' + Key];
  end;

  function GetSubParams(Key: string; KeyIndex: Integer): string;
  var
    i: Integer;
    curKeyIndex: Integer;
    Params: string;
  begin
    Result := '';
    Params := FindParams(Key);
    if Params = '' then Exit;
    curKeyIndex := 0;
    if Params[Length(Params)] <> ',' then Params := Params + ',';
    while Pos(',', Params) > 0 do
    begin
      i := Pos(',', Params);
      if curKeyIndex = KeyIndex then
      begin
        Result := Copy(Params, 1, i - 1);
        Break;
      end;
      Delete(Params, 1, i);
      Inc(curKeyIndex);
    end;
  end;

  function GetAlterLimit: string;
  var
    i: integer;
  begin
    Result := '';
    for i := 0 to 3 do
      Result := Result + chr(StrToInt(GetSubParams(FSenderSerialNO + '_AlertLimit', i)));
    Result := Result + chr(
      (StrToInt(GetSubParams(FSenderSerialNO + '_AlertLimit', 4)) shl 2) or
      (StrToInt(GetSubParams(FSenderSerialNO + '_AlertLimit', 5)) shl 1) or
      (StrToInt(GetSubParams(FSenderSerialNO + '_AlertLimit', 6))));
    Result := Result + #0#0;
  end;

var
  i: integer;
  currentData: string;
begin
  FProcessRatio := 0;
  // 處理狀態改變
  case FCommState of
    csHandShake:
      begin
        FFrameNo := 0;
        FCommState := csGetDataInfo;
      end;
    csGetDataInfo:
      begin
        case SendResult of
          srGetData:
            begin
              FSenderSerialNO := '';
              for i := 0 to 3 do
                FSenderSerialNO := FSenderSerialNO + IntToHex(ord(Packet[3 + i]), 2);
              FDatas.Add('SenderSerialNo=' + FSenderSerialNO);
              FDataCount := (Ord(Packet[7]) shl 8) + Ord(Packet[8]);
              FAlertData := '';
              for i := 0 to 4 do
                FAlertData := FAlertData + IntToHex(ord(Packet[9 + i]), 2);
              FCommState := csAdjustTime;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美国产综合一区 | 亚洲国产裸拍裸体视频在线观看乱了| 欧美精品日韩一本| 欧美色图一区二区三区| 色视频欧美一区二区三区| 91在线免费播放| 91麻豆国产自产在线观看| 一本久道久久综合中文字幕 | 亚洲欧美偷拍三级| 亚洲视频免费在线观看| 一区二区三区四区激情| 亚洲风情在线资源站| 同产精品九九九| 美国十次了思思久久精品导航| 免费看黄色91| 成人深夜视频在线观看| 色欧美片视频在线观看在线视频| 欧美亚男人的天堂| 3d动漫精品啪啪一区二区竹菊| 日韩一区二区三区在线观看| 欧美精品一区二区三区蜜桃视频| 国产欧美va欧美不卡在线| 国产精品欧美一区二区三区| 亚洲午夜在线电影| 精品一区二区三区不卡| 99精品热视频| 日韩一本二本av| 1000精品久久久久久久久| 亚洲妇熟xx妇色黄| 粉嫩绯色av一区二区在线观看 | 欧美色精品在线视频| 日韩免费视频一区二区| 国产精品久久国产精麻豆99网站| 亚洲成人资源在线| 国产高清亚洲一区| 欧美精品 日韩| 国产精品水嫩水嫩| 欧美aaaaa成人免费观看视频| 国产成人午夜精品5599| 欧美精品三级日韩久久| 国产精品嫩草99a| 男女男精品网站| 日本精品视频一区二区三区| 久久综合久久综合久久综合| 亚洲国产sm捆绑调教视频| 国产不卡视频一区二区三区| 欧美精品久久天天躁| 国产精品久久久一本精品 | 精品国产一区a| 亚洲综合视频在线观看| 成人小视频免费观看| 日韩午夜小视频| 亚洲成人手机在线| 91蝌蚪国产九色| 国产精品美女久久久久久| 久久精品噜噜噜成人av农村| 欧美无砖专区一中文字| 成人免费在线视频| 成人深夜视频在线观看| 久久视频一区二区| 久久国产福利国产秒拍| 欧美日韩国产高清一区二区| 亚洲美女屁股眼交| 99久久精品免费看| 国产精品久久免费看| 国产69精品一区二区亚洲孕妇| 精品久久久久久久久久久院品网 | 中文字幕第一区| 激情小说欧美图片| 国产蜜臀97一区二区三区| 美女网站色91| 91精品国产综合久久国产大片 | 日韩一级高清毛片| 午夜亚洲国产au精品一区二区| 色综合久久88色综合天天6 | 欧美视频自拍偷拍| 一区二区三区在线观看网站| 91麻豆免费视频| 亚洲精品写真福利| 日本道免费精品一区二区三区| 自拍视频在线观看一区二区| 日本乱码高清不卡字幕| 亚洲成人先锋电影| 欧美一区二区视频在线观看| 麻豆国产欧美一区二区三区| 日韩视频免费直播| 狠狠色丁香久久婷婷综合_中| 精品1区2区在线观看| 国产91高潮流白浆在线麻豆| 国产精品欧美精品| 91久久精品国产91性色tv | 日韩三级免费观看| 韩日av一区二区| 中文欧美字幕免费| 日本黄色一区二区| 日本午夜精品视频在线观看| 欧美精品一区二区三区蜜桃视频| 国产91精品免费| 亚洲一区在线观看视频| 欧美一二三区精品| 成人动漫在线一区| 亚洲高清视频在线| 国产区在线观看成人精品| 91视频免费播放| 久久se这里有精品| 国产精品久久久久久久浪潮网站| 欧美日韩一区二区三区在线看| 美女视频黄 久久| 国产精品美女久久久久久久| 精品视频一区二区不卡| 国产成人自拍网| 亚洲国产综合91精品麻豆| 精品国产区一区| 欧美综合久久久| 国产成人综合网| 日韩精品视频网站| 国产精品国产a级| 日韩你懂的在线观看| 色婷婷综合五月| 国产美女精品在线| 日韩精品一级二级 | 欧美乱妇23p| 国产suv精品一区二区三区| 亚洲成人午夜电影| 中文字幕一区二区三区色视频 | 韩国三级中文字幕hd久久精品| 中文字幕亚洲精品在线观看 | 国产精品一区在线观看你懂的| 一区二区三区资源| 国产亚洲欧美一区在线观看| 欧美日本国产视频| 91首页免费视频| 高清视频一区二区| 国产真实乱子伦精品视频| 天堂一区二区在线| 亚洲一区视频在线观看视频| 国产精品成人在线观看| 国产拍揄自揄精品视频麻豆| 日韩亚洲欧美中文三级| 欧美久久久久久久久久| 91久久精品一区二区二区| 99精品视频在线观看免费| 国产成人福利片| 国产一区视频网站| 蜜臀av在线播放一区二区三区| 亚洲成人免费在线观看| 亚洲一级电影视频| 亚洲综合激情小说| 伊人夜夜躁av伊人久久| 一区二区三区在线免费视频| 亚洲另类一区二区| 亚洲黄色在线视频| 亚洲一级片在线观看| 亚洲国产中文字幕| 亚洲1区2区3区视频| 天天色天天操综合| 欧美aaa在线| 国产在线精品不卡| 国产99久久精品| 欧美视频在线播放| 91精品久久久久久蜜臀| 日韩欧美一卡二卡| 久久久久综合网| 国产精品嫩草99a| 亚洲一区影音先锋| 日韩av二区在线播放| 久久99精品久久久久久动态图 | 国产91高潮流白浆在线麻豆| 国产69精品久久777的优势| 丁香五精品蜜臀久久久久99网站| 高清国产一区二区| 色婷婷久久久综合中文字幕 | 美腿丝袜一区二区三区| 国产一区二区三区久久久| 成人综合激情网| 欧洲国产伦久久久久久久| 欧美一区二区三区白人| 久久亚洲捆绑美女| 亚洲人成精品久久久久久| 亚洲电影一级黄| 激情图片小说一区| 97久久精品人人澡人人爽| 欧美日韩在线电影| 久久日韩精品一区二区五区| 亚洲三级久久久| 蜜臀av性久久久久蜜臀aⅴ| 成人网页在线观看| 欧美巨大另类极品videosbest| 精品国产一区二区三区忘忧草| 国产精品久久久久天堂| 日本中文在线一区| 成人av电影免费观看| 91精品国产入口| 亚洲日本丝袜连裤袜办公室| 日韩成人免费看| 91麻豆精品秘密| 久久综合久久综合九色| 亚洲成人三级小说| 91在线一区二区三区| 精品久久久久久亚洲综合网|