Вас вопросы безопасности не волнуют?ekochnev, 16 Авг. 19, 09:32Разумеется волнуют. Переделать крейт - нет вопросов, переделывать аппаратную часть модулей уже не хочется. Я эту тему мониторю с момента её рождения. первый вариант автоматики был также повторён, но так и лежит на полке ни разу не побывав в деле. Не хочется, чтобы и LITE повторил туже судьбу.
Ненавязчивая автоматизация ректификационной установки
gol_avto
Доцент
Москва-Серпухов-Анапа
1.4K 473
![](https://cdn.homedistil.ru/th/2010/06/50412.333409.png)
Отв.1640 16 Авг. 19, 10:19
ekochnev
Магистр
Екатеринбург
210 54
Отв.1641 16 Авг. 19, 10:36, через 18 мин
так и лежит на полке ни разу не побывав в делеgol_avto, 16 Авг. 19, 10:19
Соглашусь, это обидно. У первого варианта индикаторы еще достаточно дорогие были, тоже лежат на полке.
У текущего варианта самое дорогое - это микроконтроллер, поэтому его не запаиваю, а ставлю в дешевую панельку. Все остальное стоит копейки. Мне с переделками проще: изготовил новый вариант модуля, переставил на него микроконтроллер со старого, а оставшееся и выбросить не жалко :-)
BogAD
Кандидат наук
Красногорск - Белово
403 184
![](https://cdn.homedistil.ru/th/1708/23/52125.167919.png)
Отв.1642 16 Авг. 19, 10:41, через 5 мин
Не буду цитировать коллег,
Жертва не более чем пафосная.
И 2-х рядный разъем конечно хорошо, но думаю не нужно. Сложности в разводке 2-х рядного, да и 12 шин вполне!
Мой определившийся уже перечень линий по крейту, от шин 220:
1. Power_OFF - по нему малинка получает сигнал от UPSa, что у него заряд батарей достиг пограничного состояния. В моем случае, это делает монитор напряжения на уровень 3,08В (ADM803T, MAX803T, CAT810T). Малинка спокойно делает "shutdown". Это будет полезно не сразу делать shutdown при пропадании напряжения (сигнал от RMS) а чуток подождать (на величину емкости 18650), может напряжение появится и можно спокойно продолжить процесс.
Тут можно подробней почитать https://ph0en1x.net/...own-switch.html
Предусмотрено подключение кнопки, которую можно вынести на законченный корпус - будет удобно гасить систему, не прибегая стандартным способом через интерфейс.
2. GND
3. Zero - тут без вопросов
4. GND
5. SCL - I2C
6. GND
7. SDA - I2C
8. GND
9. RES - Шина reset. По ней ТОЛЬКО Малинка (выбрал порт GPIO4(GPCLK0) на 7pin) будет ресетить все Ардуинки одной командой. Это будет полезна и в случае жесткого зависания какого-нибудь модуля (ресетим сразу все), так и сброса аварийной защелки по шине INT. (об это чуть ниже в п.10)
Это нужно заложить в ПО.
10. INT - шина "безопасности". По ней любой из модулей системы может дать сигнал всем что есть аварийное событие, к примеру пробит симистор, сработал датчик "потоп", сработал датчик паров спирта и т.п. Модуль, который инициировал аварийное событие должен защелкнуть шину подтяжкой к 0 и держать его, пока не будет произведена его перезагрузка, т.к. устранения этих аварийных событий требуется оценка и вмешательство человека. Если мы уверены что все ОК, и аварийное событие устранено, необходимо отпустить шину INT, что можно сделать 2 способами, 1 - передергивание питания по 5 вольтам (а это перезагрузка Малинки). 2 вариант - ресетим все ардуинки одной общей командой с малинки (см.п.9).
Можно подключить внешнюю аварийную "Красную" кнопку с защелкой.
11. Общее питание 5В. Эта шина питает все, включая и саму малинку (через разъем GPIO). Саму шину запитывает UPS, через которого идет питание с БП на 5В. UPS, как и все, сидит на одном из мест крейта. 3.3В я сознательно убрал из шин крейта (не вижу необходимости). А для питания BMPx80, я предусмотрел отдельную "кроватку".
12. GND
Перечень, на мой взгляд, предостаточный и на перспективу дальнейшего развития.
На счет 12В - лишняя заморочка, но ни кто не мешает, сделать отдельные модули для коммутации 12В в гнезда крейта, дело выбора.
Первая конструкция уже успешно трудится в Северобайкальске. Братишка настоял, чтоб я ему подарил. Говорит "еще себе сделаешь, лучше чем было, а мне и так сойдет", упаковали и в транспортную компанию утащили.
Набрал необходимый перечень, приступаю ко 2-му варианту.
Начальная конструкция (схемы, платы) во вложении. Надо остановиться на этом, хотя бы в отношении крейта.
Новая эра под серией 2.х во вложении, вслед за версией ПО Сергея.
Я не кого не принуждаю, выбор за Вами.
Жертва не более чем пафосная.
И 2-х рядный разъем конечно хорошо, но думаю не нужно. Сложности в разводке 2-х рядного, да и 12 шин вполне!
Мой определившийся уже перечень линий по крейту, от шин 220:
1. Power_OFF - по нему малинка получает сигнал от UPSa, что у него заряд батарей достиг пограничного состояния. В моем случае, это делает монитор напряжения на уровень 3,08В (ADM803T, MAX803T, CAT810T). Малинка спокойно делает "shutdown". Это будет полезно не сразу делать shutdown при пропадании напряжения (сигнал от RMS) а чуток подождать (на величину емкости 18650), может напряжение появится и можно спокойно продолжить процесс.
Тут можно подробней почитать https://ph0en1x.net/...own-switch.html
Предусмотрено подключение кнопки, которую можно вынести на законченный корпус - будет удобно гасить систему, не прибегая стандартным способом через интерфейс.
2. GND
3. Zero - тут без вопросов
4. GND
5. SCL - I2C
6. GND
7. SDA - I2C
8. GND
9. RES - Шина reset. По ней ТОЛЬКО Малинка (выбрал порт GPIO4(GPCLK0) на 7pin) будет ресетить все Ардуинки одной командой. Это будет полезна и в случае жесткого зависания какого-нибудь модуля (ресетим сразу все), так и сброса аварийной защелки по шине INT. (об это чуть ниже в п.10)
Это нужно заложить в ПО.
10. INT - шина "безопасности". По ней любой из модулей системы может дать сигнал всем что есть аварийное событие, к примеру пробит симистор, сработал датчик "потоп", сработал датчик паров спирта и т.п. Модуль, который инициировал аварийное событие должен защелкнуть шину подтяжкой к 0 и держать его, пока не будет произведена его перезагрузка, т.к. устранения этих аварийных событий требуется оценка и вмешательство человека. Если мы уверены что все ОК, и аварийное событие устранено, необходимо отпустить шину INT, что можно сделать 2 способами, 1 - передергивание питания по 5 вольтам (а это перезагрузка Малинки). 2 вариант - ресетим все ардуинки одной общей командой с малинки (см.п.9).
Можно подключить внешнюю аварийную "Красную" кнопку с защелкой.
11. Общее питание 5В. Эта шина питает все, включая и саму малинку (через разъем GPIO). Саму шину запитывает UPS, через которого идет питание с БП на 5В. UPS, как и все, сидит на одном из мест крейта. 3.3В я сознательно убрал из шин крейта (не вижу необходимости). А для питания BMPx80, я предусмотрел отдельную "кроватку".
12. GND
Перечень, на мой взгляд, предостаточный и на перспективу дальнейшего развития.
На счет 12В - лишняя заморочка, но ни кто не мешает, сделать отдельные модули для коммутации 12В в гнезда крейта, дело выбора.
А у кого оно уже готово?ekochnev, 16 Авг. 19, 07:38
Первая конструкция уже успешно трудится в Северобайкальске. Братишка настоял, чтоб я ему подарил. Говорит "еще себе сделаешь, лучше чем было, а мне и так сойдет", упаковали и в транспортную компанию утащили.
Набрал необходимый перечень, приступаю ко 2-му варианту.
Начальная конструкция (схемы, платы) во вложении. Надо остановиться на этом, хотя бы в отношении крейта.
Новая эра под серией 2.х во вложении, вслед за версией ПО Сергея.
Я не кого не принуждаю, выбор за Вами.
OldBean
Доцент
Красноярск
1K 1.4K
![](https://cdn.homedistil.ru/th/1610/06/49123.167422.png)
Отв.1643 16 Авг. 19, 10:47, через 6 мин
А у кого оно уже готово?ekochnev, 16 Авг. 19, 07:38
У меня к примеру и не только.gol_avto, 16 Авг. 19, 08:23И у меня тоже есть ;) Вполне работающее в обычных или лабораторных условиях. Я с этим железом уже больше полугода спирт делаю. С железом можно возиться долго и "с аппетитом", но впереди еще много интересной работы, связанной с софтом. Поэтому не хотелось бы отвлекаться на непринципиальные переделки железа. Работает и ладно... Итак разработка уже до неприличия затянулась... :(
1. Апи должен анализировать ошибки и не вываливаться даже на пустой базе.ekochnev, 16 Авг. 19, 07:38В целом и вообще (по жизни) согласен. Но, во-первых, этот api предназначен для тестирования синхронизатора (причем, версии 0.2.0.0) и, возможно, для разработки клиента. Во-вторых, изначально он и не планировался к публикации. И, в-третьих, это не api к редиске вообще, а api к редиске с одновременно работающим lsync. Конечно, по уму, он не должен вываливаться никогда. Но мне просто и в голову не приходило, что его кто-то будет запускать без lsync. Тем более в инструкции честно сказано - сначала запустить lsync.
2. Синхронизатору наверное тоже стоит начать использовать этот апи для единообразия с клиентом по методам работы с данными в базе.ekochnev, 16 Авг. 19, 07:38Мысль хорошая, но, с учетом вышесказанного, не уверен, что нужно так поступить. Во первых, дополнительная "прослойка" между lsync и redis неизбежно ограничит "степени свободы" при разработке lsync, т.к. создание полного api к редиске (самой по себе) не планировалась и, в рамках данного проекта, не планируется. Во-вторых, создание модуля api.py - это побочный продукт экспериментов, связанных с поисками более "дружественного" интерфейса с редиской для непрограммистов. И опять-таки - только в рамках данного проекта. Поэтому он достаточно специфичен и у него очень ограниченный функционал.
И уже давно, ждет только софт.gol_avto, 16 Авг. 19, 08:23Концепция универсального клиента уже (ну наконец-то!!! ;) более-менее сформировалась. Надеюсь, что разработка универсального клиента, пригодного для практической работы, это дело ближайших недель.
BogAD
Кандидат наук
Красногорск - Белово
403 184
![](https://cdn.homedistil.ru/th/1708/23/52125.167919.png)
Отв.1644 16 Авг. 19, 11:12, через 25 мин
9. RES - Шина reset. По ней ТОЛЬКО Малинка (выбрал порт GPIO4(GPCLK0) на 7pin) будет ресетить все Ардуинки одной командой. Это будет полезна и в случае жесткого зависания какого-нибудь модуля (ресетим сразу все), так и сброса аварийной защелки по шине INT. (об это чуть ниже в п.10)BogAD, 16 Авг. 19, 10:41Да, чуть не забыл про будущий аппаратный ватчдог! Ему без шин RESet ни как.
ps перезалил плату. Убрал лишнюю перемычку в крейте.
OldBean
Доцент
Красноярск
1K 1.4K
![](https://cdn.homedistil.ru/th/1610/06/49123.167422.png)
Отв.1645 16 Авг. 19, 12:12
BogAD, я вставил ссылку на Ваш топик с новой версией крейта в свой топик про крейт. Кстати, в гнездо для BMP-шек датчик MS5611 (на платке GY-63) тоже воткнется (при этом у него получится адрес 0x76).
Вот только не могу понять зачем целая линия задействована для выключения малинки (PowerOFF). Может что-то пропустил или невнимательно прочитал?
Вот только не могу понять зачем целая линия задействована для выключения малинки (PowerOFF). Может что-то пропустил или невнимательно прочитал?
BogAD
Кандидат наук
Красногорск - Белово
403 184
![](https://cdn.homedistil.ru/th/1708/23/52125.167919.png)
Отв.1646 16 Авг. 19, 12:21, через 10 мин
Вот только не могу понять зачем целая линия задействована для выключения малинки (PowerOFF). Может что-то пропустил или невнимательно прочитал?OldBean, 16 Авг. 19, 12:12
У меня UPS на 5В будет стоять одном из гнезд в крейта.
Тут я показывал
[сообщение #13305968]
Схема в файлах.
По замыслу, когда аккумулятор высажен до минимума, по Power_Off UPS шлет команду на shutdown
OldBean
Доцент
Красноярск
1K 1.4K
![](https://cdn.homedistil.ru/th/1610/06/49123.167422.png)
Отв.1647 16 Авг. 19, 12:27, через 6 мин
А... Понял, спасибо.
---------------------------
А я в последнее время все больше склоняюсь к покупке небольшого упсика для малинки с монитором и модулями. Не 5-вольтового, а обычного, сетевого.
В этом случае малинка узнает о пропаже сети по датчику RMS и аккуратно завершит работу когда нужно.
---------------------------
А я в последнее время все больше склоняюсь к покупке небольшого упсика для малинки с монитором и модулями. Не 5-вольтового, а обычного, сетевого.
В этом случае малинка узнает о пропаже сети по датчику RMS и аккуратно завершит работу когда нужно.
ekochnev
Магистр
Екатеринбург
210 54
Отв.1648 16 Авг. 19, 12:56, через 29 мин
А я сегодня на ионисторы посматривал тоже с целью обеспечить малинке минуту времени для корректного останова...
BogAD
Кандидат наук
Красногорск - Белово
403 184
![](https://cdn.homedistil.ru/th/1708/23/52125.167919.png)
Отв.1649 16 Авг. 19, 12:59, через 3 мин
А я сегодня на ионисторы посматривал тоже с целью обеспечить малинке минуту времени для корректного останова...ekochnev, 16 Авг. 19, 12:56Я про это думал, даже есть парочка на 1Ф. Ща попробую в крейт присопливить.
ekochnev
Магистр
Екатеринбург
210 54
Отв.1650 16 Авг. 19, 13:05, через 7 мин
BogAD, я вставил ссылку на Ваш топик с новой версией крейта в свой топик про крейт.OldBean, 16 Авг. 19, 12:12
Сергей, там же наверное стоит упомянуть как предупреждение, что это не только крейт, но и все направление целиком альтернативное. Ваши уже опубликованные модули и крейт Александра не совместимы по разводке. Жаль, что вы в своих версиях разбежались: сначала по направлению расположения элементов, а сейчас вообще по группировке сигнальных линий на шине крейта.
BogAD
Кандидат наук
Красногорск - Белово
403 184
![](https://cdn.homedistil.ru/th/1708/23/52125.167919.png)
Отв.1651 16 Авг. 19, 13:58, через 53 мин
Ваши уже опубликованные модули и крейт Александра не совместимы по разводке. Жаль, что вы в своих версиях разбежались: сначала по направлению расположения элементов, а сейчас вообще по группировке сигнальных линий на шине крейта.ekochnev, 16 Авг. 19, 13:05Так получилось... Рисовали практически одновременно, но не совпала "точка зрения".
Последняя редакция по крейту.
Перезалил в топике [сообщение #13564328]
Что изменил: выкроил место под ионистор 1Ф 5,5в. Если не собираетесь ставит, можно воткнуть обычный электролит.
ekochnev
Магистр
Екатеринбург
210 54
Отв.1652 16 Авг. 19, 14:16, через 18 мин
выкроил место под ионистор 1Ф 5,5вBogAD, 16 Авг. 19, 13:58
А он при таком подключении не отправит своим током заряда блок питания в защиту при включении? Скачек тока наверное приличный получится 1 фараду заряжать...
BogAD
Кандидат наук
Красногорск - Белово
403 184
![](https://cdn.homedistil.ru/th/1708/23/52125.167919.png)
Отв.1653 16 Авг. 19, 14:31, через 15 мин
Нет возможности пик тока померить. Но блок питания с индикаций потребляемого тока дает не больше 0,45А при 5В...
Надо пробовать с БП не менее 15Вт, а лучше побольше...
Надо пробовать с БП не менее 15Вт, а лучше побольше...
OldBean
Доцент
Красноярск
1K 1.4K
![](https://cdn.homedistil.ru/th/1610/06/49123.167422.png)
Отв.1654 16 Авг. 19, 14:56, через 26 мин
там же наверное стоит упомянуть как предупреждениеekochnev, 16 Авг. 19, 13:05Упомянул.
Что касается совместимости:
1. На том уровне функционирования железа, который я планировал в самом начале проекта, используются только линии i2c, Zero и Int. Если кому-то вдруг захочется использовать модули с моей разводкой в крейте Александра, то можно изготовить очень простые переходники. И наоборот.
2. После lsysc про конкретную реализацию железа вообще можно забыть. Клиенту все равно какое железо. И есть ли оно там вообще. Хоть программный эмулятор ставь... ;)
3. В модулях МК (по пинам) подключены одинаково (мы это согласовали в свое время, надеюсь ничего не изменилось). Поэтому (по крайней мере для запланированного мною базового функционала) прошивки в модулях Александра можно будет использовать те же самые.
Жаль, что вы в своих версиях разбежались: сначала по направлению расположения элементов, а сейчас вообще по группировке сигнальных линий на шине крейта.ekochnev, 16 Авг. 19, 13:05Ну это, скорее, не ко мне, а к Александру.
Для разработчиков, в отличие от пользователей, форки скорее полезны, чем вредны. В этом случае, как говорил классик, не нужно "фигуру под под костюм подгонять" ;) Естественно, я не буду следовать всем возможным форкам, если они будут появляться здесь на ветке. У меня свои, уже давно поставленные, цели и задачи. Но, конечно, постараюсь их учитывать, по мере возможности, в своих разработках, которые могут пригодиться и там, и там. Ну и, естественно, ставить соответствующие ссылки в своих постах.
ekochnev
Магистр
Екатеринбург
210 54
Отв.1655 16 Авг. 19, 14:58, через 3 мин
Опять же когда блок питания вырубится не будет ли ненужного разряда ионистора через внутреннее сопротивление БП? Как минимум диод Шоттки надо ставить. Как максимум DC/DC преобразователи люди в интернете еще ставят и ток заряда ограничивают.
Есть уже готовые решения, правда совсем недешево. Вот, например, первое что попалось:
https://juice4halt.com/
Есть уже готовые решения, правда совсем недешево. Вот, например, первое что попалось:
https://juice4halt.com/
BogAD
Кандидат наук
Красногорск - Белово
403 184
![](https://cdn.homedistil.ru/th/1708/23/52125.167919.png)
Отв.1656 16 Авг. 19, 15:08, через 10 мин
Не нашел где есть упоминание об высоких токов заряда.
https://303421.selcdn.ru/...05/20140138.pdf
Там химические процессы, смесь конденсатора+аккумулятора.
Ты невнимателен! Посмотри мою схему. Ионистор весит на шине крейта 5В. Эту шину питает UPS, в котором 2 готовых китайских модуля. Один заряжает LiION, другой преобразовывает напряжение с 3.7 (номиналка) до 5В.
На сам UPS подается питание от БП 5В, с током не менее 3А.
По схеме стоят Шотки не только в схеме UPS, но и в модуле DC/DC (LM2577 DC-DC).
По факту он (ионистор) поможет сгладить броски тока при работе малинки, что даст еще немного фору при питании от UPSa.
https://303421.selcdn.ru/...05/20140138.pdf
Там химические процессы, смесь конденсатора+аккумулятора.
Опять же когда блок питания вырубится не будет ли ненужного разряда ионистора через внутреннее сопротивление БП? Как минимум диод Шоттки надо ставить. Как максимум DC/DC преобразователи люди в интернете еще ставят и ток заряда ограничивают.ekochnev, 16 Авг. 19, 14:58
Ты невнимателен! Посмотри мою схему. Ионистор весит на шине крейта 5В. Эту шину питает UPS, в котором 2 готовых китайских модуля. Один заряжает LiION, другой преобразовывает напряжение с 3.7 (номиналка) до 5В.
На сам UPS подается питание от БП 5В, с током не менее 3А.
По схеме стоят Шотки не только в схеме UPS, но и в модуле DC/DC (LM2577 DC-DC).
По факту он (ионистор) поможет сгладить броски тока при работе малинки, что даст еще немного фору при питании от UPSa.
ekochnev
Магистр
Екатеринбург
210 54
Отв.1657 16 Авг. 19, 15:15, через 8 мин
Так после установки ионистора MiniUPS остается? Я думал он ВМЕСТО него должен быть, еще и удивился такому подключению просто напрямую. Я не невнимателен, я не понял достигаемых целей... :-)
По факту он (ионистор) поможет сгладить броски тока при работе малинкиBogAD, 16 Авг. 19, 15:08Имхо для этой задачи 1 Фарада - это через чур, достаточно будет электролита попроще... :-)
BogAD
Кандидат наук
Красногорск - Белово
403 184
![](https://cdn.homedistil.ru/th/1708/23/52125.167919.png)
Отв.1658 16 Авг. 19, 15:20, через 6 мин
3. В модулях МК (по пинам) подключены одинаково (мы это согласовали в свое время, надеюсь ничего не изменилось). Поэтому (по крайней мере для запланированного мною базового функционала) прошивки в модулях Александра можно будет использовать те же самые.OldBean, 16 Авг. 19, 14:56Подтверждаю!
Использование портов GPIO 40pin на Малинке у меня те же, что и у Сергея (ключевые i2c, Zero и Int). Добавлен на 31pin сигнал на Power_Off, на 7pin линия RESet для перезагрузки Ардуин.
Порты Ардуино в модулях абсолютно такие же, кроме модуля HUB (надо переобозвать как у Сергея), где я поставил дополнительный полевой транзистор чтобы дергать питанием на датчиках. Управление транзистором посадил на PB0.
На этом отличие закончились.
OldBean
Доцент
Красноярск
1K 1.4K
![](https://cdn.homedistil.ru/th/1610/06/49123.167422.png)
Отв.1659 18 Авг. 19, 10:37
17.9. Вопросы безопасности варианта LITE
После полугодового срока эксплуатации варианта LITE в реальных процессах ректификации, более-менее сформировались требования не только к архитектуре универсального клиента, но и к безопасности системы.
В целом можно отметить "три источника" :) аварийных ситуаций:
1. Зависание малинки. В реальной работе у меня такого никогда не было, но в "жестких" экспериментах случалось. Linux тоже умеет виснуть. Причем, надежно. Поскольку в варианте LITE планируется использование клиентов "сгенерированных" в том числе и неподготовленными (с точки зрения программирования) пользователями, вероятность фатальных ошибок возрастает. Все "дырки" не заткнешь. Поэтому в этом вопрос пора бы уже принять какие-то меры.
Стандартное и надежное решение этой проблемы - аппаратный watchdog. К счастью, в малинке такой пес уже есть. Никаких дополнительных модулей делать не придется. Примеры реализации watchdog-а на малинке в паре ссылок ниже:
Raspberry Pi. Поднимаем watchdog
Watchdog и Raspberry Pi. Автоматический перезапуск при зависании
Сам еще не пробовал, но у ребят вроде работает... Так что этот вопрос будем считать закрытым.
2. Отказ оборудования.
По сути, отказ оборудования можно разбить на две подгруппы: отказы электроники и отказы "железного железа" ;)
2.1. Отказы электроники.
Все силовые элементы в данной системе работают в "мягких режимах" (их переключение происходит в нуле тока и в нуле сетевого напряжения). При таких условиях уровень наводок невелик. Поэтому все отказы электроники были связаны с работой шины i2c и ошибками в работе программного обеспечения (как малинки, так и прошивок МК модулей). Чаще всего какой-нибудь модуль притягивал шину SDA к низкому уровню и не хотел, по разным причинам, ее отпускать. Как правило проблема решалась за счет перезагрузки модуля.
К сожалению, эта проблема была осознана уже после проектирования и изготовления опытного варианта LITE. Поэтому линия Res (RESET) на общей шине не была предусмотрена. К счастью линий GND было предусмотрено много. Одной из них вполне можно пожертвовать. После некоторых размышлений было принято решение задействовать линию GND, расположенную между линиями SCL и Zero. Изменения на готовых платах модулей минимальны: 1) Отрезать контакт от земляной дорожки и 2) впаять перемычку от пина Reset микроконтроллера к освободившемуся контакту (см. рисунок в приложении).
Со стороны малинки я собираюсь подключить эту линию к 11-ому пину малинки (GPIO_GEN0). ИМХО, использование 7-го пина малинки (GPIO_GPCLK - General Purpose CLock) для этой цели - не очень хорошая идея. Лучше, таки, задействовать пины общего назначения. Напрямую подключать эту линию к малинке нельзя. Она подтянута к 5 В. Есть риск угробить порт малинки. Reset работает в одну сторону. Поэтому, наверное самое простое решение - поставить оптопару. Как, например, реализовано у коллеги BogAD. Потом поставлю. Когда потребуется производить сброс именно от малинки. Ну а пока - от кнопочки. В принципе, задачу выполняет...
Таким образом, расположение сигнальных линий на данный момент таково:
1. Int - аварийная линия связи между модулями, минуя i2c (подтянута на крейте к +3.3В резистором 10кОм).
2. GND - земля
3. Zero - линия для сигнала нуля напряжения сети
4. Res - линия общего сброса всех модулей (19.08.2019: потом сюда вернется GND, а Res будет вместо +3.3В)
5. SCL - линия синхроимпульсов шины i2c (подтянута на малинке к +3.3В резистром 1.8кОм)
6. GND - земля
7. SDA - линия данных шины i2c (подтянута на малинке к +3.3В резистром 1.8кОм)
8. GND - земля
9. +5B - питание 5-вольтовых устройств, расположенных на крейте
10. GND - земля
11. +3.3В - питание 3.3-вольтовых устройств, расположенных на крейте (19.08.2019: потом линия Res будет, таки, перенесена сюда)
12. GND - земля
На данный момент эта опция (общий резет модулей, инициированный маликой) программно еще не реализована. Попробую включить ее в следующий релиз lsync
2.2. Отказы "железа"
Так или инача, но в большинстве случаев информация о таких отказах приходит в систему от датчиков: датчики протечек, термоконтакты, концевики и т.п. На данный момент эта информация получается и обрабатывается малинкой. Но, конечно, есть ненулевая вероятность что одновременно произойдет два отказа: отказ железа и "зависание" малинки (или блокировка шины i2c при живой малике-мастера шины). У меня такого стечения обстоятельств ни разу не было, но мало ли что... Поэтому в архитектуре системы изначально была предусмотрена аппаратная обработка таких "бинарных" отказов.
Для передачи (по системе) информации о таком отказе предназначена линия Int (аппаратное "И"). При появлении на этой шине низкого уровня, в МК каждого контроллера инициируется аппаратное прерывание INT1. В процедуре обработки этого прерывания происходит выключение (обнуление выхода) контроллера. Эта опция уже реализована и будет доступна в следующем релизе прошивок.
Возникает вопрос - а кто установит низкий уровень на линии Int?
Во-первых, это может сделать сам пользователь, первым заметивший аварию ;))) На крейте для этого предусмотрена специальная кнопочка.
Во-вторых, это может сделать сама малинка. Если шина i2c заблокирована, а по уже принятым показаниям датчиков случилась нештатная ситуация, то малинка может тоже воспользоваться линией Int для выключения контроллеров. Эта опция тоже запланирована для включения в следующий релиз lsync.
В-третьих. Теоретически, это может сделать любой контроллер, подключенный к линии Int. Но реализация этих модулей на данный момент такова, что толку от этой опции немного. Это связано с отсутствием датчиков соответствующих аварийных ситуаций в самих контроллерах.
Ну и в-четвертых. Это хабы, к которому подключены соответствующие датчики. Это может быть либо отдельный хаб датчиков, ориентированный на защиту установки, либо хаб, который обслуживает еще и нормальные (рабочие) датчики. Здесь все нюансы будут только в прошивках МК хаба. При инициализации системы, хаб должен принять от малики при каких условиях (и каких датчиках) он должен инициировать аварийную ситуацию (притянуть и удерживать Int на низком уровне). Ну а самой малинке об этом, естественно, расскажет сам клиент :)
Здесь еще много нюансов нужно продумать. Они продумываюся помаленьку. Но, на данный момент, мне кажется, что решение задачи аппаратной защиты установки где-то как раз здесь. Это я про "в-четвертых". Тут в основном программирование. Т.к. по части аппаратной все предусмотрено: и шина Int есть, и возможности подключения к хабу широкого спектра датчиков. Вплоть до обычных контактов. Которые совсем без мозгов. Ну о-о-очень надежные... :)
3. Исчезновение ресурсов.
Под ресурсами здесь понимаются вода и питающая сеть. Вопрос с водой сводится к наличию соответствующих датчиков и к предыдущему пункту. Поэтому остановимся только на сети.
Здесь тоже есть стандартные, простые и готовые решения. Это UPS (ИБП). Вначале я использовал 5-вольтовый UPS, совмещенный с 5-вольтовым источником питания. Но он 2-амперный. Для третьей малинки - это почти на пределе, а для 4-й, которую собираюсь попробовать, уже откровенно мало. Поэтому перешел на обычный, маленький сетевой UPS-ик с USB.
При исчезновении питающей сети, такой UPS будет держать малинку в рабочем состоянии столько, сколько потребуется. Использовать в данной задаче UPS-овый USB, конечно, никакого смысла нет. Об исчезновении напряжения в сети малинка сразу же узнает от датчика RMS и примет адекватные меры по корректному завершению работы. Как оборудования, так и себя...
Предыдущий топик Вернуться к оглавлению Следующий топик
После полугодового срока эксплуатации варианта LITE в реальных процессах ректификации, более-менее сформировались требования не только к архитектуре универсального клиента, но и к безопасности системы.
В целом можно отметить "три источника" :) аварийных ситуаций:
1. Зависание малинки. В реальной работе у меня такого никогда не было, но в "жестких" экспериментах случалось. Linux тоже умеет виснуть. Причем, надежно. Поскольку в варианте LITE планируется использование клиентов "сгенерированных" в том числе и неподготовленными (с точки зрения программирования) пользователями, вероятность фатальных ошибок возрастает. Все "дырки" не заткнешь. Поэтому в этом вопрос пора бы уже принять какие-то меры.
Стандартное и надежное решение этой проблемы - аппаратный watchdog. К счастью, в малинке такой пес уже есть. Никаких дополнительных модулей делать не придется. Примеры реализации watchdog-а на малинке в паре ссылок ниже:
Raspberry Pi. Поднимаем watchdog
Watchdog и Raspberry Pi. Автоматический перезапуск при зависании
Сам еще не пробовал, но у ребят вроде работает... Так что этот вопрос будем считать закрытым.
2. Отказ оборудования.
По сути, отказ оборудования можно разбить на две подгруппы: отказы электроники и отказы "железного железа" ;)
2.1. Отказы электроники.
Все силовые элементы в данной системе работают в "мягких режимах" (их переключение происходит в нуле тока и в нуле сетевого напряжения). При таких условиях уровень наводок невелик. Поэтому все отказы электроники были связаны с работой шины i2c и ошибками в работе программного обеспечения (как малинки, так и прошивок МК модулей). Чаще всего какой-нибудь модуль притягивал шину SDA к низкому уровню и не хотел, по разным причинам, ее отпускать. Как правило проблема решалась за счет перезагрузки модуля.
К сожалению, эта проблема была осознана уже после проектирования и изготовления опытного варианта LITE. Поэтому линия Res (RESET) на общей шине не была предусмотрена. К счастью линий GND было предусмотрено много. Одной из них вполне можно пожертвовать. После некоторых размышлений было принято решение задействовать линию GND, расположенную между линиями SCL и Zero. Изменения на готовых платах модулей минимальны: 1) Отрезать контакт от земляной дорожки и 2) впаять перемычку от пина Reset микроконтроллера к освободившемуся контакту (см. рисунок в приложении).
Со стороны малинки я собираюсь подключить эту линию к 11-ому пину малинки (GPIO_GEN0). ИМХО, использование 7-го пина малинки (GPIO_GPCLK - General Purpose CLock) для этой цели - не очень хорошая идея. Лучше, таки, задействовать пины общего назначения. Напрямую подключать эту линию к малинке нельзя. Она подтянута к 5 В. Есть риск угробить порт малинки. Reset работает в одну сторону. Поэтому, наверное самое простое решение - поставить оптопару. Как, например, реализовано у коллеги BogAD. Потом поставлю. Когда потребуется производить сброс именно от малинки. Ну а пока - от кнопочки. В принципе, задачу выполняет...
Таким образом, расположение сигнальных линий на данный момент таково:
1. Int - аварийная линия связи между модулями, минуя i2c (подтянута на крейте к +3.3В резистором 10кОм).
2. GND - земля
3. Zero - линия для сигнала нуля напряжения сети
4. Res - линия общего сброса всех модулей (19.08.2019: потом сюда вернется GND, а Res будет вместо +3.3В)
5. SCL - линия синхроимпульсов шины i2c (подтянута на малинке к +3.3В резистром 1.8кОм)
6. GND - земля
7. SDA - линия данных шины i2c (подтянута на малинке к +3.3В резистром 1.8кОм)
8. GND - земля
9. +5B - питание 5-вольтовых устройств, расположенных на крейте
10. GND - земля
11. +3.3В - питание 3.3-вольтовых устройств, расположенных на крейте (19.08.2019: потом линия Res будет, таки, перенесена сюда)
12. GND - земля
На данный момент эта опция (общий резет модулей, инициированный маликой) программно еще не реализована. Попробую включить ее в следующий релиз lsync
2.2. Отказы "железа"
Так или инача, но в большинстве случаев информация о таких отказах приходит в систему от датчиков: датчики протечек, термоконтакты, концевики и т.п. На данный момент эта информация получается и обрабатывается малинкой. Но, конечно, есть ненулевая вероятность что одновременно произойдет два отказа: отказ железа и "зависание" малинки (или блокировка шины i2c при живой малике-мастера шины). У меня такого стечения обстоятельств ни разу не было, но мало ли что... Поэтому в архитектуре системы изначально была предусмотрена аппаратная обработка таких "бинарных" отказов.
Для передачи (по системе) информации о таком отказе предназначена линия Int (аппаратное "И"). При появлении на этой шине низкого уровня, в МК каждого контроллера инициируется аппаратное прерывание INT1. В процедуре обработки этого прерывания происходит выключение (обнуление выхода) контроллера. Эта опция уже реализована и будет доступна в следующем релизе прошивок.
Возникает вопрос - а кто установит низкий уровень на линии Int?
Во-первых, это может сделать сам пользователь, первым заметивший аварию ;))) На крейте для этого предусмотрена специальная кнопочка.
Во-вторых, это может сделать сама малинка. Если шина i2c заблокирована, а по уже принятым показаниям датчиков случилась нештатная ситуация, то малинка может тоже воспользоваться линией Int для выключения контроллеров. Эта опция тоже запланирована для включения в следующий релиз lsync.
В-третьих. Теоретически, это может сделать любой контроллер, подключенный к линии Int. Но реализация этих модулей на данный момент такова, что толку от этой опции немного. Это связано с отсутствием датчиков соответствующих аварийных ситуаций в самих контроллерах.
Ну и в-четвертых. Это хабы, к которому подключены соответствующие датчики. Это может быть либо отдельный хаб датчиков, ориентированный на защиту установки, либо хаб, который обслуживает еще и нормальные (рабочие) датчики. Здесь все нюансы будут только в прошивках МК хаба. При инициализации системы, хаб должен принять от малики при каких условиях (и каких датчиках) он должен инициировать аварийную ситуацию (притянуть и удерживать Int на низком уровне). Ну а самой малинке об этом, естественно, расскажет сам клиент :)
Здесь еще много нюансов нужно продумать. Они продумываюся помаленьку. Но, на данный момент, мне кажется, что решение задачи аппаратной защиты установки где-то как раз здесь. Это я про "в-четвертых". Тут в основном программирование. Т.к. по части аппаратной все предусмотрено: и шина Int есть, и возможности подключения к хабу широкого спектра датчиков. Вплоть до обычных контактов. Которые совсем без мозгов. Ну о-о-очень надежные... :)
3. Исчезновение ресурсов.
Под ресурсами здесь понимаются вода и питающая сеть. Вопрос с водой сводится к наличию соответствующих датчиков и к предыдущему пункту. Поэтому остановимся только на сети.
Здесь тоже есть стандартные, простые и готовые решения. Это UPS (ИБП). Вначале я использовал 5-вольтовый UPS, совмещенный с 5-вольтовым источником питания. Но он 2-амперный. Для третьей малинки - это почти на пределе, а для 4-й, которую собираюсь попробовать, уже откровенно мало. Поэтому перешел на обычный, маленький сетевой UPS-ик с USB.
При исчезновении питающей сети, такой UPS будет держать малинку в рабочем состоянии столько, сколько потребуется. Использовать в данной задаче UPS-овый USB, конечно, никакого смысла нет. Об исчезновении напряжения в сети малинка сразу же узнает от датчика RMS и примет адекватные меры по корректному завершению работы. Как оборудования, так и себя...
Предыдущий топик Вернуться к оглавлению Следующий топик