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

📄 checkroutine.c

📁 电力系统中的保护装置全部代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////////////////
//      程序名: BaseCheck.c
//      装置自检及运行自检
/////////////////////////////////////////////////////////////////////////////////////
#include    "BaseVariable.h"

CHECK   DO_Check;                       //开出自检结构体
CHECK   AD_Check;                       //AD自检结构体
CHECK   SET_ZONE_Check;                 //定值区自检结构体
CHECK   PARA_SET_Check;                 //参数自检结构体
CHECK   PRO_SET_Check;                  //定值自检结构体
CHECK   ControlTest_Check;              //控制回路自检结构体
CHECK   Spring_Test_Check;              //弹簧蓄能自检结构体

VOID    TestFailure(CHECK *pCheck);     //自检出错处理
VOID    TestRecovery(CHECK *pCheck);    //自检返回处理  
VOID    THFailure(CHECK *pCheck);     //自检出错处理
VOID    THRecovery(CHECK *pCheck);    //自检返回处理 

UNSIGNED  uADErrorCNT;
/***********************************************************************************/
/*      AD自检初始化                                                               */
/***********************************************************************************/
void  AD_Check_Initialize(CHECK *pCheckIni)          //AD自检结构体初始化
{
        register CHECK *pCheck = pCheckIni;

//ID号
        pCheck->chk_id = CHK_Total_Check;            //AD自检ID号

//SOE
        pCheck->pSOE_name = "A/D出错";            //AD自检出错名称
        pCheck->pSOE_back_name = "A/D出错返回";   //AD自检出错返回名称
        pCheck->SOE_Inf = 197;                       //AD自检出错103规约的INF号

//闭锁保护
        pCheck->closedown = 1;                       //AD自检出错时,闭锁保护
}

/***********************************************************************************/
/*      开出回路自检初始化                                                         */
/***********************************************************************************/
void  DO_Check_Initialize(CHECK *pCheckIni)             //开出自检结构体初始化
{
        register CHECK *pCheck = pCheckIni;

//ID号
        pCheck->chk_id = CHK_Total_Check;            //开出自检ID号

//SOE
        pCheck->pSOE_name = "开出回路出错";          //开出自检出错名称
        pCheck->pSOE_back_name = "开出回路出错返回"; //开出自检出错返回名称
        pCheck->SOE_Inf = 201;                       //开出自检出错103规约的INF号

//闭锁保护
        pCheck->closedown = 1;                       //开出自检出错时,闭锁保护
}

/***********************************************************************************/
/*      定值区号自检初始化                                                         */
/***********************************************************************************/
void  SET_ZONE_Initialize(CHECK *pCheckIni)             //定值区号自检结构体初始化      
{                                                                                
        register CHECK *pCheck = pCheckIni;

//ID号                                                                           
        pCheck->chk_id = CHK_Total_Check;            //定值区号自检ID号              
                                                                                 
//SOE                                                                            
        pCheck->pSOE_name = "定值区号出错";          //定值区号自检出错名称          
        pCheck->pSOE_back_name = "定值区号出错返回"; //定值区号自检出错返回名称      
        pCheck->SOE_Inf = 223;                       //定值区号自检出错103规约的INF号
                                                                                 
//闭锁保护                                                                       
        pCheck->closedown = 1;                       //定值区号自检出错时,闭锁保护   
}

/***********************************************************************************/
/*      参数自检初始化                                                             */
/***********************************************************************************/
void  PARA_SET_Initialize(CHECK *pCheckIni)               //参数自检结构体初始化      
{                                                                                  
        register CHECK *pCheck = pCheckIni;

//ID号                                                                             
        pCheck->chk_id = CHK_Total_Check;              //参数自检ID号              
                                                                                   
//SOE                                                                              
        pCheck->pSOE_name = "EEROM出错";          //参数自检出错名称          
        pCheck->pSOE_back_name = "EEROM出错返回"; //参数自检出错返回名称      
        pCheck->SOE_Inf = 196;                         //参数自检出错103规约的INF号
                                                                                   
//闭锁保护                                                                         
        pCheck->closedown = 1;                         //参数自检出错时,闭锁保护   
}

