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

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

?? dlmeter.~pas

?? 符合DL645規約的電能表數據解析. 可直接實現遠程RTU.
?? ~PAS
?? 第 1 頁 / 共 2 頁
字號:
unit DLMeter;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls,  Dialogs,
  VaSystem, myconlib,DL645lib;

const RepeatCount=1;
  
type

   TOnWriteLog = Procedure(sender:Tobject;var msg:string) of object;
   TOnPaserkWh = Procedure(sender:Tobject;aJH:TJH;
                                          aYUE :TYUE;
                                          aBKSet :TBKSet;
                                          aFL  :TFL;
                                          aTime:TDateTime;
                                          aV: TkWh_BKS) of object;


   TOnPaserPm = Procedure(sender:Tobject; aJH:TJH;
                                          aYUE :TYUE;
                                          aBKSet :TBKSet;
                                          aFL  :TFL;
                                          aTime:TDateTime;
                                          aV:TPm_BKS ) of object;


   TOnPaserPmTime = Procedure(sender:Tobject; aJH:TJH;
                                          aYUE :TYUE;
                                          aBKSet :TBKSet;
                                          aFL  :TFL;
                                          aTime:TDateTime;
                                          aV:TPmTime_BKS ) of object;

   TOnPaserBL = Procedure(sender:Tobject; aJH:TJH;
                                          aBLSet:TBLSet;
                                          aBLX :TBLX;
                                          aTime:TDateTime ;
                                          aV:TBL_BKS ) of object;
  TDLMeter = class(TVaCapture)
  private
    FADR:string;
    FID: string;
    FCom:TReadCMD;
    FN:Byte;
    FonStop: TnotifyEvent;
    FOnWriteLog: TOnWriteLog;
    FOnDebug: TOnWriteLog;
    FGoing: Boolean;
    FOnPaserkWh: TOnPaserkWh;
    FOnPaserPm: TOnPaserPm;
    FOnPaserPmTime: TOnPaserPmTime;
    FOnPaserBL: TOnPaserBL;

    procedure onDL_ExpTime(sender:Tobject);
    procedure onDL_Message(Sender: TObject; const Data: string);
  protected
   //  STX:string;
   //  CS0:Byte;
     procedure DologEvent(aMsg:string);
     procedure DoDebugEvent(aMsg:string);
     procedure DoStopEvent;

     procedure Execute;
  public
     STX:string;
     CS0:Byte;
     constructor Create(Owner: TComponent); override;
     destructor Destroy; override;

     procedure Go;

     procedure stop;
     property Going:Boolean read  FGoing;
  published
    property ID:string read  FID write FID;
    property ADR:string read  FADR write FADR;
    property OnWriteLog: TOnWriteLog read   FOnWriteLog   write FOnWriteLog;
    property OnDebug: TOnWriteLog read   FOnDebug   write FOnDebug;
    property onStop:TnotifyEvent read FonStop write  FonStop;

    property OnPaserkWh:TOnPaserkWh read FOnPaserkWh write  FOnPaserkWh;
    property OnPaserPm:TOnPaserPm read FOnPaserPm write  FOnPaserPm;
    property OnPaserPmTime:TOnPaserPmTime read FOnPaserPmTime write  FOnPaserPmTime;
    property OnPaserBL:TOnPaserBL read FOnPaserBL write  FOnPaserBL;

  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('TMS Async32', [TDLMeter]);
end;

{ TDLMeter }

constructor TDLMeter.Create(Owner: TComponent);
begin
  inherited;
  Active:=false;
  DataFinish:=#22;
  OnExpTime :=  OnDL_ExpTime ;
  OnMessage :=  onDL_Message ;
end;

destructor TDLMeter.Destroy;
begin
  inherited;
end;


procedure  TDLMeter.DoLogEvent(aMsg:string);
begin
  if assigned(Fonwritelog) then  Fonwritelog(self, Amsg  );
end;

procedure  TDLMeter.DoStopEvent;
begin
  if assigned(FOnStop) then  FOnStop(self);
end;

procedure TDLMeter.DoDebugEvent(aMsg: string);
begin
   if assigned(FOnDebug) then  FOnDebug(self, Amsg  );
end;

/////////////////////////////////////////////////////////////////////////

