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

📄 client.txt

📁 国有大中型煤矿在技术装备水平上都有了较大的提高
💻 TXT
📖 第 1 页 / 共 2 页
字号:
/认证包函数  
function GetQualify():string;
//实时数据组包函数
function TRdata_Package(Deel_data:string):string;
//设备信息数据组包函数
function DEVdata_Package(Deel_data:string):string;


//各通信包的组包函数
//1、通信检测报文
procedure Comm_dataPackage();
//2、认证数据报文
procedure Qualify_dataPackage();
//3、数据停止更新报文
procedure DataStop_dataPackage();
//4、实时数据报文
procedure TRdata_dataPackage(DTdata:string);
//5、设备报文
procedure DEVdata_dataPackage(DTdata:string;deel_tp:string;data_tp:string);
//文件打开并存储到Hashtable表中函数
procedure openfile(FileName:string);
//完成hashtable变量数值(values)函数
procedure SetupHt(data:string;tp:string);
//采集设备信息和比较已有设备信息比较
procedure compareSetup();


implementation

{$R *.dfm}



procedure compareSetup();
var
Pos1,Pos2:Integer;//位置变量
deel_type :string;/处理类型代码
data_type :string;/数据类型代码
packgeData,packgeDataall:string;
i,j,k:Integer;//循环变量
//回写文件变量
F: TextFile;
S: string;
str,DateTime:string;
send :boolean;
begin
send :=false;
packgeDataall :='';
for i:=1 to lenDEV do
   begin

       //在CD中没找到,增加
       if '' = CDHt.Get(ArrDEV[i]) then
       begin
           packgeData :=DEVHt.Get(ArrDEV[i]);
           Pos1 :=pos(',',packgeData);
           data_type :=Copy(packgeData,1,Pos1-1);
           deel_type :='0';
           packgeData := Copy(packgeData,Pos1+1,Length(packgeData)-Pos1);
           //认证码
            // Qualify_dataPackage();
           //改造前
           //DEVdata_dataPackage(packgeData,deel_type,data_type);
           //改造后
           packgeDataall :=packgeDataall+deel_type+data_type+packgeData+'$';



       end
       else
       begin
       // 在CD中找到,但不相等,更新
          if CDHt.Get(ArrDEV[i]) <> DEVHt.Get(ArrDEV[i]) then
          begin
             packgeData :=DEVHt.Get(ArrDEV[i]);
             Pos1 :=pos(',',packgeData);
             data_type :=Copy(packgeData,1,Pos1-1);
             deel_type :='1';
             packgeData := Copy(packgeData,Pos1+1,Length(packgeData)-Pos1);
              //认证码
             //Qualify_dataPackage();
             //DEVdata_dataPackage(packgeData,deel_type,data_type);
             //改造后
             packgeDataall :=packgeDataall+deel_type+data_type+packgeData+'$';


            end;
       end;


   end;


    if packgeDataall <> '' then
    begin
       //最后发包
        Qualify_dataPackage();
       DEVdata_dataPackage(packgeDataall,deel_type,data_type);
       packgeDataall :='';

        DateTime:= FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
        Form1.Infor.Lines.add('时间:'+DateTime+'设备加入、更新发包' +'deel_type is '+deel_type);
   end;
      packgeDataall :='';

   for j:=1 to lenCD do
      begin

       //在DEV中没找到,减少的点。删除
        if '' = DEVHt.Get(ArrCD[j]) then
           begin
           packgeData :=CDHt.Get(ArrCD[j]);
           Pos1 :=pos(',',packgeData);
           data_type :=Copy(packgeData,1,Pos1-1);
           deel_type :='2';
           packgeData := Copy(packgeData,Pos1+1,Length(packgeData)-Pos1);
            //认证码
           //Qualify_dataPackage();
            //DEVdata_dataPackage(packgeData,deel_type,data_type);
             //改造后
            packgeDataall :=packgeDataall+deel_type+data_type+packgeData+'$';

           end;
        end;

       if packgeDataall <> '' then
       begin
       //最后发包
        Qualify_dataPackage();
        DEVdata_dataPackage(packgeDataall,deel_type,data_type);

        DateTime:= FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
        Form1.Infor.Lines.add('时间:'+DateTime+'设备删除发包' +'deel_type is '+deel_type);


        packgeDataall :='';
       end;

   // //回写CD.txt和CDht,完成与DEV同步 //////////////////////////////////////
    AssignFile(F, Gdir+'CD.txt');
    Rewrite(F);
    CDHt.Clear();
    for k:=1 to lenDEV do
    begin
    packgeData :=DEVHt.Get(ArrDEV[k]);
    Writeln(F, packgeData);
    str :=  packgeData;
    Pos1 :=pos(',',str);
    str  := Copy(packgeData,Pos1+1,Length(packgeData)-Pos1);
    Pos1 :=pos(',',str);
    str  := Copy(str,1,Pos1-1);
    CDHt.Put(str,packgeData);
    
    end;
    CloseFile(F);
  
// //回写CD.txt和CDht,完成与DEV同步 //////////////////////////////////////

end;

