так вот надо отследить, переход параметра(ов) из Нормы в Аварию и соответственно обратно.
Ну и при аварии это все в журнал занести и тд.
Сделал это так:
Код: Выделить всё
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;
}

