Применяем SysML. Дребезг контакта.

Опубликовано 2013-02-03 05:06:06

Введение

В данном посте я применю 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

Заключение

Данный документ очень хороший и наглядный помошник для программиста, который хочет разобраться с кодом.

Аналогичным образом можно проектировать другие функциональные блоки. На основании уже спроектированных блоков можно создавать другие блоки. На основании созданных блоков можно создавать блоки, которые включают другие блоки, тем самым поднимась на уровень выше в абстракциях.