procedure TDLMeter.Execute;
begin
  if not FGoing then begin
     DoStopEvent;  exit;
  end;

  if  FN > RepeatCount  then begin
     DoLogEvent('* 執行'+ID+':第'+inttostr(FN)+'次;放棄!');
     DoStopEvent;
  end else begin
     DoLogEvent('* 執行'+ID+':第'+inttostr(FN)+'次;....');
     Active:=True;
     self.
     WriteBuf(FCom,sizeof(FCom) );
  end;
end;



procedure TDLMeter.onDL_ExpTime(sender: Tobject);
begin
  DoLogEvent('* 執行'+ID+':超時' );
  inc(FN);
  execute;
end;

procedure TDLMeter.onDL_Message(Sender: TObject; const Data: string);
 var Err:TCheckErr; B4:Byte;
     i:Integer; S,tmp:string;   ID1_3:Dword; s4:char;
 
     aJH:TJH; aTime:TDateTime;
     aYUE:TYUE; aBK:TBK;  aBKSet:TBKSet; aFL:TFL;
          aV1:TkWh_BKS; aV2:TPm_BKS; aV3: TPmTime_BKS;
     aBL:TBL; aBLSet:TBLSet; aX:TBLX;
          aV4:TBL_BKS;

     aC01:TC01_;  aC02:TC02_;  aC03:TC03_;
     aC11:TC11_;  aC21:TC21_;  aC31:TC31_;
     aC32:TC32_;  aC33:TC33_;  aC41:TC41_;
begin

   Active:=False;
   DoDebugEvent(data ) ;

////////////////////////////////////////////////
//////       檢驗的處理                //////////
///////////////////////////////////////////////
  Err:=CheckData(data,CS0,B4);
  DoLogEvent(CheckErr2Str(err));
  if Err<>ckOK then begin
      case Err of
       ckOKErr: begin
                 DoLogEvent(PaserB4(B4));
                 DoStopEvent; exit;
       end;
       else     begin
                inc(FN); execute; exit;
       end;
      end;
  end;


aBLSet:=[];
aBKSet:=[];
case  GetID1(ID) of

////////////////////////////////////////////////
//////       電能量的處理                //////////
///////////////////////////////////////////////


    ID1_kWh:
    begin //電能量
      aBKSet:=[];
      aJH:=GetJH(ID);
      aYUE:=GetYUE(ID);
      aBK:=GetBK(ID);
      aFL:=GetFL(ID);

//////////////有功電能量集合//////////////////////////////////
      if   aJH=JH_P2 then begin  // 有功集合,
            S:=data;
            tmp:=StrToken(S);
            if  length(tmp) = (4+20)  then begin
               try
               aV1[ZP]:= PaserkWh_Block(aFL,tmp,5); //正向有功,
               aBKSet:=aBKSet+[ZP];
               except
                  DoLogEvent('正向有功數據格式錯!');
               end;
            end;
            tmp:=StrToken(S);
            if  length(tmp) = (20)  then begin
               try
               aV1[FP]:= PaserkWh_Block(aFL,tmp,1); //反向有功,
               aBKSet:=aBKSet+[FP];
               except
                  DoLogEvent('反向有功數據格式錯!');
               end;
            end;

          if assigned(FOnPaserkWh) then
               FOnPaserkWh(self,aJH, aYUE,aBKSet,aFL,aTime,aV1);

          DoStopEvent;
          exit;
      end;  //有功集合,

