Вт дек 19, 2017 07:20:14
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;
}
Вт дек 19, 2017 08:29:30
uint8_t old_state;
if((parameter > ERROR_VAL) != old_state){
old_state = parameter > ERROR_VAL;
write_to_log(old_state);
}(
Вт дек 19, 2017 11:05:33
я записал без цикла и массивов, но по-моему, идея понятна: вызывать функции логгирования только если состояние изменилось.
uint8_t AC_Norm(void){
//---------- пониженного напряжения это авария---------------
if(GetStatus_web_AC()==AC_ERROR_LOW){
ArgWebLog.id=ERROR_ID_AC_ER_180;
ArgWebLog.status=STATUS_WEB_BAD;
Add_WebLog(ArgWebLog);
//----------
AddBufferStr((unsigned char*)&trap_AC_LOW_ERROR);
//----------
return STATUS_ERROR;
}
//---------- повышенного напряжения это авария---------------
if(GetStatus_web_AC()==AC_ERROR){
ArgWebLog.id=ERROR_ID_AC_ER_256;
ArgWebLog.status=STATUS_WEB_BAD;
Add_WebLog(ArgWebLog);
//----------
AddBufferStr((unsigned char*)&trap_AC_HIGH_ERROR);
//----------
return STATUS_ERROR;
}
return STATUS_NORM;
}
//=========================
uint8_t AC_Error(void){
if(GetStatus_web_AC()==AC_NORM){
ArgWebLog.id=ERROR_ID_AC_NORM;
ArgWebLog.status=STATUS_WEB_GOOD;
Add_WebLog(ArgWebLog);
//----------
AddBufferStr((unsigned char*)&trap_AC_NORM);
//----------
return STATUS_NORM;
}
return STATUS_ERROR;
}
Кстати, у вас ошибка в алгоиртме:
Вт дек 19, 2017 11:12:46
угу, проглядел...pokk писал(а):Не не там с разными значениями сравнение идет
Вт дек 19, 2017 11:37:12