Отслеживание перехода НОРМА->АВАРИЯ разных параметров
Добавлено: Вт дек 19, 2017 07:20:14
Добрый день, есть несколько разных параметров, температура напряжение и тд.
так вот надо отследить, переход параметра(ов) из Нормы в Аварию и соответственно обратно.
Ну и при аварии это все в журнал занести и тд.
Сделал это так:
Но тут мне не нравиться что в функции T_12_Norm и T_12_Error вызываються постоянно, хотелось бы сделать что бы было более прозрачно, что бы они вызывались чисто при переключению единоразово,но пока вижу что особо это не как не сделаешь.
так вот надо отследить, переход параметра(ов) из Нормы в Аварию и соответственно обратно.
Ну и при аварии это все в журнал занести и тд.
Сделал это так:
Код: Выделить всё
void poling_error(void){
uint8_t i=0;
for(i=0;i<(MAX_HANDLER_SWITCH+1);i++){
switch(CallBackSwitch[i].mode){
case STATUS_NORM:{
// Вызываеться функция когда парметр в норме
// Ожидание перехода в АВАРИЮ
if(CallBackSwitch[i].CallBack_Norm){
CallBackSwitch[i].mode=CallBackSwitch[i].CallBack_Norm();
}
break;
}
case STATUS_ERROR:{
// Вызываеться функция когда парметр в АВАРИИ
// Ожидание перехода в НОРМУ
if(CallBackSwitch[i].CallBack_Error){
CallBackSwitch[i].mode=CallBackSwitch[i].CallBack_Error();
}
break;
}
}
}
}
Код: Выделить всё
uint8_t T_12_Norm(void){
// текуший статус норма ожидаем перехода в аварию
if(GetCurrent_T(T_BAL_12)>=Global_Flash_SettingAllVar.T_BALL_TOP){
SetStatus(MATCH_ERROR,ST_T12);
//Журнал аварии
ArgWebLog.id=ERROR_ID_T12_BALL_ERROR;
ArgWebLog.status=STATUS_WEB_BAD;
Add_WebLog(ArgWebLog);
//----------------------------------------------------------------
AddBufferStr((unsigned char*)&trap_T_12_ERROR);
//----------------------------------------------------------------
return STATUS_ERROR;
}
if(GetCurrent_T(T_BAL_12)>=Global_Flash_SettingAllVar.T_BALL_BOT){
SetStatus(MATCH_ADMONITION,ST_T12);
}
return STATUS_NORM;
}
//=========================
uint8_t T_12_Error(void){
if(GetCurrent_T(T_BAL_12)<=Global_Flash_SettingAllVar.T_BALL_BOT){
SetStatus(MATCH_NORM,ST_T12);
ArgWebLog.id=ERROR_ID_T12_BALL_NORM;
ArgWebLog.status=STATUS_WEB_GOOD;
Add_WebLog(ArgWebLog);
//----------------------------------------------------------------
AddBufferStr((unsigned char*)&trap_T_12_NORM);
//----------------------------------------------------------------
return STATUS_NORM; // после этого эта функция больше не вызываеться
}
if(GetCurrent_T(T_BAL_12)<=Global_Flash_SettingAllVar.T_BALL_TOP){
SetStatus(MATCH_ADMONITION,ST_T12);
}
return STATUS_ERROR;
}