procedure SetupHt(data:string;tp:string);
var
Pos1,Pos2 :Integer;//用于倒手用的数据位
str :string;//临时字符变量
skey :string;//业务主键 ,传感器编号
begin
//开关量(tp = 0)     //模拟量 (tp = 1)
      str :=data;
     //取监测数值
      Pos2 :=pos(',',data);
      skey :=Copy(data,1,Pos2-1);//业务主键
      //哈西变量值
      str :=tp+','+str;
      DevHt.Put(skey,str);
 end;

procedure openfile(FileName:string);
var
  F: TextFile;
  S: string;
  Pos1 :Integer;//用于传感器编码的数据位
  str :string;//临时字符变量
  DateTime:string;
  one:Integer;//滤出第一行计数
  dflog:Integer;//用于判断是模拟量还是开关量的技术器,大于5是模拟量,小于5是开关量
  skey:string;//CD.txt的业务主键
begin
  one := 0;
  RTPackageStr := '$';
  AssignFile(F, FileName);
  try
    Reset(F);
    try
     //如果是配置数据文件则写入到配置HashTable中
     if 0 <> Pos('Dev.txt', FileName) then
     begin
        one :=0;
        dflog :=0;
        while not EOF(F) Do
        begin
          Readln(F, S);
          one := one+1;
          if one > 1 then
          begin
              str := S;
              dflog :=0;
              //判断是模拟量还是开关量,通过计数器
              while  str <> '' do
              begin
                  Pos1:=Pos(',', str);
                  if  Pos1>0 then
                    begin
                    dflog :=dflog+1;
                    str := Copy(str, (Pos1+1), (Length(str)-Pos1));
                    end
                  else
                  break;
                end;
            //开关量
             if dflog < 5 then
             begin
             SetupHt(S,'0');
             Pos1 :=pos(',',S);
             str:=Copy(S,1,Pos1-1);
             lenDEV :=one-1;
             ArrDEV[one-1] :=str;
             end
             //模拟量
             else
             begin
             SetupHt(S,'1');
             Pos1 :=pos(',',S);
             str:=Copy(S,1,Pos1-1);
             lenDEV :=one-1;
             ArrDEV[one-1] :=str;
             end;


          end;
        end;
      end;



     //如果是实时数据文件则完成实时数据组包
     if 0 <> Pos('rtdata.txt', FileName) then
     begin
        one :=0;
        while not EOF(F) Do
        begin
          Readln(F, S);
          one := one+1;
          if one > 1 then
          begin
          RTPackageStr :=RTPackageStr+S +'$';

          end;
        end;
      end;




      //如果是CD数据文件则写入到配置HashTable中
     if 0 <> Pos('CD.txt', FileName) then
     begin
        one :=0;
        while not EOF(F) Do
        begin
          Readln(F, S);
          one :=one +1;
          Pos1 :=pos(',',S);
          str :=Copy(S,Pos1+1,Length(S)-Pos1);
          Pos1 :=pos(',',str);
          skey :=Copy(str,1,Pos1-1);//业务主键
          ArrCD[one] :=skey;
          lenCD :=one;
          CDHt.Put(skey,S);

        end;
      end;



      
      /////////////////////////////////////////////
      //三种情况处理完毕
      /////////////////////////////////////////////



    finally
      CloseFile(F); //important
    end;
  except
    on EInOutError do
      begin
        DateTime:= FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
        Form1.Infor.Lines.add('时间:'+DateTime+'文件读取错误!'+FileName);

      end;
  end;
end;

procedure InitiPackage(tos: string);
begin
TypeofServer :=  tos;
end;

procedure ConfigINI();
var
TconFile      : TIniFile;   //配置文件
begin
TconFile        :=TIniFile.Create(Gdir+'config.ini');
Mk_mc           := TconFile.ReadString('SYSINFO','CoalName','煤矿客户端');
Mk_bm           :=TconFile.ReadString('SYSINFO','CoalId','11111100000');
Sys_code        :=TconFile.ReadString('SYSINFO','Sys_code','000');
Sys_name        :=TconFile.ReadString('SYSINFO','Sys_name','系统');
Com_Interval    :=TconFile.ReadString('SYSINFO','Com_Interval','5000');//通信检测间隔
Data_Interval   :=TconFile.ReadString('SYSINFO','DataInterval','6000');//数据采集发送时间间隔

ServerIp        :=TconFile.ReadString('NETWORK','ServerIP','127.0.0.1');//远程IP地址
ServerPort      :=TconFile.ReadString('NETWORK','ServerPort','8000');//远程端口
RemoteFilePath  :=TconFile.ReadString('NETWORK','RemoteFilePath','E:\data\'); //远程拷贝文件的路径
LocalDataPath   :=TconFile.ReadString('NETWORK','LocalDataPath','D:\data\');  //本地数据存放路径—COPY文本文件的目的路径

end;

procedure DEVdata_dataPackage(DTdata:string;deel_tp:string;data_tp:string);
var
DateTime :string;
DataSend :string;
DataType :string;
Deel_code:string;
begin
//协议号
InitiPackage('0003');
DateTime := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
Deel_code:=deel_tp;
DataType :=data_tp;

//组包协议
DataSend := DataBegin +TypeofServer +Resstr + DateTime +Mk_bm +Qua_code+Sys_code+Deel_code+DataType+rev_str+Mk_mc;

⌨️ 快捷键说明

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