Аппаратные и программные средства встраиваемых систем


А.2.5.3  Пример использования



Pdf көрінісі
бет250/268
Дата07.01.2022
өлшемі3,23 Mb.
#18255
1   ...   246   247   248   249   250   251   252   253   ...   268
А.2.5.3  Пример использования 
Рассмотрим  более  сложный  пример  практического  использования 
конечных автоматов в программировании 
.
 
Рисунок 102. Конечный автомат, описывающий работу устройства 


 
271 
Данная  диаграмма  состояний  описывает  алгоритм  управления  некоторым 
устройством. 
Как  преобразовать  ее  в  привычный  исходный  текст  на  языке  Си? 
Достаточно  просто.  Для  начала,  заведем  переменную,  в  которой  мы  будем 
держать  состояние  нашего  конечного  автомата.  Сразу  замечу:  переменная 
должна  быть  статической,  т.е.  она  ни  в  коем  случае  не  должна  находиться  в 
регистре процессора или в стеке. 
unsigned char State=0;  // Состояние автомата. 
 
Далее, описываем сам автомат. Переменные Ki – это дискретные выходы. 
Pi – дискретные  входы.  Символом Ti мы  обозначим  значение,  снятое  с 
термодатчика, ti – время. 
Для реализации автомата на языке Си проще и нагляднее воспользоваться 
оператором SWITCH. Каждый CASE является  одним  из  состояний  автомата. 
Переход из состояния в состояние осуществляется путем записи номера нового 
состояния в переменную State.  
switch(State) 
 
 { 
 case 0: // INIT 
  
U2=0; 
  
K11=0; K10=0; K4_2=0; K4=0; 
  
if(START) State=1;  
// Переход в состояние 1 
  
break; 
 case 1: // START 
  
// Читаем температуры T5 и T2 
  
// : 
  
if(STOP) State=5; 
  
if(T2 > (T5+2*dT) ) 
  

  
 
State=2; 
  
 
K11=1; 
  
 
// Установить задержку для таймера t1 
  

  
break; 
 case 2: // ON 
  
// Индицируем текущее состояние системы 
  
// : 
  
if(STOP) State=5; 
 
  
if(t>=300) 
  

  
 
K4_1=1, K4_2=1, K10=1; 
  
  
State=3; 
  

  
break; 
 case 3: //CONTROL 
  
// Выполняем алгоритм управления нашим устройством 
  
// : 
  
if(STOP) State=5; 
 
  
if(T2 < (T5+dT) ) 
  

  
 
K11=0; 


 
272 
  
 
State=4; 
  

  
break; 
 case 4: //OFF 
  
// Индицируем текущее состояние системы 
  
// : 
  
if(STOP) State=5; 
 
  
if(t >=t2) 
  

  
 
K4_1=0, K4-2=0,K10=0; 
  
 
State=1; 
  

  
break; 
 case 5: // STOP 
  
// Останов системы 
  
// : 
  
// Выполнить проверку P3 
  
if(P3==0) 
  

  
 
K4-1=0, K4-2=0, K10=0, U2=0; 
  
 
State=0; 
  

  
break; 
 } 
 
Как  видно  из  рисунка  и  исходного  текста  на  языке C, автомат  может 
находиться  в  шести  состояниях.  Переход  от  состояния  к  состоянию 
осуществляется  после  анализа  условий.  Условия  (показаны  в  квадратных 
скобках на дугах) реализованы оператором IF. Если на дугах указано действие 
(отмечается  символом '/') то  оно  исполняется  внутри IF, в  процессе  перехода. 
Действия,  указанные  внутри  прямоугольников  выполняются  каждый  раз,  при 
попадание в данное состояние. 
Как видно из исходного текста, оператор SWITCH , запущенный один раз 
выполняет  только  один  шаг  конечного  автомата.  Для  того,  чтобы  выполнить 
всю  программу  необходимо  каким-то  образом  повторять  вызов  описанной 
выше  конструкции.  Это  может  быть  выполнено  в  виде  банального  оператора 
цикла WHILE или  более  сложным  способом.  В  частности  автоматы  удобно 
использовать  внутри  обработчиков  прерывания  от  таймера,  т.к.  время 
выполнения  программы  в  таком  случае  достаточно  просто  проанализировать 
[52]. 
В  чем  удобство  использования  конечных  автоматов?  Во-первых, – 
простота  реализации.  Во-вторых,  детерминированность  и,  как  следствие 
детерминированности – тестопригодность.  В  каждый  момент  времени 
выполняется  конкретный  шаг  алгоритма.  Состояние  такого  автомата 
описывается  всего  одной  переменной,  если  известно  состояние  переменной – 
однозначно известен текущий шаг. 
К  сожалению,  автоматные  модели  далеко  не  идеальны.  Самым  крупным 
недостатком автоматной модели является трудность описания сложных систем 
с большим числом состояний.  


 
273 


Достарыңызбен бөлісу:
1   ...   246   247   248   249   250   251   252   253   ...   268




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет