Просьба не ругаться, не материться, объяснить один раз по этому вопросу подробно, доступно. http://caxapa.ru/241027.html
Мне нужно разобраться с обработкой большого количества дискретных входов. Одна из предварительных подготовок к этому - тема о битовом поле на форуме. Сложность в правильном подходе, понимании работы с этим всем. Будем считать, что есть некое оборудование. На блок ввода приходят датчики, концевики, кнопки, переключатели. Какие-то входы требуют подавление дребезга. Некоторые переключатели - переключают режимы работы оборудования. Интересует вся цепочка происходящая в программе. Начиная со считывания входов и далее до адресатов. Вопрос задан потому что сейчас, из-за нехватки, разрозненности информации все прибивается гвоздями. Например, в одном проекте сделано так: есть переключатель режима "Штатная работа оборудования\встраивание блока управления в цикл работы станка". Штатная - это тупое считывание штатного блока выходов и выдача на эл. магн. клапаны. То есть, от блока выходов отсоединены некоторые выходы и подключены к моему блоку. Критичные исполнительные механизмы подключены через контактные концевики. То есть, в случае чего, есть физический разрыв питания клапанов. Так что критикуйте, пожалуйста, конструктивно. Встраивание - это добавление отсутствующего режима работа. Считывание блока выходов и индуктивных датчиков идет без подавления дребезга. Считывание контактных кнопок, переключателей с подавлением, одна функция на все контактные входы. Как дальше сделано: функция обработки контактных входов проверяет входы на изменение. Подавили дребезг, вычислили какие входы изменены, отправили соответствующее сообщение (например, MSG_MODE_ON\MSG_MODE_OFF). Функция доп. функии станка проверяет сообщения. Пусто, переход на обработчик текущего состояния. Есть сообщение, из таблицы по текущему состоянию перебирает сообщения на совпадение. Есть совпадение, переключается на состояние из таблицы и переходит на соответствующий обработчик состояния. Трудность была в том, что при включении изменений входов нет. Как узнать, какой режим включен? Прибил гвоздями это так: в секции инициализации считываются входы и инвертируются. Соответственно, функция видит изменение входов и производит нужные действия. Поэтому, чтобы не прибивать гвоздями, и не тратить в дальнейшем свое и ваше время, я и прошу вас помочь мне.