До настоящего момента система проработала штатно и корректно. За прошедшее время среднеарифметическое потребление электроэнергии составило 1,13 кВт в час а среднеарифметическая полезная тепловая мощность составила 3,69 кВт в час. При этом, по прошествии времени, при нужном стечении обстоятельств система автоматически остановилась и продолжает быть в работе, без ошибок. Во время работы - релё щёлкали, напряжение прыгало и всё такое… То есть - всё работоспособно. Но, проработав без сбоев 4 часа - почему-то не удаётся добиться того, чтобы она без ошибок проработала более 24 ч. Завтра утром посмотрю - не остановится ли за ночь. И какую причину нештатного останова выдаст.
BABOS, спасибо огромное! Вижу что Вы проштудировали мой код. Сегодня уже поздно. Завтра внимательно почитаю. И как следующий этап (при очередной непонятной для меня ошибке в работающем сейчас коде) - залью Ваш вариант. Понаблюдаю (как вариант дальнейшего поиска решений своего вопроса)
Рано или поздно, но в любом случае при написании всяких разных кракозябр для ембедда более менее не шипко глупый кодописатель столкнется с функцией так называемого “диспетчера”. Именно по этой причине появились так называемые RTOS.
Допустим, 1 раз в секунду нужно опросить датчики. 2 раза в секунду обновить дисплей. 10 раз в секунду опросить клавиатуру. И тд.
Ну и по итогу еще и вывести это на выхода реле или поменять ШИМ на таймерах, как угодно.
В любом случае при таком временном разделении функций кода у тебя ничего нигде не “столкнется” лоб - в - лоб.
Абсолютно согласен именно для ардуины. Там миллис и микрос кошмарно реализованы по времени выполнения. Именно на avr, на stm там аппаратные “плюхи” есть улетные.
По сути да, на время обмена все прирывания надо выключАть. Ну ежли уж совсем “ахота перед девачкой выпендрецца” - есть реализация на голых uart прерываниях, кстати = рабочаЯ. Есть на гите.
в первую секунду обрадовался - работает.
А потом заметил - что значения не “моргают” каждые 10 сек. - цикл остановился. Наверное - это и есть “зависло”. Но в последнее время - такого не было.
Получается - от старта до сбоя (“зависания?”) отработала система примерно 9 часов. И вот, наступил “кирдык”. Причём - контроллер не выдал останов по причине некорректных данных от датчиков температуры. Вроде как, в этот раз - датчики именно температуры - ни при чём.
Судя по тренду температуры воды на выходе из теплообменника и судя по подсвеченному значению расхода воды - могу предположить, что примерно в этот момент должно было быть срабатывание реле насоса. Но информация о том, что реле включено - не отображается. Надо разбираться.
Все правильно. Просто код твой написан грубо говоря “как курица лапой”
Такие вещщи как 24/7/365 так не пишутся. Мне вот сразу стало интересно, каким образом ты собрался искать то место в коде, на котором все это дело повисает???
да брось, 10 лет назад я вообще не понимал ничего, тем не менее скидал код который работает с аптаймом порядка этих 10 лет, базу чистил после
миллиона записей, точнее не скажу, не помню…
Почитал чуть внимательнее. BABOS, ещё раз - огромное спасибо. Я даже и представить себе не мог, что кто-то возьмётся вот так, безвозмрздно, потратить время своё. И проверить, “причесать” код. Теперь он стал выглядеть - ну прям, как-то представительно. И честно говоря - у меня сложилось такое впечатление - что теперь Вы, лучше меня самого, разбираетесь (а может и раньше разбирались, может - специалист в этом?) в моей системе. Я имею в виду не просто прогрммиста - а по поводу теплового насоса…
Ну и сразу просьба - если Вы увидели какие-то моменты, где можете дать советы - выскажитесь, пожалуйста. Например - насколько оптимально я распределил 10 секунд цикла. Может, какой-то части выделил слишком мало времени. А может - какой-то части слишком много времени… Например - я замечал, что вырисовывание экрана с графиками насыщенными - бывает занимает до 3 сек. Но я не уверен - контроллер ждёт, пока экран всё отрисует, или без проблем в это время может заниматься следующими задачами…
Какие-то новые вещи у меня вызывают ступор, наподобие
(MistakeTemp[0] > 0) ? CYAN : RED
если бы я сам в этом месте код не прописал изначальный - я бы вообще не понял, что происходит. Понимаю, что скорее всего, здесь моя проблема в том - что не изучил что значат “?” и “:”. Но я читал - что вот с этими “?” и “:” машине легче понимать чем “or”, “and”… Наверное это не аналоги, но может узнаете о чём речь. Есть как бы вариант написания “понятный человеку” (не программисту), а есть - как бы “удобный для контроллера”. Видимо - BABOS написал более удобным для контроллера
Мне одно не понятно: ну вот человек захотел написать “моргало светодиодное” и написал его. Потом он захотел прикрутить к моргалу дисплей и прикрутил. Потом примотал синей изолентой датчик, потом реле и сверху накрыл крышкой с концевиком. вАпрос = что в конечном итоге хотел человек??? Поучиться? Выпендрицца перед “девочкой” или что??? Или просто делать от нефиг???
Софты такого плана пишутся не “совсем влоб” а несколько иначе. Самый простой - это RTOS. Чуть посложнее - тот же “макаронный код” , но с “надзирателем”
Суть “надзирателя” проверять через определенные промежутки времени - не повисли ли “макароны” на ушах. И если повисли = делать что-то в ответ.
Пример: холодильники, стиралки, утюги и тд абсолютно пофиг на любые внешние воздействия. Либо тупо работаем, либо авария с кодом ашибки. ВСЕ!!!
я не смогу))), и не такой я беcкорыстный как вам кажется, я просто знаю к какому ии обратиться за помощью, и потратил очень мало на решение, и не факт что будет работать, но если нет совсем вариантов, то можно и попробовать запустить