Например TDA7294

Форум РадиоКот • Просмотр темы - Отслеживание перехода НОРМА->АВАРИЯ разных параметров
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб апр 20, 2024 11:08:08

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Отслеживание перехода НОРМА->АВАРИЯ разных параметров
СообщениеДобавлено: Вт дек 19, 2017 07:20:14 
Вымогатель припоя

Зарегистрирован: Вт ноя 02, 2010 17:46:37
Сообщений: 574
Рейтинг сообщения: 0
Добрый день, есть несколько разных параметров, температура напряжение и тд.
так вот надо отследить, переход параметра(ов) из Нормы в Аварию и соответственно обратно.
Ну и при аварии это все в журнал занести и тд.
Сделал это так:

Код:
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;
}


Но тут мне не нравиться что в функции T_12_Norm и T_12_Error вызываються постоянно, хотелось бы сделать что бы было более прозрачно, что бы они вызывались чисто при переключению единоразово,но пока вижу что особо это не как не сделаешь.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Отслеживание перехода НОРМА->АВАРИЯ разных параметров
СообщениеДобавлено: Вт дек 19, 2017 08:29:30 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Не очень понял, но по-моему вам чуток изменить алгоритм: вызывать функции логгирования только при изменении состояния:
Код:
uint8_t old_state;
if((parameter > ERROR_VAL) != old_state){
   old_state = parameter > ERROR_VAL;
   write_to_log(old_state);
}(
я записал без цикла и массивов, но по-моему, идея понятна: вызывать функции логгирования только если состояние изменилось.

назначение ваших отдельных функций нормы и ошибки я так и не понял...

Добавлено after 6 minutes 41 second:
Кстати, у вас ошибка в алгоиртме: если GetCurrent_T(T_BAL_12) равно Global_Flash_SettingAllVar.T_BALL_BOT, то это одинаково удровлетворяет обоим ситуациям - и аварии, и норме. потому что у вас в обоих вариантах проверка ведется на или равно

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Отслеживание перехода НОРМА->АВАРИЯ разных параметров
СообщениеДобавлено: Вт дек 19, 2017 11:05:33 
Вымогатель припоя

Зарегистрирован: Вт ноя 02, 2010 17:46:37
Сообщений: 574
Рейтинг сообщения: 0
Цитата:
я записал без цикла и массивов, но по-моему, идея понятна: вызывать функции логгирования только если состояние изменилось.

Да я сначала примерно так же хотел сделать, но потом у меня пошли более сложные функции(точнее пороги) которые я не смог в эту концепцию вписать, так что пришлось извратиться так.
Код:
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;
}

Цитата:
Кстати, у вас ошибка в алгоиртме:

Не не там с разными значениями сравнение идет T_BALL_BOT или T_BALL_TOP.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Отслеживание перехода НОРМА->АВАРИЯ разных параметров
СообщениеДобавлено: Вт дек 19, 2017 11:12:46 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
pokk писал(а):
Не не там с разными значениями сравнение идет
угу, проглядел...

тогда я так понимаю: у вас есть какие-то параметры, для некоторых есть особые проверки на аварию, для других - обычные. вам надо логгировать каждую аварию и возврат к норме. все верно изложил?

применим ООП-подход :)

объявляем структуру "параметр", внутри которой будет адрес функции "особой проверки", помимо значений всяких порогов и т.п. С этого момента все, как я ранее предложил, и как вы ранее пробовали: вызываем функцию проверки параметра, сравниваем её результат с предыдущим, если изменился - логгируем и запоминаем...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Отслеживание перехода НОРМА->АВАРИЯ разных параметров
СообщениеДобавлено: Вт дек 19, 2017 11:37:12 
Вымогатель припоя

Зарегистрирован: Вт ноя 02, 2010 17:46:37
Сообщений: 574
Рейтинг сообщения: 0
Благодарю!! теперь наконец то можно от этих всех функций избавиться, сделать только парочку со сложной проверкой.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y