Введение
В данном посте я применю SysML для описания процесса переключения контакта, у которого возможен дребезг при переключении. На основании данного описания я написал программный код.
На мой взгляд достоинством применения SysML является наглядность и возможность продумать большинство деталей до написания кода. А также возможность изложить и согласовать свой алгоритм или идею с другими участниками проекта.
Конкретная задача
Определить положение контакта с учетом дребезга с помощью модуля Beckhoff EL1252 (http://beckhoff.ru/EL1252/).
Возможности и особенности модуля
Модуль позволяет определить время первого (или последнего) переднего и заднего фронта сигнала. Для примера: исходное положение контакта Off. В течении такта (допустим 2 мс) сигнал изменил свой уровень с On на Off несколько раз. Модуль зарегистрирует время первого (или последнего) перехода в зависимости от того, как он настроен. Далее будем считать, что наш модуль настроен на регистрацию первых фронтов.
Обозначения
Обозначение |
Описание |
a_pos_time_52a | переменная хранит значение временной метки и соответствует входу LatchPos0 модуля EL1252. Обновление значения переменной происходит при регистрации первого переднего фронта сигнала на входе модуля |
a_neg_time_52a | переменная хранит значение временной метки и соответствует входу LatchNeg0 модуля EL1252. Обновление значения переменной происходит при регистрации первого заднего фронта сигнала на входе модуля |
ON_52а | переменная соответствует входу Channel 0 Input модуля EL1252. Хранит текущее значение уровня сигнала (1 - ON, 0 - OFF) |
state_52a | переменная, которая хранит положение контакта 52а, с учетом дребезга (1 - ON, 0 - OFF) |
switch_time | переменная хранит время переключения State_52a |
Nmax | Параметр, характеризующий количество тактов в течении которого положение контакта остается неизменным |
Основная часть
Алгоритм определения положения контакта с учетом дребезга
Определим функциональный блок (рисунок 1), задачей которого будет определение положения контакта с учетом дребезга на основании данных pos_time, neg_time, sig_state.
Рисунок 1
Опишем диаграмму состояний (рисунок 2) и диаграмму деятельности (рисунок 3), согласно которым функциональный блок будет выполнять свою задачу.
Рисунок 2
В состояниях «ВКЛ», «ОТКЛ» функциональный блок ожидает выполнения условий для перехода в состояние «ДР». Других действий в данных состояниях функциональный блок не выполняет.
Рисунок 3
Заключение
Данный документ очень хороший и наглядный помошник для программиста, который хочет разобраться с кодом.
Аналогичным образом можно проектировать другие функциональные блоки. На основании уже спроектированных блоков можно создавать другие блоки. На основании созданных блоков можно создавать блоки, которые включают другие блоки, тем самым поднимась на уровень выше в абстракциях.
Прошлые записи
- Перевод - Почему бумага формата А4 имеет размер 297 мм на 210 мм?
- Эволюция веб-приложений. От раздачи статики до Serverless
- Эволюция веб-приложений. От статичного HTML до Single Page Application и Progressive Web Application
- Переезд в Калининград
- Была ли спецоперация на Украине неизбежна?
- О serverless технологии для чатботов
- Свободное время на улучшение блога
- О жизни в Калининграде спустя год
- Продажа гаража из другого города
- В Калининграде спустя полгода
- О Регине Тодоренко и насилии