⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 termset.pas

📁 delphi开发的基于 gprsd数据采集程序
💻 PAS
字号:
unit TermSet;

interface
uses
    Contnrs,record_define,term,ComCtrls,SysUtils;

type
  TTermSet = class
  public
     members:TObjectList;

     constructor Create;
     destructor Destroy;

     procedure init;
     procedure check_task;
     procedure deal_data(buf:array of char;data_len:byte);
     function  find_term(gprs_id:integer;term_id:byte):TTerm;
  end;
implementation

uses TcpMod, Unit1, Unit3, Gprs_Interface;

{ TTermSet }

procedure TTermSet.check_task;
var
   i:integer;
begin
   for i:=0 to members.Count-1 do
       Tterm(self.members.Items[i]).check_second;
end;

constructor TTermSet.Create;
begin
    members:=TObjectList.Create(true);
end;

destructor TTermSet.Destroy;
begin
    members.Destroy;
end;

procedure TTermSet.init;
var
   sql_str,str:string;
   i,j:integer;
   term_obj:TTerm;
   //listitem:TListItem;
begin
    //读入所有终端
    members.Clear;
    sql_str:='select * from vterminfo';
    with TcpModule do
    begin
       ADOQuery1.Close;
       ADOQuery1.SQL.Clear;
       ADOQuery1.SQL.Add(sql_str);
       ADOQuery1.Open;
       ADOQuery1.First;
       for i:=0 to ADOQuery1.RecordCount-1 do
       begin
           term_obj:=TTerm.Create;
           term_obj.TER_SEQUENCE:=ADOQuery1.FieldByName('TER_SEQUENCE').AsInteger;
           term_obj.gprs_id:=ADOQuery1.FieldByName('GPRS_ID').AsInteger;
           term_obj.term_id:=ADOQuery1.FieldByName('TER_ID').AsInteger;
           term_obj.app_id:=ADOQuery1.FieldByName('APP_ID').AsInteger;
           term_obj.well_id:=ADOQuery1.FieldByName('WELL_ID').AsInteger;
           term_obj.summit_type:=ADOQuery1.FieldByName('SUMMIT_TYPE').AsInteger;
           term_obj.collect_inteval:=ADOQuery1.FieldByName('COLLECT_INTERVAL').AsInteger;
           term_obj.packet_inteval:=ADOQuery1.FieldByName('SUMMIT_INTERVAL').AsInteger;
           term_obj.remedy_count_max:=ADOQuery1.FieldByName('REMEDY_COUNT').AsInteger;
           if term_obj.summit_type=TEMP_SUMMIT then
              term_obj.second_count:=term_obj.collect_inteval
           else
              term_obj.second_count:=term_obj.packet_inteval;
           term_obj.remedy_cound:=0;
           term_obj.remedy_interval:=REMEDY_SECOND;

           term_obj.send_count:=0;
           term_obj.receive_count:=0;
           term_obj.all_respond_time:=0;
           term_obj.start_time:=now;

           members.Add(term_obj);

          //****************************************************************
          //added for opc Server  2004-11-13 by HF
          if Assigned(GPRS_Intf) then
          begin
            for j:=1 to 36 do
              GPRS_Intf.AddTag(term_obj.well_id,j);
          end;
          //****************************************************************

           ADOQuery1.Next;
       end;
       ADOQuery1.Close;
        //****************************************************************
        //added for opc Server  2004-11-13 by HF
        if Assigned(GPRS_Intf) then
        begin
          GPRS_Intf.ActiveOPC;
        end;
        //****************************************************************

       //form3.add_term_to_listview;
    end;
end;



procedure TTermSet.deal_data(buf:array of char;data_len:byte);
var
    gprs_id:int64;
    term_id:byte;
    task_id:byte;
    term_obj:TTerm;
begin
    task_id:=integer(buf[0]);
    gprs_id:=integer(buf[1]);
    gprs_id:=gprs_id+integer(buf[2]) shl 8;
    gprs_id:=gprs_id+integer(buf[3]) shl 16;
    term_id:=integer(buf[28]);

    case task_id of
        $90:
           begin
               term_obj:=self.find_term(gprs_id,term_id);
               if (term_obj<>nil) and (integer(buf[7])=0) then
                  term_obj.deal_data(buf,data_len);
           end;
        $93:
           begin
               term_obj:=self.find_term(gprs_id,term_id);
               if (term_obj<>nil) and (integer(buf[7])=0) then
                  term_obj.deal_data(buf,data_len);
           end;
    end;
end;

function TTermSet.find_term(gprs_id: integer; term_id: byte): TTerm;
var
    i:integer;
    term_obj:TTerm;
begin
    for i:=0 to members.Count-1 do
    begin
       term_obj:=TTerm(members.Items[i]);
       if (term_obj.gprs_id=gprs_id) and (term_obj.term_id=term_id) then
       begin
           result:=term_obj;
           exit;
       end;
    end;
    result:=nil;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -