ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
324019
mazur (19.04.2012 04:46 - 18:35, просмотров: 65731)
Просьба не ругаться, не материться, объяснить один раз по этому вопросу подробно, доступно. http://caxapa.ru/241027.html
   Мне нужно разобраться с обработкой большого количества дискретных входов. Одна из предварительных подготовок к этому - тема о битовом поле на форуме. Сложность в правильном подходе, понимании работы с этим всем.
   Будем считать, что есть некое оборудование. На блок ввода приходят датчики, концевики, кнопки, переключатели. Какие-то входы требуют подавление дребезга. Некоторые переключатели - переключают режимы работы оборудования. Интересует вся цепочка происходящая в программе. Начиная со считывания входов и далее до адресатов.  Вопрос задан потому что сейчас, из-за нехватки, разрозненности информации все прибивается гвоздями.
   Например, в одном проекте сделано так: есть переключатель режима "Штатная работа оборудования\встраивание блока управления в цикл работы станка". Штатная - это тупое считывание штатного блока выходов и выдача на эл. магн. клапаны. То есть, от блока выходов отсоединены некоторые выходы и подключены к моему блоку. Критичные исполнительные механизмы подключены через контактные концевики. То есть, в случае чего, есть физический разрыв питания клапанов. Так что критикуйте, пожалуйста, конструктивно.
   Встраивание - это добавление отсутствующего режима работа. Считывание блока выходов и индуктивных датчиков идет без подавления дребезга. Считывание контактных кнопок, переключателей с подавлением, одна функция на все контактные входы. Как дальше сделано: функция обработки контактных входов проверяет входы на изменение. Подавили дребезг, вычислили какие входы изменены, отправили соответствующее сообщение (например, MSG_MODE_ON\MSG_MODE_OFF). Функция доп. функии станка проверяет сообщения. Пусто, переход на обработчик текущего состояния. Есть сообщение, из таблицы по текущему состоянию перебирает сообщения на совпадение. Есть совпадение, переключается на состояние из таблицы и переходит на соответствующий обработчик состояния.
   Трудность была в том, что при включении изменений входов нет. Как узнать, какой режим включен? Прибил гвоздями это так: в секции инициализации считываются входы и инвертируются. Соответственно, функция видит изменение входов и производит нужные действия.
Поэтому, чтобы не прибивать гвоздями, и не тратить в дальнейшем свое и ваше время, я и прошу вас помочь мне.