📄 baseai.c
字号:
p->chl_correlation_channel = 0;
/*-------------------A相电压------------------------*/
p = &AIChn[Ua_Chn];
p->chl_Num = Ua_Chn; //第几通道
p->pchl_device_name = "线路"; //保护名称
p->pchl_name = "A相电压"; //通道名称
p->chl_calculate_style = FUNDAMENTAL; //计算类型:求基波
p->pchl_value_dimension = "V"; //单位
p->chl_calculate_coefficient = PRO_FOURIER_VOLTAGE; //系数
p->chl_scale = fAmendCoeff(Ua_Chn); //矫正系数
p->chl_correlation_channel = 0; //相关通道
p->chl_angle_compensate = fAmendAngle(Ua_Chn); //10us引起的角度偏差
p->chl_angle_compensate_real = cos(p->chl_angle_compensate); //角度补偿实部
p->chl_angle_compensate_imaginary = sin(p->chl_angle_compensate); //角度补偿虚部
p->chl_empty_flag = 1; //置通道使用标志
/*-------------------B相电压-----------------------*/
p = &AIChn[Ub_Chn];
p->chl_Num = Ub_Chn;
p->pchl_device_name = "线路";
p->pchl_name = "B相电压";
p->chl_calculate_style = FUNDAMENTAL;
p->pchl_value_dimension = "V";
p->chl_calculate_coefficient = PRO_FOURIER_VOLTAGE;
p->chl_scale = fAmendCoeff(Ub_Chn);
p->chl_correlation_channel = 0;
p->chl_angle_compensate = fAmendAngle(Ub_Chn);
p->chl_angle_compensate_real = cos(p->chl_angle_compensate);
p->chl_angle_compensate_imaginary = sin(p->chl_angle_compensate);
p->chl_empty_flag = 1;
/*-------------------C相电压-----------------------*/
p = &AIChn[Uc_Chn];
p->chl_Num = Uc_Chn;
p->pchl_device_name = "线路";
p->pchl_name = "C相电压";
p->chl_calculate_style = FUNDAMENTAL;
p->pchl_value_dimension = "V";
p->chl_calculate_coefficient = PRO_FOURIER_VOLTAGE;
p->chl_scale = fAmendCoeff(Uc_Chn);
p->chl_correlation_channel = 0;
p->chl_angle_compensate = fAmendAngle(Uc_Chn);
p->chl_angle_compensate_real = cos(p->chl_angle_compensate);
p->chl_angle_compensate_imaginary = sin(p->chl_angle_compensate);
p->chl_empty_flag = 1;
/*-------------------UX电压-----------------------*/
p = &AIChn[Ux_Chn];
p->chl_Num = Ux_Chn;
p->pchl_device_name = "线路";
p->pchl_name = "UX电压";
p->chl_calculate_style = FUNDAMENTAL;
p->pchl_value_dimension = "V";
p->chl_calculate_coefficient = PRO_FOURIER_VOLTAGE;
p->chl_scale = fAmendCoeff(Ux_Chn);
p->chl_correlation_channel = 0;
p->chl_angle_compensate = fAmendAngle(Ux_Chn);
p->chl_angle_compensate_real = cos(p->chl_angle_compensate);
p->chl_angle_compensate_imaginary = sin(p->chl_angle_compensate);
p->chl_empty_flag = 1;
/*-------------------A相电流-----------------------*/
p = &AIChn[PIa_Chn];
p->chl_Num = PIa_Chn;
p->pchl_device_name = "线路";
p->pchl_name = "A相电流";
p->chl_calculate_style = FUNDAMENTAL;
p->pchl_value_dimension = "A";
p->chl_calculate_coefficient = PRO_FOURIER_CURRENT;
p->chl_scale = fAmendCoeff(PIa_Chn);
p->chl_correlation_channel = 0;
p->chl_angle_compensate = fAmendAngle(PIa_Chn);
p->chl_angle_compensate_real = cos(p->chl_angle_compensate);
p->chl_angle_compensate_imaginary = sin(p->chl_angle_compensate);
p->chl_empty_flag = 1;
/*-------------------B相电流-----------------------*/
p = &AIChn[PIb_Chn];
p->chl_Num = PIb_Chn;
p->pchl_device_name = "线路";
p->pchl_name = "B相电流";
p->chl_calculate_style = FUNDAMENTAL;
p->pchl_value_dimension = "A";
p->chl_calculate_coefficient = PRO_FOURIER_CURRENT;
p->chl_scale = fAmendCoeff(PIb_Chn);
p->chl_correlation_channel = 0;
p->chl_angle_compensate = fAmendAngle(PIb_Chn);
p->chl_angle_compensate_real = cos(p->chl_angle_compensate);
p->chl_angle_compensate_imaginary = sin(p->chl_angle_compensate);
p->chl_empty_flag = 1;
/*-------------------C相电流-----------------------*/
p = &AIChn[PIc_Chn];
p->chl_Num = PIc_Chn;
p->pchl_device_name = "线路";
p->pchl_name = "C相电流";
p->chl_calculate_style = FUNDAMENTAL;
p->pchl_value_dimension = "A";
p->chl_calculate_coefficient = PRO_FOURIER_CURRENT;
p->chl_scale = fAmendCoeff(PIc_Chn);
p->chl_correlation_channel = 0;
p->chl_angle_compensate = fAmendAngle(PIc_Chn);
p->chl_angle_compensate_real = cos(p->chl_angle_compensate);
p->chl_angle_compensate_imaginary = sin(p->chl_angle_compensate);
p->chl_empty_flag = 1;
/*-------------------A相测量电流-----------------------*/
p = &AIChn[MIa_Chn];
p->chl_Num = MIa_Chn;
p->pchl_device_name = "线路";
p->pchl_name = "A相测量电流";
p->chl_calculate_style = FUNDAMENTAL;
p->pchl_value_dimension = "A";
p->chl_calculate_coefficient = MEA_FOURIER_CURRENT;
p->chl_scale = fAmendCoeff(MIa_Chn);
p->chl_correlation_channel = 0;
p->chl_angle_compensate = fAmendAngle(MIa_Chn);
p->chl_angle_compensate_real = cos(p->chl_angle_compensate);
p->chl_angle_compensate_imaginary = sin(p->chl_angle_compensate);
p->chl_empty_flag = 1;
/*-------------------C相测量电流----------------------*/
p = &AIChn[MIc_Chn];
p->chl_Num = MIc_Chn;
p->pchl_device_name = "线路";
p->pchl_name = "C相测量电流";
p->chl_calculate_style = FUNDAMENTAL;
p->pchl_value_dimension = "A";
p->chl_calculate_coefficient = MEA_FOURIER_CURRENT;
p->chl_scale = fAmendCoeff(MIc_Chn);
p->chl_correlation_channel = 0;
p->chl_angle_compensate = fAmendAngle(MIc_Chn);
p->chl_angle_compensate_real = cos(p->chl_angle_compensate);
p->chl_angle_compensate_imaginary = sin(p->chl_angle_compensate);
p->chl_empty_flag = 1;
/*-------------------I0电流----------------------*/
p = &AIChn[PI0_Chn];
p->chl_Num = PI0_Chn;
p->pchl_device_name = "线路";
p->pchl_name = "I0电流";
p->chl_calculate_style = FUNDAMENTAL;
p->pchl_value_dimension = "A";
p->chl_calculate_coefficient = EAR_FOURIER_CURRENT;
p->chl_scale = fAmendCoeff(PI0_Chn);
p->chl_correlation_channel = 0;
p->chl_angle_compensate = fAmendAngle(PI0_Chn);
p->chl_angle_compensate_real = cos(p->chl_angle_compensate);
p->chl_angle_compensate_imaginary = sin(p->chl_angle_compensate);
p->chl_empty_flag = 1;
}
/***********************************************************************************/
/* 模拟量通道结构体初始化 */
/***********************************************************************************/
#pragma DATA_SECTION(uAmendCoeff,".NVRAM1"); //指定补偿系数存储位置
#pragma DATA_SECTION(uAmendAngle,".NVRAM1"); //指定补偿角度存储位置
EEP_SET uAmendCoeff[CHL_Number], //补偿系数
uAmendAngle[CHL_Number]; //补偿角度
float fAmendCoeff(UNSIGNED channel) //取补偿系数
{
float fCoeff;
register float fCo;
LoadUSET((UNSIGNED *)&uAmendCoeff[channel],(UNSIGNED *)&fCoeff);
fCo = fCoeff;
if(fCo > 1.1 || fCo < 0.9) fCo = 1.0; //如果补偿系数越界,取默认值,不再补偿
return(fCo);
}
float fAmendAngle(UNSIGNED channel) //取补偿角度
{
float fAngle;
register float fAn;
LoadUSET((UNSIGNED *)&uAmendAngle[channel],(UNSIGNED *)&fAngle);
fAn = fAngle;
if(fAn > 0.1 || fAn < -0.1) fAn = -0.00055 * (channel - 1); //如果补偿角度越界,取默认值,不再补偿
return(fAn);
}
/***********************************************************************************/
/* 电流突变量元件处理初始化 */
/***********************************************************************************/
UNSIGNED LastSampleIndex;
VOID Delta_I_Initialize(VOID)
{
LastSampleIndex = SampleIndex; //从当前采样点开始判突变量
}
/***********************************************************************************/
/* 电流突变量元件处理 */
/***********************************************************************************/
VOID Delta_I_Routine(VOID)
{
while(LastSampleIndex != SampleIndex) //将上次采样点与当前采样点间的模拟量处理一遍
{
if(IQD.QDB) //已经启动,不再判突变量启动
{
LastSampleIndex = SampleIndex; //刷新判突变量采样点的位置
}
else
{
Delta_I_Handle(LastSampleIndex); //判突变量
if(++LastSampleIndex > AD_OneDataSize - 2) //移动上次采样点的位置
{
LastSampleIndex = 0; //越界处理
}
}
}
}
/***********************************************************************************/
/* 录波初始化 */
/***********************************************************************************/
UNSIGNED DisturbanceRecordChn[] = {PIa_Chn,PIc_Chn,PI0_Chn,Ua_Chn,Ub_Chn,Uc_Chn};
#define DisturbCycle 8 //一共录8个周波
#define DisturbPoint Sample_Point * DisturbCycle //每个通道记录的点数
#define DisturbInRamNumber 3 //RAM中的录波数据记录次数
typedef struct
{
UNSIGNED number; //故障序号
UNSIGNED state; //状态
TIME start_time; //录波时间
float Data[sizeof(DisturbanceRecordChn)][DisturbPoint]; //模拟量数据
}DISTURB;
DISTURB DisturbInRam[DisturbInRamNumber]; //RAM中的录波数据
UNSIGNED uDisturbSourceIndex; //录波源数据下标,对应于采样SampleIndex
UNSIGNED uDisturbDestIndex; //录波目的数据下标,对应于DISTURB中的Data第二个下标
DISTURB *pDisturbInRam = DisturbInRam; //录波指针
DISTURB *pDisturbSave = DisturbInRam; //保存指针
VOID DisturbanceRecord_Initialize(VOID)
{
}
/***********************************************************************************/
/* 录波处理 */
/***********************************************************************************/
VOID DisturbanceRecord_Routine(VOID)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -