hidouri
Newbie level 3
hy all
a part of a function (optimize) that manages electrical load shedding according to the state of a source is wroten as following.
even if there is comment , i can't understand the many lines of the code and what is desired to obtain as result.
need help please.
a part of a function (optimize) that manages electrical load shedding according to the state of a source is wroten as following.
even if there is comment , i can't understand the many lines of the code and what is desired to obtain as result.
need help please.
Code:
#define OPTIMIZE_C
/*****************************************************************************
* Header Files included *
*****************************************************************************/
#include "standard.h"
#include "kcg_types.h"
#include "optimize.h"
/* NO IMA OBJECTS FOR SABER SIMULATION */
/*
#include "COD_A653_API_COMMON.h"
#include "conf_processes_const.h"
*/
/*****************************************************************************
* Module Name : Optimize *
* *
* Function : This function finds the best combination of load groups to *
* be shed / reconnected in order to have a power source used *
* at a nominal capacity, without being overloaded or under *
* capacity. *
* *
* Written by : R. MAZO Date : 15-03-2010 *
* *
* Programming Language : C. *
* *
* Nature : Function. *
* *
* Called module : Opt_Shed *
* Opt_Reconnect *
* START *
* *
* *
*****************************************************************************
* MODIFICATION LOG : *
*****************************************************************************
* PR Ref. : *
* Comments : *
* *
*****************************************************************************
*****************************************************************************
* INPUT/OUTPUT VARIABLES : *
*****************************************************************************
* Variable Name : I/O type : *
* *
* TabConfRes PARAM IN *
* TabDeltaI PARAM IN *
* TabPhase PARAM IN *
* TabTopDel PARAM IN *
* TabTopLest PARAM IN *
* TabCdDel PARAM IN *
* TabCdLest PARAM IN *
* TabBarreCh PARAM IN *
* TabCrntCh PARAM IN *
* TabCrntNo PARAM IN *
* TabPriCh PARAM IN *
* TabSPriCh PARAM IN *
* TabRtrCde PARAM IN *
* TabChInsuf PARAM OUT *
* TabCde PARAM OUT *
* OptimizeTimeOut OUT *
* *
*****************************************************************************
*****************************************************************************
* GLOBAL CONSTANTS : *
*****************************************************************************
* Constant Name : *
* *
* OPTIMIZE_PROCESS_NAME *
* NO_ERROR *
* FALSE *
* TRUE *
* GGPCU_MAX *
* MAX_OVL_CHANNELS *
* PHA *
* PHB *
* PHC *
* *
*****************************************************************************
*****************************************************************************
* FUNCTIONAL DESCRIPTION : *
*****************************************************************************/
/*! */
/*! */
/*! - Start the OPTIMIZE aperiodic process used to set Optimize Time Out */
/*! flag after 2ms. */
/*! */
/*! - Initialization of output commands to their previous state */
/*! - Relevant "status_order" of the load (of TabCde) equal to */
/*! the "status_order" computed on the previous cycle (of TabRtrCde). */
/*! */
/*! - For each Power Source (1...7) */
/*! ......... */
/*! */
/*****************************************************************************/
void OPTIMIZE(
/* Comments : Pointer to an array indicating the network */
/* configuration, for each busbar (1..12) */
/* Unit : T_12Source */
/* Range : N/A */
const T_12Source* TabConfRes,
/* Comments : Pointer to an array indicating, for each Power Source, */
/* (1..7) the amount of current to shed or reconnect */
/* (3phase). */
/* Unit : T_7Crnt */
/* Range : N/A */
const T_7Crnt* TabDeltaI,
/* Comments : Pointer to an array indicating, for each Power Source, */
/* the phase to be treated. */
/* Unit : T_7Phase */
/* Range : N/A */
const T_7Phase* TabPhase,
/* Comments : Pointer to a table indicating, for each Power Source, */
/* (1..7) if it is selected for shedding. */
/* Unit : T_7Bool */
/* Range : N/A */
const T_7Bool* TabTopDel,
/* Comments : Pointer to an array indicating, for each Power Source, */
/* (1..7) if it is selected for reconnection. */
/* Unit : T_7Bool */
/* Range : N/A */
const T_7Bool* TabTopLest,
/* Comments : Pointer to an array indicating, for each load */
/* (1..80), if it is selected for shedding. */
/* Unit : T_80Bool */
/* Range : N/A */
const T_80Bool* TabCdDel,
/* Comments : Pointer to an array indicating, for each load */
/* (1..80), if it is selected for reconnection. */
/* Unit : T_80Bool */
/* Range : N/A */
const T_80Bool* TabCdLest,
/* Comments : Pointer to an array indicating, for each load */
/* (1..80), the busbar (1...12) which supplies the load. */
/* Unit : T_80Barre */
/* Range : N/A */
const T_80Barre* TabBarreCh,
/* Comments : Pointer to an array indicating, for each load */
/* (1..80), its current consumption (3 phases). */
/* Unit : T_80Crnt */
/* Range : N/A */
const T_80Crnt* TabCrntCh,
/* Comments : Pointer to an array indicating, for each load (1..80), */
/* its current consumption before shedding */
/* Unit : T_80Crnt */
/* Range : N/A */
const T_80Crnt* TabPreDelCrt,
/* Comments : Pointer to an array indicating, for each load */
/* (1..80), its priority (1..3) . */
/* Unit : T_80Int */
/* Range : N/A */
const T_80Int* TabPriCh,
/* Comments : Pointer to an array indicating, for each load */
/* 1..80) its sub priority (1..3). */
/* Unit : T_80Int */
/* Range : N/A */
const T_80Int* TabSPriCh,
/* Comments : Pointer to an array indicating, for each load */
/* (1..80), its "status_order" computed on the */
/* previous cycle. */
/* Unit : T_80Bool */
/* Range : N/A */
const T_80Bool* TabRtrCde,
/* Comments : Pointer to an array indicating, for each Power Source */
/* (1..7), a status to indicate if there is no */
/* enough sheddable loads. */
/* Unit : T_7Bool */
/* Range : N/A */
T_7Bool* TabChInsuf,
/* Comments : Pointer to an array indicating, for each load */
/* (1..80), the new "status_order" (On, Off) */
/* computed by this function. */
/* Unit : T_80Bool */
/* Range : N/A */
T_80Bool* TabCde)
{
/*****************************************************************************
* LOCAL DATA : *
*****************************************************************************/
/* Comments : Pointer to the shedding status of the current Power Source */
const kcg_bool* TopDel_Ptr;
/* Comments : Pointer to the reconnection status of the current Power Source */
const kcg_bool* TopLest_Ptr;
/* Comments : Pointer to the amount of power to shed/reconnect for the */
/* current Power Source */
const T_Crnt* DeltaI_Ptr;
/* Comments : Pointer to the phase to be treated for the current Power Source*/
const T_Phase* Phase_Ptr;
/* Comments : Nb of overloaded channels treated, max 2 per execution cycle */
kcg_int NbOvlChannels;
/* Comments : Index of the loop that indicates the Power Source to treat */
kcg_int i;
/* NO IMA Return Code FOR SABER SIMULATION */
/*
RETURN_CODE_TYPE rc;
*/
/*****************************************************************************/
/****************************************************************************/
/* Reset the flag indicating that the 2ms maximum optimize computation time */
/* is elapsed. This flag is the main the stop condition in Opt_AlgoBB */
/****************************************************************************/
/* NO OPTIMIZE TIMEOUT FOR SABER SIMULATION */
/* OptimizeTimeOut = FALSE; */
/************************************************************************/
/* Start the process which sets to TRUE the OptimizeTimeOut flag after */
/* 2ms, stopping the whole process if optimization is not yet ended */
/************************************************************************/
/* NO A653 CALLS FOR SABER SIMULATION */
/* START(Process_Data[ELMF_OPTIMIZE_PROCESS].Process_Id,&rc); */
/*****************************************************************/
/* If the process that counts the 2ms could not be started, set */
/* Optimize Time Out flag to TRUE as there is no way to ensure */
/* that optimize will end; so the optimization is not executed */
/*****************************************************************/
/* NO OPTIMIZE TIMEOUT FOR SABER SIMULATION */
/*if (rc != NO_ERROR)
{
OptimizeTimeOut = TRUE;
}*/
NbOvlChannels = 0;
TopDel_Ptr = (kcg_bool*) TabTopDel;
TopLest_Ptr = (kcg_bool*) TabTopLest;
Phase_Ptr = (T_Phase*) TabPhase;
DeltaI_Ptr = (T_Crnt*) TabDeltaI;
/***************************************************************/
/* Initialization of output commands to their previous state */
/* In case of failure of optimize computation, the function */
/* shall return the previous command as new output command (if */
/* no new outputs commands are available). */
/***************************************************************/
/*****************************************************************/
/* Relevant "status_order" of the load (of TabCde) equal to the */
/* "status_order" computed on the previous cycle (of TabRtrCde). */
/*****************************************************************/
/* So, copy orders from previous cycle to new orders */
for (i = 0; i < SHED_LOAD_MAX;i ++)
{
/* The fact that T_80Bool is itself a pointer (array) implies */
/* that concerned elements are kcg_bool** */
(*TabCde)[i] = (*TabRtrCde)[i];
}
/*********************************************/
/* For each Power Source (1..7), check */
/* if there is an overload or under capacity */
/*********************************************/
for (i=0; i<PWR_SRC_MAX; i++)
{
/************************************************/
/* If the Power Source is in overload and not */
/* in under-capacity and the max number of */
/* shedding computations in one execution cycle */
/* is not exceeded */
/************************************************/
if ((*(TopDel_Ptr+i) == TRUE) &&
(*(TopLest_Ptr+i) == FALSE) &&
(NbOvlChannels < MAX_OVL_CHANNELS))
{
/*******************************************************/
/* Determine the phase to be treated (most loaded) and */
/* call the appropriate function on that phase */
/*******************************************************/
switch (*(Phase_Ptr+i))
{
case PHA : /* Phase A */
Opt_Shed (TabConfRes,
i, /* Power Source index */
(DeltaI_Ptr+i)->PhA, /* Amount of current to shed */
PHA, /* Phase to be treated */
TabCdDel,
TabBarreCh,
TabCrntCh,
TabPriCh,
TabSPriCh,
TabChInsuf,
TabCde);
break;
case PHB : /* Phase B */
Opt_Shed (TabConfRes,
i, /* Power Source index */
(DeltaI_Ptr+i)->PhB, /* Amount of current to shed */
PHB, /* Phase to be treated */
TabCdDel,
TabBarreCh,
TabCrntCh,
TabPriCh,
TabSPriCh,
TabChInsuf,
TabCde);
break;
case PHC : /* Phase C */
Opt_Shed (TabConfRes,
i, /* Power Source index */
(DeltaI_Ptr+i)->PhC, /* Amount of current to shed */
PHC, /* Phase to be treated */
TabCdDel,
TabBarreCh,
TabCrntCh,
TabPriCh,
TabSPriCh,
TabChInsuf,
TabCde);
break;
default :
/**********************************************/
/* This should never occur. No shedding is */
/* performed if the Phase is out of range */
/**********************************************/
break;
}
/* One overloaded channel has been treated, indicate it */
NbOvlChannels++;
}
/*******************************************************/
/* Else, If the Power Source is not in overload and */
/* is in under-capacity */
/*******************************************************/
else if ((*(TopDel_Ptr+i) == FALSE) &&
(*(TopLest_Ptr+i) == TRUE))
{
/*******************************************************/
/* Determine the phase to be treated (most loaded) and */
/* call the appropriate function on that phase */
/*******************************************************/
switch (*(Phase_Ptr+i))
{
case PHA : /* Phase A */
Opt_Reconnect(TabConfRes,
i, /* Power Source index */
(DeltaI_Ptr+i)->PhA, /* Amount of current to reconnect */
PHA, /* Phase to be treated */
TabCdLest,
TabBarreCh,
TabPreDelCrt,
TabPriCh,
TabSPriCh,
TabCde);
break;
case PHB : /* Phase B */
Opt_Reconnect(TabConfRes,
i, /* Power Source index */
(DeltaI_Ptr+i)->PhB, /* Amount of current to reconnect */
PHB, /* Phase to be treated */
TabCdLest,
TabBarreCh,
TabPreDelCrt,
TabPriCh,
TabSPriCh,
TabCde);
break;
case PHC : /* Phase C */
Opt_Reconnect(TabConfRes,
i, /* Power Source index */
(DeltaI_Ptr+i)->PhC, /* Amount of current to reconnect */
PHC, /* Phase to be treated */
TabCdLest,
TabBarreCh,
TabPreDelCrt,
TabPriCh,
TabSPriCh,
TabCde);
break;
default :
/**********************************************/
/* This should never occur. No reconnection */
/* is performed if the Phase is out of range */
/**********************************************/
break;
}
}
}
}
Last edited by a moderator: