3. Табличное задание ца
Из определения автомата Мили следует, что для задания автомата требуется две таблицы: таблица переходов, таблица выходов. В таблице переходов на пересечении столбца Sk и строки Xn ставится состояние Si в которое автомат переходит из состояния Sk под действием сигнала Xn, а в таблице выходов – соответствующий этому переходу выходной сигнал Ym.
Пример:
Автомат Мили (по рис. 2)
1)Таблица переходов
|
S0 |
S1 |
S2 |
S3 |
X0 |
S3 |
S3 |
S2 |
S0 |
X1 |
S2 |
S3 |
S1 |
S2 |
2)Таблица выходов
|
S0 |
S1 |
S2 |
S3 |
X0 |
Y3 |
Y3 |
Y2 |
Y0 |
X1 |
Y2 |
Y3 |
Y1 |
Y2 |
Так как в автомате Мура выходной сигнал зависит, только от состояния, автомат Мура задается одной отмеченной таблицей переходов, в которой каждому ее столбцу приписан, кроме состояния Sk, еще и выходной сигнал Ym, соответствующий этому состоянию.
Пример:
Автомат Мура (по рис. 1)
Таблица переходов
|
Y0 |
Y1 |
Y2 |
Y3 |
S0 |
S1 |
S2 |
S3 |
|
X0 |
S3 |
S3 |
S2 |
S0 |
X1 |
S2 |
S3 |
S1 |
S2 |
3. Реализация автомата Мура в CoDeSys на языке sfc
Программирование на языке SFC ведется с помощью шагов (Action) и переходов (Transition). Переход от одного шага к последующему осуществляется в том случае, если выполняется условие перехода. Например на рисунке ниже: программа перейдет из шага State2 в шаг State1 только в том случае, если выполнится условие x1=TRUE. Пока программа находится внутри очередного шага, код, записанный внутри шага, выполняется в бесконечном цикле. Чтобы добавить код в шаг, нужно нажать на нем двойным щелчком, затем выбрать желаемый язык. Чтобы редактировать условие нужно просто щелкнуть мышью на тексте условия рядом с горизонтальной чертой.
Для вставки новых
шагов (снизу или сверху) используются
значки:
Добавление перехода
Для добавления
альтернативной ветви (слева или справа):
Если нужно
параллельное выполнение ветвей:
Переход без условия
Пример реализации дискретного автомата Мура (по рис. 1) :
Рис. 3 – Дискретный автомат на языке SFC
При построении графической структуры программы следует соблюдать правила:
- при добавлении альтернативной ветви (Alternative branch) сначала должен быть выбран переход, либо часть программы, начинающаяся и заканчивающаяся переходом.
- при добавлении параллельной ветви (Parallel branch) сначала должен быть выбран шаг, либо часть программы, начинающаяся и заканчивающаяся шагом.
- если необходимо сделать разветвление в программе (как на рисунке 3), то следует выбрать нужный переход, добавить к нему альтернативную ветвь . В альтернативной ветви выбрать добавленный переход и нажать: переход без условия . Далее указать имя шага – куда будет выполнен безусловный переход.
Код внутри блоков (или шагов) задается путем двойного нажатия мышью на соотвествующем шаге. Далее следует выбрать язык ST и ввести в каждом шаге код:
S
s0:=TRUE; s1:=FALSE; s2:=FALSE; s3:=FALSE;
S
s0:=FALSE; s1:=TRUE; s2:=FALSE; s3:=FALSE;
S
s0:=FALSE; s1:=FALSE; s2:=TRUE; s3:=FALSE;
S
s0:=FALSE; s1:=FALSE; s2:=FALSE; s3:=TRUE;
Для того, чтобы сигналы не проходили "насквозь" через все условия, то есть для реализации дискретности команд, в программе использована возможность добавления Exit-Action действия. Exit Action – код, выполняющийся один раз при выходе из блока. Entry Action – код, выполняющийся один раз при входе в блок.
Для добавления расширенных функций (Entry Action, Exit Action) необходимо в контекстном меню блока выбрать соответствующий пункт. Далее следует выбрать язык ST и добавить код (в каждый шаг одинаковый):
x0:=FALSE; x1:=FALSE;
О наличии кода в опциях Entry Action или Exit Action свидетельствует крестик в левом или правом нижнем углу шага:
Удалить код (основной, входной или выходной) можно при помощи команды Clear Action/Transition из контекстного меню шага.
