 
        
        Лекция 8 Модели состояний и переходов - это частный случай спецификации поведения программ конечными функциями.
Область задания конечной функции (КФ) - конечное множество значений (а область существования – необязательно конечное множество). Простая и наглядная форма задания КФ – таблица с числом входов, равным мощности области задания. Вопрос 1. Так часто представляются эмпирические зависимости, например: K = F ( V ):
- 
	Скорость V м/с 0,05 0,10 0,20 0,50 Коэффициент трения К 0,21 0,24 0,27 0,31 
Частный случай КФ – логическая функция; ей соответствует таблица истинности. Например, логическая функция двух переменных:
- 
	Концевой выключатель F F T T Термореле F T F T Сигнал аварии F T F T 
T (True) означает срабатывание датчика, F (False) – его противоположное (исходное) состояние. Таблица истинности – непроцедурная форма описания алгоритма; ее процедурный эквивалент состоит из последовательности блоков выбора (ветвлений).
Очевидно, что непроцедурная форма нагляднее.
Обобщение – многозначная логика: мощность области значений больше двух. Соответ-ствующая таблица называется таблицей решений (ТР). Аргументы называются условиями, значения функции – решениями. Пример: спецификация программы контроля параметров
насоса с электроприводом:
| Условия | Входное напряжение U < 120 в | N | N | N | N | N | Y | 
| Скорость вращения N < 50 об/с | N | N | Y | N | N | ~ | |
| Температура T > 45 C | Y | N | ~ | Y | N | ~ | |
| Давление P < 1,2 атм. | Y | N | ~ | N | Y | ~ | |
| Решение | A | О | A | О | W | A | |
Здесь Y (Yes) заменяет T, N (No) - F, ~ представляет Y или N - для сокращения числа столбцов. Решение A означает аварию, O - нормальное состояние, W - предупреждение.
Подразумевается, что измерения параметров (условий) периодически обновляются, скажем, раз в сек, и решения вычисляются синхронно с циклом опроса датчиков.
Существуют текстовые нотации для ТР - языки ТР - и трансляторы с них на инструмен-тальные языки программирования. Вопрос 2. ТР удобны для проектирования программ промышленной автоматики, решающих задачи логического управления (напр., светофором), диагностики неисправностей и т. д. Достоинства ТР:
- Наглядность, непроцедурность - понятность непрофессионалам 
- ТР одновременно служит планом тестирования. Вопрос 3. 
Следующее обобщение - недвоичная область задания. Ему соответствует известная дискретная кибернетическая модель - автомат Мура:
	
	 
	 A
	 x1					    y1	      Где:
 x1					    y1	      Где:
x2 y2 X={x1, ... xn} - вектор входов,
... ... Y={y1,... ym}- вектор выходов
xn ym
Входы и выходы интерпретируются как сигналы; на каждом такте работы автомата возбуждается только один вход и генерируется один выход. Эта модель традиционно используется для описания комбинационных логических схем, т.е. схем без памяти. Соответствие для предыдущего примера: Y={A, O, W}, X={x1,..., x16} - 16 возможных комбинаций четырех двоичных значений (условий в языке ТР).
Дальнейшим обобщением является модель с памятью - автомат Мили, или конечный автомат (КА, FSM - Finite State Machine). Преобразование входа в выход зависит от текущего состояния автомата (из конечного множества), т.е. от предыстории; состояние - тоже функция входов. Более интересна асинхронная модель КА, где входы возбуждаются в непредсказуемые моменты времени: входы - это сигналы, а не условия, как в ТР.
  
	A
	 X
- множество входов
			X
- множество входов
	 
 
 S	Y - множество выходов (в т. ч. пустой)
	
         	S	Y - множество выходов (в т. ч. пустой)
	 
	T
	
 si
S - начальное состояние
			si
S - начальное состояние
fy : X  S Y - функция выходов
fs : X  S  S - функция переходов
Т символизирует задержку: от нового состояния будет зависеть реакция на следующий вход. Являясь конечными функциями двух переменных, fy и fs могут быть заданы двумя таблицами или сводной таблицей вида:
| 
 | s1 | s2 | ... | sk | 
| x1 | s11/ y11 | s21/ y21 | ... | sk1/ yk1 | 
| x2 | s12/ y12 | s22/ y22 | ... | sk2/ yk2 | 
| ... | ... | ... | ... | ... | 
| xn | s1n/ y1n | s2n/ y2n | ... | skn/ ykn | 
Более наглядное их изображение - диаграммой состояний и переходов (STD - State-Transition Diagram) - графом, где вершины - состояния - изображаются кружками, а переходы дугами, нагруженными соответствующими входами и выходами. Ячейке таблицы в i строке и j столбце соответствует фрагмент графа:
	 
	si 
	sij 
Наглядность графа выше; степени вершин обычно гораздо меньше n, т.к. многие входы могут не изменять состояния и не вырабатывать никакого выхода.
Пример: модель поведения системы управления роботом. Интерфейс пользователя - пульт управления, схематически изображенный на рис. 8-1.
 
Рис 10-1. Пульт управления роботом
Робот выполняет одну из программ движения, выбранную оператором с помощью переключателя. Спецификация системы управления в нотации языка DARTS (Design Approach Real Time Systems) приведена на рис 8-2. Комментарии к диаграмме:
- Входы, написанные наклонным шрифтом, - внутренние (вырабатываются системой), остальные вызваны действиями человека-оператора 
- Три выхода генерируются автоматом: "Вкл индик РАБ", "Вкл индик АВАР" и "Вык индик РАБ" 
- Состояние, отмеченное * - любое состояние 
Диаграмма успешно заменяет длинное текстовое описание функционирования. Из нее, например, видно, что существуют подготовительный (Запуск) и заключительный (Завершение) этапы работы робота; что переключать программу движения можно только после завершения текущей программы и т.д. В каждом состоянии явно видны возможные действия пользователя. Пути в графе - допустимые маршруты переходов - разрешенные последовательности действий. Вопрос 4.
В то же время алгоритмы работы системы в каждом из состояний не раскрываются - это задача процедурной модели. На самом деле с каждым переходом связан запуск соответствующего программного модуля, именем которого (т.е. выходом) должен быть помечен переход (это опущено в диаграмме, чтобы не загромождать ее). Кроме такой диаграммы, в языке DARTS предусмотрена схема потока данных: датчики  программные модули  исполнительные устройства. Вместе они служат непроцедурной спецификацией контроллера робота.
Два способа программной реализации КА:
- По столбцам таблицы состояний и переходов / выходов: состояние - место в программе, переходы - CASE по входам 
- По строкам: состояние – значение переменной (флажка), прием входа - место в программе, далее CASE по флажкам для данного входа 
