Найти тему

Вытяжка - прога для pixel segnetics.(часть 1)

Задача простая.

Управление вытяжкой по двум датчикам температур (ai_0, ai_1)
Если хотя бы по одному попадаем в диапазон (у каждого свой)
то включаем,
дополнительно введены
принудительный стоп (дискретный вход 1)
принудительный старт (дискретный вход 2)
стоп имеет приоритет (если включен, то пуск невозможен)

Переключение экранов - клавиша F1.
Экран1 - вывод текущего состояния
Экран2 - настройка диапазона датчика 1
Экран3 - настройка диапазона датчика 2

Включение вытяжек распределено на три выхода с задержкой 5 с
выход 0 - включается сразу
выход 1 - через 5 секунд
выход 2 - через 10 секунд

Начнем. Датчики температур. Для них используем макросы из конструктора вентиляций:

Раскроем один, на один уровень

Описание макроса датчика температуры
Описание макроса датчика температуры
-3

Перейдем к составлению программы.

Сначала займемся логикой, а интерфейсом потом.

Сделаем макрос попадания в интервал

-4

Входы:

limit_up - верхний предел (задается в настройках)

te1 - текущая температура

limit_down - нижний предел (задается в настройках)

use - флаг использования (если false, то не включаем)

Основа макроса блок мин-макс

-5

В блоке мин-макс нас интересуют выходы ">max" и "<min". Если находимся в диапазоне, то они оба "0", если хотя бы один "1", то не включаем. Блок "or-not" как раз и выполняет эту операцию, на выход добавляем "И" для отработки флага 'use'.

-6

Это все легко пока, сверху на это надо навесить кнопки, вывод на экран и настройки. Пойдем от простого к сложному.

Макрос включения вентилятора.
Макрос включения вентилятора.

Логика простая, если нет блокировки 'force_stop') и есть хотя бы один сигнал включения, то на выход подаем "1".

Вот как это выглядит в программе

-8

За макросом добавлены задержки (оказалось, что вентиляторов 6, и чтоб снизить пусковые токи, запускаем парами с интервалом 5 с.)

Теперь самое интересное - интерфейс с пользователем. У меня обычно это самая трудоемкая часть программы.

Программа имеет три экрана:

  • первый - вывод температур, состояние вентиляторов, внешняя блокировка есть/нет
  • настройки интервала 1
  • настройки интервала 2

Работу с экранами придется делать стандартными блоками (контроллер не поддерживает смарт)

Блоки для экрана 1
Блоки для экрана 1

Для первого экрана я создал три макроса show_te (2шт) и screen1

SHOW_TE
SHOW_TE

Макрос "SHOW_TE". Выводит температуру датчика, его имя (датчик 1(2)), если датчик в ошибке, то имя сменяет слово "ошибка" раз в секунду.

Входы:

  • alarm_sens - ошибка датчика
  • enable - включить экран
  • sensor - значение температуры с датчика
  • Y - номер строки, куда выводим

Макрос "SCREEN 1"
Макрос "SCREEN 1"

Макрос выводит строчку "вентилятор ВКЛ / ВЫКЛ" (выбор строчки через преобразование BOOL_TO_INT сигнала "fan_work")

И строчку с надписями "внешняя блокировка/принудительно вкл/АВТО". Выбор строки построен на мультиплексорах (достаточно гибко получается)

На самом деле - пока все просто.

Сейчас рассмотрим переходы между экранами. Переключение я сделал максимально просто - нажатие кнопкой F1.

Макрос перехода снаружи
Макрос перехода снаружи

Посмотрим. что у него внутри

Внутренности макроса MENU
Внутренности макроса MENU

Идея в следующем. Если нет редактирования в каком либо окне (входы LOCK), то при нажатии кнопки F1 (вход KEY_SWITCH), сигнал проходит на детектор переднего фронта, фронт увеличивает значение счетчика, счетный выход подключен к демультиплексору, который вывешивает единицу, на выход, который задает счетчик. Этот экран становится активным. При переполнении счетчика - он сбрасывает сам себя и включает первый экран.

Осталось рассмотреть скрины с уставками, в них реализованы функции:

  • вывод и выбор уставки
  • редактирование выбранной уставки
  • блокировка перехода на другой экран во время редактирования
  • Запись в энергонезависимую память

Продолжение

ПРОГА