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

📄 baseai.c

📁 电力系统中的保护装置全部代码
💻 C
📖 第 1 页 / 共 3 页
字号:
    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 + -