//////////////無功電能量集合//////////////////////////////////

      if   aJH=JH_Q6 then begin  // 無功集合,
            S:=data;
            tmp:=StrToken(S);
            if  length(tmp) = (4+20)  then begin
               try
               aV1[ZQ]:= PaserkWh_Block(aFL,tmp,5); //正向無功,
               aBKSet:=aBKSet+[ZQ];
               except
                  DoLogEvent('正向無功數據格式錯!');
               end;
            end;

            tmp:=StrToken(S);
            if  length(tmp) = (20)  then begin
               try
               aV1[FQ]:= PaserkWh_Block(aFL,tmp,1); //反向無功,
               aBKSet:=aBKSet+[FQ];
               except
                  DoLogEvent('反向無功數據格式錯!');
               end;
            end;
            
            tmp:=StrToken(S);
            if  length(tmp) = (20)  then begin
               try
               aV1[ZQL1]:= PaserkWh_Block(aFL,tmp,1); //一象限無功(+RL),
               aBKSet:=aBKSet+[ZQL1];
               except
                  DoLogEvent('一象限無功(+RL)數據格式錯!');
               end;
            end;

            tmp:=StrToken(S);
            if  length(tmp) = (20)  then begin
               try
               aV1[FQC4]:= PaserkWh_Block(aFL,tmp,1); //四象限無功(-RC)
               aBKSet:=aBKSet+[FQC4];
               except
                  DoLogEvent('四象限無功(-RC)數據格式錯!');
               end;
            end;

            tmp:=StrToken(S);
            if  length(tmp) = (20)  then begin
               try
               aV1[ZQC2]:= PaserkWh_Block(aFL,tmp,1); //二象限無功(+RC),
               aBKSet:=aBKSet+[ZQC2];
               except
                  DoLogEvent('二象限無功(+RC)數據格式錯!');
               end;
            end;
            
            tmp:=StrToken(S);
            if  length(tmp) = (20)  then begin
               try
               aV1[FQL3]:= PaserkWh_Block(aFL,tmp,1); //三象限無功(-RL)
               aBKSet:=aBKSet+[FQL3];
               except
                  DoLogEvent('三象限無功(-RL)數據格式錯!');
               end;
            end;

          if assigned(FOnPaserkWh) then
               FOnPaserkWh(self,aJH, aYUE,aBKSet,aFL,aTime,aV1);

          DoStopEvent;
          exit;
      end;  //無功集合


//////////////電能量塊 或 項//////////////////////////////////

      try
        aV1[aBK]:=PaserkWh_Block(aFL,Data,5);
      except
        DoLogEvent('數據格式錯!');
        inc(FN); execute; exit;
      end;
      aBKSet:=[aBK];
      if assigned(FOnPaserkWh) then
         FOnPaserkWh(self,aJH, aYUE,aBKSet,aFL,aTime,aV1);

   end;  //電能量

//////////////////////////////
//電能量結束
//////////////////////////////////////
//  /////////最大需量開始////
///////////////////////////////////////


    ID1_Pm:
    begin   //最大需量


      aBKSet:=[];
      aJH:=GetJH(ID);
      aYUE:=GetYUE(ID);
      aBK:=GetBK(ID);
      aFL:=GetFL(ID);

//////////////有功最大需量集合//////////////////////////////////
      if   aJH=JH_P2 then begin  // 有功最大需量集合,
            S:=data;
            tmp:=StrToken(S);
            if  length(tmp) = (4+15)  then begin
               try
               aV2[ZP]:= PaserPm_Block(aFL,tmp,5); //正向有功最大需量,
               aBKSet:=aBKSet+[ZP];
               except
                  DoLogEvent('正向有功最大需量數據格式錯!');
               end;
            end;
            tmp:=StrToken(S);
            if  length(tmp) = (15)  then begin
               try
               aV2[FP]:= PaserPm_Block(aFL,tmp,1); //反向有功,
               aBKSet:=aBKSet+[FP];
               except
                  DoLogEvent('反向有功最大需量數據格式錯!');
               end;
            end;

          if assigned(FOnPaserPm) then
               FOnPaserPm(self,aJH, aYUE,aBKSet,aFL,aTime,aV2);

          DoStopEvent;
          exit;
      end;  //有功最大需量集合,