/***********************************************************************************/
/*      定值自检初始化                                                             */
/***********************************************************************************/
void    PRO_SET_Initialize(CHECK *pCheckIni)            //定值自检结构体初始化      
{                                                                                
        register CHECK *pCheck = pCheckIni;

//ID号                                                                           
        pCheck->chk_id = CHK_Total_Check;            //定值自检ID号              
                                                                                 
//SOE                                                                            
        pCheck->pSOE_name = "定值出错";              //定值自检出错名称          
        pCheck->pSOE_back_name = "定值出错返回";     //定值自检出错返回名称      
        pCheck->SOE_Inf = 222;                       //定值自检出错103规约的INF号
                                                                                 
//闭锁保护                                                                       
        pCheck->closedown = 1;                       //定值自检出错时,闭锁保护   
}

/***********************************************************************************/
/*      控制回路自检初始化                                                         */
/***********************************************************************************/
void    ControlCircuitTest_Initialize(CHECK *pCheckIni) //控制回路自检结构体初始化      
{                                                                                
        register CHECK *pCheck = pCheckIni;

//ID号                                                                           
        pCheck->chk_id = CHK_Total_Check;            //控制回路自检ID号              
                                                                                 
//SOE                                                                            
        pCheck->pSOE_name = "控制回路异常";          //控制回路自检出错名称          
        pCheck->pSOE_back_name = "控制回路异常返回"; //控制回路自检出错返回名称      
        pCheck->SOE_Inf = 203;                       //控制回路自检出错103规约的INF号
}                                                                                
                                                                                 
   
/***********************************************************************************/
/*      弹簧蓄能自检初始化                                                         */
/***********************************************************************************/
void    Spring_Test_Initialize(CHECK *pCheckIni)        //弹簧蓄能自检结构体初始化      
{                                                                                
        register CHECK *pCheck = pCheckIni;

//ID号                                                                           
        pCheck->chk_id = CHK_Total_Check;            //弹簧蓄能自检ID号              
                                                                                 
//SOE                                                                            
        pCheck->pSOE_name = "弹簧未储能";            //弹簧蓄能自检出错名称          
        pCheck->pSOE_back_name = "弹簧未储能返回";   //弹簧蓄能自检出错返回名称      
        pCheck->SOE_Inf = 168;                       //弹簧蓄能自检出错103规约的INF号
}                                                                                
                                                                                 
   
/***********************************************************************************/
/*      自检告警程序                                                               */
/***********************************************************************************/
REPORT    TestReport;
VOID TestFailure(CHECK *pCheckx)                      //自检告警程序
{
    register REPORT    *pRPT;
    register SOE       *pSOE;
    register CHECK     *pCheck = pCheckx;

    Qdj();                                           //启动继电器动作,开放+24V
    Gxj();                                           //驱动告警信号继电器
    if (pCheck->closedown)                           //是否闭锁保护
        Bsj();                                       //闭锁继电器动作

    pCheck->startup_flag = 1;                        //自检启动标志
    pCheck->pickup_flag = 1;                         //自检动作标志

    pRPT = &TestReport;                              //填报告
    pSOE = &pRPT->pro_report_soe;                    //SOE 动作名称
    pSOE->pSOE_name = pCheck->pSOE_name;
    strcpy(pSOE->SOE_name,pCheck->pSOE_name);
    pSOE->SOE_Inf = pCheck->SOE_Inf;                 //103规约INF号
    pSOE->DPI = 2;                                   //动作状态
    READ_DEC_TIME(&pSOE->Year);                      //时间
    pRPT->pro_report_data_number = 0;                //无模拟量数据
    pRPT->pro_report_flag = 1;                       //报告标志
    pRPT->mmi_flag = MMIDISPLAY + MMIPICKUP;         //自动显示
    Fill_Report(pRPT);                               //填到RAM报告区
}


