📄 client.txt
字号:
/认证包函数
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 + -