//////////////無功最大需量集合//////////////////////////////////

      if   aJH=JH_Q6 then begin  // 無功最大需量集合,
            S:=data;
            tmp:=StrToken(S);
            if  length(tmp) = (4+15)  then begin
               try
               aV2[ZQ]:= PaserPm_Block(aFL,tmp,5); //正向無功最大需量,
               aBKSet:=aBKSet+[ZQ];
               except
                  DoLogEvent('正向無功最大需量數據格式錯!');
               end;
            end;

            tmp:=StrToken(S);
            if  length(tmp) = (15)  then begin
               try
               aV2[FQ]:= PaserPm_Block(aFL,tmp,1); //反向最大需量無功,
               aBKSet:=aBKSet+[FQ];
               except
                  DoLogEvent('反向無功最大需量數據格式錯!');
               end;
            end;

            tmp:=StrToken(S);
            if  length(tmp) = (15)  then begin
               try
               aV2[ZQL1]:= PaserPm_Block(aFL,tmp,1); //一象限無功最大需量(+RL),
               aBKSet:=aBKSet+[ZQL1];
               except
                  DoLogEvent('一象限無功最大需量(+RL)數據格式錯!');
               end;
            end;

            tmp:=StrToken(S);
            if  length(tmp) = (15)  then begin
               try
               aV2[FQC4]:= PaserPm_Block(aFL,tmp,1); //四象限無功最大需量(-RC)
               aBKSet:=aBKSet+[FQC4];
               except
                  DoLogEvent('四象限無功最大需量(-RC)數據格式錯!');
               end;
            end;

            tmp:=StrToken(S);
            if  length(tmp) = (15)  then begin
               try
               aV2[ZQC2]:= PaserPm_Block(aFL,tmp,1); //二象限無功最大需量(+RC),
               aBKSet:=aBKSet+[ZQC2];
               except
                  DoLogEvent('二象限無功最大需量(+RC)數據格式錯!');
               end;
            end;

            tmp:=StrToken(S);
            if  length(tmp) = (15)  then begin
               try
               aV2[FQL3]:= PaserPm_Block(aFL,tmp,1); //三象限無功最大需量(-RL)
               aBKSet:=aBKSet+[FQL3];
               except
                  DoLogEvent('三象限無功最大需量(-RL)數據格式錯!');
               end;
            end;

          if assigned(FOnPaserPm) then
               FOnPaserPm(self,aJH, aYUE,aBKSet,aFL,aTime,aV2);

          DoStopEvent;
          exit;
      end;  //無功集合


//////////////最大需量塊 或 項//////////////////////////////////
      aJH:=JH_NO;
      aYUE:=GetYUE(ID);
      aBK:=GetBK(ID);
      aBKSet:=[aBK];
      aFL:=GetFL(ID);
      try
         aV2[aBK]:=PaserPm_Block(aFL,Data,5);
      except
         DoLogEvent('數據格式錯!');
         inc(FN); execute; exit;
      end;

      if assigned(FOnPaserPm) then
         FOnPaserPm(self,aJH, aYUE,aBKSet,aFL,aTime,aV2);

    end;  //最大需量