VOID THFailure(CHECK *pCheckx)                      //自检告警程序
{
    register REPORT    *pRPT;
    register SOE       *pSOE;
    register CHECK     *pCheck = pCheckx;

    Qdj();                                           //启动继电器动作,开放+24V
    Gxj();                                           //驱动告警信号继电器
    if (pCheck->closedown)                           //是否闭锁保护
        Bsj();                                       //闭锁继电器动作

    pCheck->startup_flag = 1;                        //自检启动标志
    pCheck->pickup_flag = 1;                         //自检动作标志

    pRPT = &TestReport;                              //填报告
    pSOE = &pRPT->pro_report_soe;                    //SOE 动作名称
    pSOE->pSOE_name = pCheck->pSOE_name;
    strcpy(pSOE->SOE_name,pCheck->pSOE_name);
    pSOE->SOE_Inf = pCheck->SOE_Inf;                 //103规约INF号
    pSOE->DPI = 1;                                   //动作状态
    READ_DEC_TIME(&pSOE->Year);                      //时间
    pRPT->pro_report_data_number = 0;                //无模拟量数据
    pRPT->pro_report_flag = 41;                       //报告标志
    pRPT->mmi_flag = MMIDISPLAY + MMIPICKUP;         //自动显示
    Fill_Report(pRPT);                               //填到RAM报告区
}

/***********************************************************************************/
/*      告警返回程序                                                               */
/***********************************************************************************/
VOID TestRecovery(CHECK *pCheckx)                     //自检返回报告
{
    register UNSIGNED  i;
    register REPORT    *pRPT;
    register SOE       *pSOE;
    register CHECK     *pCheck = pCheckx;

    pCheck->startup_flag = 0;                        //启动标志清0
    pCheck->pickup_flag = 0;                         //动作标志清0

    pRPT = &TestReport;                              //填报告
    pSOE = &pRPT->pro_report_soe;                    //SOE 返回名称
    pSOE->pSOE_name = pCheck->pSOE_back_name;
    strcpy(pSOE->SOE_name,pCheck->pSOE_back_name);
    pSOE->SOE_Inf = pCheck->SOE_Inf;                 //103规约INF号
    pSOE->DPI = 1;                                   //捣回状态
    READ_DEC_TIME(&pSOE->Year);                      //时间
    pRPT->pro_report_data_number = 0;                //无模拟量数据
    pRPT->pro_report_flag = 1;                       //报告标志
    pRPT->mmi_flag = 0;                              //不自动显示
    Fill_Report(pRPT);                               //填到RAM报告区

    pRPT = pReportRVT;                               //将报告区中的动作报告找到,并清动作标志,
    while (pRPT != pReportIN)                        //待到复归时,将该报告置为不自动显示
    {
        pSOE = &pRPT->pro_report_soe;
        if (pSOE->SOE_Inf = pCheck->SOE_Inf)
        {
            pRPT->mmi_flag &= ~MMIPICKUP;
            break;
        }
        else
        {
            if (++pRPT > &ReportRAM[REPORTRAM - 1])
                pRPT = ReportRAM;
        }
    }
}


VOID THRecovery(CHECK *pCheckx)                     //自检返回报告
{
    register UNSIGNED  i;
    register REPORT    *pRPT;
    register SOE       *pSOE;
    register CHECK     *pCheck = pCheckx;

    pCheck->startup_flag = 0;                        //启动标志清0
    pCheck->pickup_flag = 0;                         //动作标志清0

    pRPT = &TestReport;                              //填报告
    pSOE = &pRPT->pro_report_soe;                    //SOE 返回名称
    pSOE->pSOE_name = pCheck->pSOE_back_name;
    strcpy(pSOE->SOE_name,pCheck->pSOE_back_name);
    pSOE->SOE_Inf = pCheck->SOE_Inf;                 //103规约INF号
    pSOE->DPI = 0;                                   //捣回状态
    READ_DEC_TIME(&pSOE->Year);                      //时间
    pRPT->pro_report_data_number = 0;                //无模拟量数据
    pRPT->pro_report_flag = 41;                       //报告标志
    pRPT->mmi_flag = 0;                              //不自动显示
    Fill_Report(pRPT);                               //填到RAM报告区

    pRPT = pReportRVT;                               //将报告区中的动作报告找到,并清动作标志,
    while (pRPT != pReportIN)                        //待到复归时,将该报告置为不自动显示

⌨️ 快捷键说明

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