ШАГ 1 — инициализация, обработка сигналов
ШАГ 2 Два варианта вычисления погодозависимого графика
ШАГ 3 Работа с насосами (отопления, бойлера)
ШАГ 4 Работа с трехточечным сервоприводом отопления
ШАГ 5 Аварийные ситуации
Для начала надо разобрать логику работы, и что надо делать при аварийных ситуациях. И когда должно приниматься решение, что система в аварийном режиме. В данном случае, я опишу типовую логику. Для начала надо чтобы проверилась аварийная индикация, для этого в шаг INIT закладываем таймер, который задержит начало программы (до этого момента INIT у меня был пустым). Так как сигнал аварии в данном случае инверсный, то надо принудительно перевести все выходы в выключенное состояние. Время таймера в каждом случае выбирается исходя из технологических требований. Для систем отопления есть один момент, который называется гидроударом. Суть этого явления заключается в том что вода сразу не останавливается и содержит энергию движения, поэтому насос отопления, особенно когда они с резервированием, не переключают сразу, а нужна пауза на «успокоение».
Тоже надо сделать и в данном случае, или поддержать насос во включенном состоянии или сделать паузу чтобы не дергать насос (меня устраивают оба варианта). А в данном примере это уже сделано, если помните в насосе есть пауза для включения-выключения насоса отопления. Следовательно когда после снятия сигнала аварии, по схеме принципиальной насос выключится, если не будет сигнала на включение насоса. А в аварийном сигнале так же есть задержка на подачу сигнала авария в 1 минуту, после старта программного цикла.
Теперь коснемся работы смесителей отопления, для случая отопления в аварийной ситуации (тут возможно только в случаях отказа датчиков отопления и наружного воздуха) нам надо открыть смеситель на максимум, а вот для теплого пола такое делать противопоказано. для него лучше всего заблокировать смеситель в текущем положении до устранения аварийной ситуации (для него соответственно это отказ наружного воздуха или датчика контура). Логичные изменения данных утверждений вы встретите в шаге 4 (step4), для смесителей, в шаге 3 (step3), для насоса. Как можно было бы это выполнить для смесителей, но не стал делать. Например в случае аварии любого датчика, выводить в качестве задания, максимальную температуру контура, но в данном случае надо бы задуматься над ресурсом реле.
Обещаю выложить дополнительный пример который ограничивает количество срабатываний и бережет ресурс реле. Просто не хочется усложнять это пример.
Для обработки аварийных ситуаций нет смысла писать отдельный модуль, так как в каждом случае приходится писать свою логику. К тому же реакция на аварийные ситуации «размазана» по программе. В некоторых случаях она заставляет работать (открывает смеситель отопления), в других наоборот принимать безопасное состояние (блокирует работу смесителя теплого пола).
Дополнительный комментарий: Это последний аппаратно независимый ШАГ, далее уже пойдет привязка к железу. Все что было изложено выше и в данном шаге, можно будет включить в любой CoDeSys (пишу под второй, третий непонятно что и когда будет, и как решаться вопросы совместимости со старым железом) совместимый контролер. А после небольшой доработки напильником и на альтернативные платформы (именно поэтому опираюсь на стандартные библиотеки). Главное чтобы был понятен смысл действий. Еще один момент, дополнительные шаги мне кажется более правильным описывать опираясь на этот шаг. Он дает достаточно большую абстракцию относительно аппаратной платформы.
ШАГ 6 Финальная сборка и привязка к ПЛК63
ШАГ 7 Отображение данных




Ответить с цитированием
кому как удобно но меньше 50 дней), и при его использовании погрешность на один такт в сутки, гарантировано перекрывается погрешностью хода часов, кому важно сделать это точно, надо как уже писалось надо выставить фиксированное время цикла запуска и это время вычесть из 24 часов. Например запуск один раз в секунду тогда время сброса соответственно 23 часа 59 минут 59 секунд 