//////////////////////////////
//最大需量結束
//////////////////////////////////////
//  /////////最大需量發生時間開始////
///////////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成a天堂v人片| 亚洲卡通欧美制服中文| 亚洲人精品午夜| 污片在线观看一区二区| av电影一区二区| 久久久国产一区二区三区四区小说| 亚洲欧美经典视频| 国产福利一区二区三区视频| 欧美老人xxxx18| 国产精品欧美久久久久无广告| 无码av免费一区二区三区试看 | 中文字幕欧美三区| 日韩高清不卡在线| 欧美日韩国产小视频| 中文字幕精品在线不卡| 另类调教123区| 欧美电影一区二区| 亚洲国产一二三| 91浏览器入口在线观看| 欧美激情综合五月色丁香小说| 麻豆精品视频在线观看| 欧美精品自拍偷拍动漫精品| 亚洲色图欧美偷拍| av日韩在线网站| 国产精品国产三级国产三级人妇| 国产精品69久久久久水密桃| 日韩一区二区精品葵司在线 | 国产一二精品视频| 精品免费日韩av| 精品无人区卡一卡二卡三乱码免费卡| 欧美日韩国产另类不卡| 亚洲午夜久久久久| 欧美日韩精品一区二区三区| 亚洲国产综合在线| 91精品国产美女浴室洗澡无遮挡| 亚洲自拍偷拍综合| 欧美日韩精品二区第二页| 亚洲成人精品在线观看| 欧美日韩综合在线免费观看| 婷婷亚洲久悠悠色悠在线播放 | 色综合 综合色| 夜夜精品浪潮av一区二区三区| 色综合一个色综合| 亚洲一区二区三区四区五区中文 | 一区二区三区成人| 欧美在线小视频| 首页国产丝袜综合| 精品国产百合女同互慰| 国产麻豆日韩欧美久久| 国产三级一区二区| 91在线观看视频| 亚洲一区二区三区美女| 欧美一区二区人人喊爽| 精品一区二区久久久| 国产精品视频一二| 色88888久久久久久影院按摩| 五月激情六月综合| 久久影音资源网| 972aa.com艺术欧美| 亚洲成人动漫在线免费观看| 欧美mv和日韩mv国产网站| 国产高清在线精品| 亚洲精品国产高清久久伦理二区| 在线不卡免费欧美| 成人黄色小视频在线观看| 亚洲午夜影视影院在线观看| 日韩丝袜美女视频| 99久精品国产| 美女视频一区二区三区| 国产精品美女久久久久aⅴ| 欧美色综合影院| 国产精品一区在线| 丝袜a∨在线一区二区三区不卡| 国产午夜一区二区三区| 欧美日韩视频一区二区| 国产91丝袜在线观看| 亚洲一区在线观看免费观看电影高清| 精品免费日韩av| 欧美日韩中文精品| 粉嫩av亚洲一区二区图片| 午夜电影网一区| 国产欧美精品国产国产专区 | 日本韩国欧美三级| 国产激情视频一区二区三区欧美 | 色综合一个色综合| 国产精品一二三四| 日韩一区欧美二区| 亚洲乱码国产乱码精品精小说| 久久综合狠狠综合久久激情| 欧美日韩免费电影| 99久久综合色| 国产精品中文欧美| 麻豆成人在线观看| 亚洲成av人**亚洲成av**| 国产精品麻豆欧美日韩ww| 精品欧美一区二区三区精品久久| 欧美三级资源在线| 日本乱码高清不卡字幕| 成人av免费在线| 国产91精品在线观看| 久久97超碰色| 美女视频免费一区| 欧美aⅴ一区二区三区视频| 亚洲一二三四在线观看| 亚洲精品成人少妇| 亚洲色图在线看| 国产精品久久久久9999吃药| 国产三级一区二区三区| 久久久久久免费| 国产香蕉久久精品综合网| 久久一留热品黄| 精品国产乱码久久久久久牛牛| 制服丝袜亚洲色图| 欧美日本韩国一区二区三区视频| 91久久精品日日躁夜夜躁欧美| 一本到不卡精品视频在线观看| av一区二区三区四区| 成人动漫一区二区| 99视频国产精品| 色综合欧美在线| 在线中文字幕不卡| 欧美视频一区二区三区| 欧美日韩一区二区在线观看| 欧美日韩免费不卡视频一区二区三区| 欧美日韩午夜影院| 欧美一级片免费看| 精品精品欲导航| 久久影院午夜论| 国产精品不卡在线观看| 亚洲人快播电影网| 天天射综合影视| 狠狠色综合播放一区二区| 国产成人在线看| 91丨porny丨最新| 欧美图区在线视频| 日韩情涩欧美日韩视频| 久久精品一区二区三区四区| 中文字幕一区二区三区视频| 亚洲综合一区二区三区| 日韩精品电影一区亚洲| 国产在线日韩欧美| 91在线一区二区| 欧美一区二区三区在线视频| 精品国内二区三区| 自拍视频在线观看一区二区| 亚洲成人激情av| 国产在线一区观看| 一本色道久久综合狠狠躁的推荐| 91精品国产综合久久精品| 久久久精品天堂| 亚洲国产精品人人做人人爽| 国产麻豆视频一区二区| 日本精品免费观看高清观看| 精品免费国产二区三区 | 久久精品欧美日韩精品| 亚洲一二三四区| 国产传媒日韩欧美成人| 欧美三级三级三级| 欧美—级在线免费片| 日本欧美一区二区三区乱码 | 国产在线不卡一区| 欧美亚洲禁片免费| 欧美国产精品久久| 日韩av不卡一区二区| 99久久777色| 久久先锋影音av| 日韩国产欧美一区二区三区| 99热99精品| 国产亚洲一二三区| 日本中文一区二区三区| 一本一道久久a久久精品综合蜜臀| 日韩免费观看高清完整版| 一区二区三区欧美久久| 成人小视频免费观看| 日韩欧美一区二区免费| 亚洲中国最大av网站| 国产sm精品调教视频网站| 9191国产精品| 亚洲高清久久久| 在线免费一区三区| 国产色爱av资源综合区| 精品中文av资源站在线观看| 欧美高清www午色夜在线视频| 亚洲三级在线看| thepron国产精品| 欧美经典一区二区| 国产自产2019最新不卡| 日韩亚洲欧美在线| 日韩一区欧美二区| 91麻豆精品国产综合久久久久久 | 亚洲欧洲www| av不卡免费在线观看| 国产欧美一二三区| 国产电影精品久久禁18| 久久久久久久久岛国免费| 久热成人在线视频| 欧美大片免费久久精品三p| 日韩av成人高清| 日韩精品中文字幕一区| 精一区二区三区|