📄 globalvardefs.pas
字号:
unit GlobalVarDefs;
interface
uses
SysUtils, Math;
type
//电子表格操作相关参数
TPara = record
SingTral: Boolean; //单轨为1 双轨为0
RunState: Boolean; //正常状态为1 短路状态为0
rat : Integer; //频率
end;
//电动势测量点相关数据
TDDSInfo = record
PointX : array of Single; //线段左端点垂直距离
PointY : array of Single; //线段左端点垂直距离
Num : Integer; //点数=段数+1
end;
//大地导电率相关数据
TDDLInfo = record
AreaPoint : array of Single; //导电率测点公里数
DDL_Forty : array of Single; //50Hz导电率值
DDL_Eighty : array of Single; //80Hz导电率值
Num : Integer; //测点个数
end;
//牵引变电所相关数据
TBDSInfo = record
beginPoint : array of Single; //起始牵引变电所公里数
EndPoint : array of Single; //终点牵引变电所公里数
GDB_I : array of Single; //供电臂电流
GDB_Is : array of Single; //供电臂短路电流
AveDDL : array of Single; //平均大地导电率
Num : Integer; //变电所段数/供电臂的段数
end;
//通信线路上纵电动势参数
TE_Infor = record
E_w : Integer; //接触网角频率
E_M : Single ; //互感系数
E_l : Single ; //接近段长度
E_I : Single ; //接触网等效牵引电流
E_r : Single ; //供电臂的钢轨屏蔽系数
E_K : Single ; //接近段内磁综合屏蔽系数
end;
//根据供电臂区域和线路重新分段
TNew_Infor = record
StratX : array of Single ; //第一点横坐标
StratY : array of Single ; //第一点纵坐标
EndX : array of Single ; //第二点横坐标
EndY : array of Single ; //第二点纵坐标
Lengthl : array of Single ; //投影长度
AveDDL : array of Single ; //平均大地导电率
Id : array of Single ; //供电臂牵引电流
GDB_Is : array of Single ; //供电臂短路电流
DDS_E : array of Single ; //磁感应电动势
Num : Integer ; //段数
end;
var
rE_Infor : TE_Infor ;
rDDSInfo : TDDSInfo ;
rDDLInfo : TDDLInfo ;
rBDSInfo : TBDSInfo ;
rNew_Infor : TNew_Infor ;
rPara : TPara ;
MainLogoPic :string;
AddRed:Boolean=False;//需要变红曲线标示
StrXUnite:string;//横坐标单位CK DK AK
AddRedValue:Integer; //电动势大于多少时变红
DDSStr : array[1..9] of string = ( //命令名称
'第一点横坐标',
'第一点纵坐标',
'第二点横坐标',
'第二点纵坐标',
'投影长度',
'平均大地导电率',
'供电臂牵引电流',
'供电臂短路电流',
'磁感应电动势'
);
//Excel模板字段
ModeExcel : array[1..11] of string = ( //命令名称
'起点公里数',
'起点垂直距离',
'终点垂直距离',
'线路投影长度',
'大地导电率测点里程',
'导电率50Hz',
'导电率800Hz',
'起始牵引变电所',
'终点牵引变电所',
'供电臂电流',
'供电臂短路电流'
);
Function Get_M1_Data(f:Integer;b:Single;a:Single) :Single;
Function Get_M2_Data(f:Integer;b:Single;a1:Single;a2:Single) :Single;
Function Get_M3_Data(f:Integer;b:Single;a1:Single;a2:Single) :Single;
function Get_I_Single_Data(oj:Single):Single;//单线钢轨屏蔽系数
function Get_I_double_Data(oj:Single):Single;//复线钢轨屏蔽系数
//第j个供区域)内电臂区域(两个牵引变电所之间的的平均大地导电率
function Get_oj_Data(li:array of Single;oi:array of Single;n:Integer):Single;
function Get_PointY(x1:Single;y1:Single;x2:Single;y2:Single;x3:Single):Single;
function Get_PointRedX(x1:Single;y1:Single;x3:Single;y3:Single):Single;
implementation
//(参数1)E_w 在ini中取
//(参数2)==通信线与接触网平行接近时50Hz和80Hz的互感系数___M==
Function Get_M1_Data(f:Integer;b:Single;a:Single) :Single;
Begin Result := 100*ln(1+(600000)/(f*b*a*a));end;
//(参数2)==斜接近时___互感系数___M==
Function Get_M2_Data(f:Integer;b:Single;a1:Single;a2:Single) :Single;
var
x1,x2:Single;
s1,s2:Single;
Begin x1:=8.89/100000*sqrt(f*b)*abs(a1); x2:=8.89/100000*sqrt(f*b)*abs(a2); s1:=98*(x1*ln(1+1922/x1)+4*62*arctan(x1/62)); s2:=98*(x2*ln(1+1922/x2)+4*62*arctan(x2/62)); Result := (s1-s2)/(x1-x2);end;
//(参数2)==交越时___互感系数___M==
Function Get_M3_Data(f:Integer;b:Single;a1:Single;a2:Single) :Single;
var
x1,x2:Single;
s1,s2:Single;
Begin x1:=8.89/100000*sqrt(f*b)*abs(a1); x2:=8.89/100000*sqrt(f*b)*abs(a2); s1:=98*((x1)*ln(1+1922/(x1))+4*62*arctan((x1)/62)); s2:=98*((x2)*ln(1+1922/(x2))+4*62*arctan((x2)/62)); Result := (s1+s2)/(x1+x2);end;
//(参数3从Excel中取,有可能要根据大地导电率等进行分段)
//单线钢轨屏蔽系数 λ
function Get_I_Single_Data(oj:Single):Single;
begin
Result:=0.388+0.0435*log10(oj)+0.0075*power(Log10(oj),2);
end;
//复线钢轨屏蔽系数 λ
function Get_I_double_Data(oj:Single):Single;//复线钢轨屏蔽系数
begin
Result:=0.286+0.0355*log10(oj)+0.0085*power(Log10(oj),2);
end;
//σj第j个供电臂区域(两个牵引变电所之间的区域)内的平均大地导电率
function Get_oj_Data(li:array of Single;oi:array of Single;n:Integer):Single;
var
SumLiOi:Single;
SumOi :Single;
i :Integer;
begin
SumLiOi:=0;
SumOi :=0;
if n=1 then
begin
Result := oi[0];
Exit;
end;
for i:=1 to n-1 do //从1开始是因为要抛弃一点,第一点没有距离值
begin
SumLiOi :=SumLiOi+li[i]*log10(oi[i])/1000;
SumOi :=SumOi+li[i]/1000;
end;
Result :=power(10,SumLiOi/SumOi);
end;
// (参数5 Id)接触网等效牵引电流, 在excel中已给出一个供电臂一个
// 短路状态下 短路电流不需计算,在excel中已给出
//K为接近段内磁综合屏蔽系数(所需参数在ini文件中)
function Get_PointY(x1:Single;y1:Single;x2:Single;y2:Single;x3:Single):Single;
var
y3:Single;
begin
y3:=(x3-x1)*(y2-y1)/(x2-x1)+y1;
Result := y3;
end;
function Get_PointRedX(x1:Single;y1:Single;x3:Single;y3:Single):Single;
var
x2:Single;
begin
x2:=x3-(y3-AddRedValue)*(x3-x1)/(y3-y1);
Result := x2;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -