Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Konspekt_lektsy_MPT

.pdf
Скачиваний:
39
Добавлен:
05.06.2015
Размер:
1.59 Mб
Скачать

6.2.Программная реализация автомата

6.2.1.Классическая Switch-технология

При разработке ряда устройств и интеллектуальных датчиков часто возникает проблема создания управляющего устройства. Такое устройство должно быть простым - не сложнее объекта управления, иначе теряется смысл разработки. В настоящее время в качестве такого устройства разработчики чаще всего используют программный автомат, сделанный на базе младших семейств микроконтроллеров, что вполне оправдано по соотношению функционал-стоимость. Однако такое решение требует от разработчика умения программировать микроконтроллеры и корректно верифицировать программы.

В то же время существует и достаточно полно описана технология, позволяющая конвертировать граф автомата в эквивалентную ему программу для программируемых логических контроллеров (ПЛК). Это – так называемая Switch-технология разработки систем управления на базе автоматов, охватывающая процесс спецификации, проектирования, реализации, отладки, верификации, документирования и сопровождения, предложенная А. А. Шалыто в 1991 году.

Существовавшие до нее подходы к алгоритмизации подобных систем базировались либо на понятии «событие» либо на понятии «точка алгоритма». Понятие «событие» предполагает, что вычислительная система находится в пассивном состоянии до наступления внешнего для системы события, после чего выполняются действия, определяемые алгоритмом в качестве реакции на это событие. Понятие «точка алгоритма» подразумевает, что в данной точке алгоритма выполняется заданный алгоритмом набор действий.

71

В Switch-технологии первичным является понятие «состояние», интуитивно близкое по смыслу к понятию «точка алгоритма». В качестве языка описания алгоритмов в этом случае применяются графы переходов. Другими словами, базой для разработки является поведенческая модель управляющего устройства, а не его схемотехника.

Эта технология достаточно хорошо описана в литературе. Однако большинство из описаний четко ориентировано на реализацию технологии на базе оператора Switch языка C.

Например, предположим, что в качестве объекта управления используется клапан с памятью, имеющий два входа (Z1 — закрытие, Z2 — открытие) и два выхода (X3 — закрыт, X4 — открыт). Предположим также, что его открытие и закрытие выполняются в течение трех секунд.

Выберем в качестве модели клапана управляющий автомат, состоящий из автомата Мура и функциональный элемент задержки. При этом автомат Мура описывается графом с четырьмя вершинами и программно реализуется, например, программой, показанной на рисунке 6.14.

 

switch (Y)

{

 

 

case 0:

if (z2)

Y = 1; break;

 

case 1:

if (t[1])

Y = 2; break;

 

case 2:

if (z1)

Y = 3; break;

 

case 3:

if (t[1]}

Y = 0; break;

 

 

 

}

 

 

 

switch (Y)

{

 

 

case 0:

X3=1; X4=0;

reset

_time(1);

break;

case 1:

X3=0; X4=0;

 

_timel(1,3);

break;

case 2:

X3=0; X4=1;

reset

_time(1);

break;

case 3:

X3=0; X4=0;

}

_timel(1,3);

break;

 

 

 

 

Задание номера следующего состояния

Выполняемые

действия

Рис. 6.14 Вариант реализации управляющего автомата клапана.

В показанном примере первый оператор switch реализует выбор номера следующего состояния, а второй определяет действия автомата, выполняемые в данном состоянии. Синхронизация

72

выполняется механизмами ПЛК – каждый проход программы происходит через заданный ПЛК квант времени.

Эта же программа может быть сокращена за счет совмещения операторов switch, правда, в ущерб читабельности. Пример такой сокращенной программы показан на рисунке 6.15.

 

switch (Y)

{

 

 

Задание номера

case 0:

if (z2)

Y = 1;

 

 

 

 

следующего

 

X3=1; X4=0;

reset

_time(1);

break;

case 1:

состояния

if (t[1])

Y = 2;

 

 

 

 

X3=0; X4=0;

 

_timel(1,3);

break;

 

case 2:

if (z1)

Y = 3;

_time(1);

break;

Выполняемые

 

X3=0; X4=1; reset

действия

case 3:

if (t[1]}

Y = 0;

 

 

 

 

X3=0; X4=0;

}

_timel(1,3);

break;

 

 

 

 

 

 

Рис. 6.15 Сокращенный вариант реализации управляющего автомата клапана.

Применение же языка высокого уровня при разработке прикладного программного обеспечения для микроконтроллеров в ряде случаев оказывается неоправданным, особенно в случае требования обеспечения достаточно жесткого реального времени.

Более того, примеры реализации этой технологии для программ на ассемблере, относятся к алгоритмам, которые могут быть преобразованы в более-менее линейную структуру.

Так, например, в книге А. А. Шалыто «Switch-технология. Алгоритмизация и программирование задач логического управления» рассматривается синтез RS – триггера, как автомата, описываемого графом, показанным на рисунке 6.16.

73

Рис. 6.16. Пример графа переходов (рис 14.12 из книги «Switch-технология.

Алгоритмизация и программирование задач логического управления»)

На основании этого графа автор строит 4 варианта программы

на ассемблере, показанные на рисунке 6.17.

М5: CPL

 

z1

M5: CPL

 

z1

M5:

CPL

 

z1

M5:

CPL

 

z1

MOV

c,

z1

MOV

c, z1

 

MOV

c,

z1

 

MOV

c,

z1

ANL

c,

/z2

ANL

c,

/z2

 

ANL

c,

/z2

 

ANL

c.

/z2

ANL

c,

x2

ANL

c, x2

 

JNC

 

Ml

 

JNC

 

M1

JNC

 

M1

JNC

 

M1

 

MOV

c,

xl

 

MOV

c,

x1

SETB

 

z1

SETB

 

z1

 

JNC

 

M2

 

ANL

c,

/x2

CLR

 

z2

M1: CPL

 

z1

 

CPL

 

z1

 

JNC

 

M2

M1: CPL

 

z1

MOV

c, z1

 

SETB

 

z2

 

SETB

 

z2

MOV

c,

z1

ANL

c,

/z2

M2:

MOV

c,

x2

M2:

MOV

c,

x2

ANL

c,

/z2

ANL

c, x1

 

JNC

 

Ml

 

JNC

 

M1

ANL

c,

x1

ANL

c,

/x2

 

SETB

 

z1

 

SETB

 

z1

JNC

 

M2

JNC

 

M2

 

CPL

 

z2

M1:

MOV

C,

z2

CLR

 

z1

SETB

 

z2

M1:

MOV

c,

z2

 

ANL

C,

x4

SETB

 

z2

M2: MOV

c, z2

 

ANL

с,

/z1

 

JNC

 

M3

M2: MOV

c,

z2

ANL

c, x4

 

ANL

c,

X4

 

CLR

 

z2

ANL

c,

/z1

JNC

 

M3

 

JNC

 

M3

M3:

MOV

c,

z1

ANL

c,

x4

CLR

 

z2

 

CLR

 

z1

 

ANL

C,

x3

JNC

 

M3

M3: MOV

c. z1

 

CLR

 

z2

 

JNC

 

M4

CLR

 

z1

ANL

c, x3

M3:

MOV

c,

z1

 

CLR

 

z1

CLR

 

z2

JNC

 

M4

 

ANL

c,

/z2

M4 :

SJMP

 

M5

МЗ: MOV

c,

z1

CLR

 

z1

 

ANL

c,

x3

 

 

 

 

ANL

c,

/z2

M4: SJMP

 

M5

 

JNC

 

M4

 

 

 

 

ANL

c,

x3

 

 

 

 

CLR

 

z1

 

 

 

 

JNC

 

M4

 

 

 

 

CLR

 

z2

 

 

 

 

CLR

 

z1

 

 

 

M4:

SJMP

 

M5

 

 

 

 

CLR

 

z2

 

 

 

 

 

 

 

 

 

 

 

М4: SJMP

 

M5

 

 

 

 

 

 

 

 

 

 

 

Рис. 6.17. Программы, основанные на графе рис.6.16

74

Как видно из приведенного выше примера, методика дает неоднозначные варианты построения программ. Кроме того, восстановить исходный граф по любому из вариантов программы – задача хоть и решаемая, но весьма нетривиальная. К тому же использование автором нестандартных команд (например – команда «ANL c, /x2», в которой, судя по смыслу, символ «/» означает инверсию), наводит на мысль о том, что пример дан в условноупрощенном варианте, не реализуемом на практике.

Кроме того, для разработчика управляющего автомата одной из самых важных задач является синхронизация автомата с объектом управления. Привязка любого из приведенных на рисунке 3 алгоритмов к внешней временной сетке является сама по себе достаточно сложной задачей.

Судя по всему, перед автором технологии такая задача и не стояла, поскольку использовать Switch – технологию автор предполагал в основном на ПЛК, где проблема синхронизации решается аппаратно – путем выделения задаче тайм-слота. Кроме того, такие контроллеры не предназначены для управления быстродействующим оборудованием и реализуют квант реального времени порядка сотни миллисекунд.

6.2.2. Технология построения программы для микроконтроллера по графу автомата

Для устранения перечисленных выше проблем я предлагаю собственную технологию построения программы по графу автомата. Предлагаемая технология позволяет достаточно быстро реализовать на языке ассемблера практически любого микроконтроллера автомат с заданным (или разработанным) графом, не предъявляя высоких требований к квалификации программиста. Кроме того, предлагаемая технология априори исключает некоторые ошибки, которые могут

75

возникнуть при применении Switch-технологии на языке C – появление в переменной, отвечающей за номер состояния автомата, значения, выходящего за пределы, и других.

Предлагаемая технология сводится к следующему упорядоченному набору действий:

1.Все вершины графа нумеруются. Порядок нумерации – не критичен;

2.Граф переносится в программу. Для этого создается структура, состоящая из:

-метки, связанной с номером состояния графа. Обычно это структура, состоящая из как минимум одного символа и цифры, совпадающей с номером вершины;

-тела вершины, в котором формируются выходные сигналы, соответствующие данной вершине графа;

-блока переходов, в котором проверяются условия перехода на другую вершину и, при обнаружении выполнения условия, выполняется переход. Анализ условий расставляется в соответствии с приоритетами переходов. В случае, если ни одно из условий не выполнено, осуществляется переход на начало блока.

3.Порядок размещения таких структур – произвольный.

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

Реализацию предложенной технологии проще всего показать на конкретном примере. В качестве примера возьмем граф, показанный на рисунке 6.13 и пронумеруем его вершины. Результат показан на рисунке 6.18.

76

Рис. 6.18. Граф рис.6.16 с пронумерованными вершинами.

Применив к графу рис. 6.18 описанную выше технологию, получим следующую программу:

 

.org

0

 

 

jmp

start

 

 

; таблица векторов прерываний

 

.org

100h

 

 

; описание входных и выходных

 

сигналов

 

 

start:

; инициализация устройств

 

SJMP

s00

 

 

; Вершина 0

 

 

s00:

CLR

z1

 

 

CLR

z2

 

j00:

JB

x1,

s01

 

JB

x2,

s02

 

SJMP

j00

 

;Вершина 1

 

 

s01:

CLR

z1

 

 

SETB

z2

 

j01:

JB

x4,

s00

 

SJMP

j01

 

;Вершина 2

 

 

s02:

SETB

z1

 

 

CLR

z2

 

j02:

JB

x3,

s00

 

SJMP

j02

 

; Конец программы

 

 

 

.end

start

 

Рис. 6.19. Программа, синтезированная по графу рис. 6.18.

77

По функционалу синтезированная программа ничем не уступает программам, полученным с помощью Switch-технологии (рис. 4), а по объему кода и читаемости – очевидно выигрывает.

Однако тактовая частота автомата, синтезированного по предлагаемой технологии является плавающей – время нахождения в каждом из состояний есть величина переменная, зависящая от количества действий, выполняемых в каждом из состояний и количества анализируемых условий переходов. Для большинства применений это вполне допустимо. Однако, если техническими требованиями на разработку регламентирована конкретная тактовая частота, то проблема может быть решена с помощью встроенного в микроконтроллер таймера. При этом изменения в программе незначительны и сводятся к проверке факта срабатывания таймера к начале блока выполнения переходов. Пример такого варианта реализации показан на рисунке 6.20.

;Вершина 2

 

 

 

s02:

SETB

z1

 

 

CLR

z2

 

j02:

JNB

TF0,

j02

 

CLR

TF0

 

 

JB

x3,

s00

 

SJMP

j02

 

 

 

 

Рис. 6.20 Фрагмент программы, синтезированной по графу рис. 6.18 с синхронизацией по таймеру T0.

В ряде случаев техническое задание требует синхронизовать автомат с внешним источником тактовой частоты. В этом случае проверка таймера может быть заменена на простой алгоритм обнаружения фронта внешнего сигнала – как показано на рисунке

6.21.

78

;Вершина 2

 

 

 

s02:

SETB

z1

 

 

CLR

z2

 

j02:

JNB

P2.3,

j02

d02:

JB

P2.3,

d02

 

JB

x3,

s00

 

SJMP

j02

 

 

 

 

Рис. 6.21. Фрагмент программы, синтезированной по графу рис. 6.18 с синхронизацией по внешнему сигналу, подключенному к 3 биту порта Р2.

Вторая команда в блоке проверки синхросигнала (метка d02) необходима для исключения ложных срабатываний. Фактически, в данном примере, для перехода в следующее состояние автомату необходимо засечь положительный фронт внешнего синхросигнала, а собственно переход происходит в момент регистрации отрицательного фронта.

Таким образом, разработанная авторами технология синтеза программных автоматов не только не уступает классической Switchтехнологии, но и превосходит ее по простоте применения и удобству синхронизации. Программа, синтезированная по данной методике, получается более читабельной, и простой в отладке. Кроме того, размер графа реализуемого автомата практически не зависит от квалификации программиста и определяется, по большей части, размером памяти программ используемого микроконтроллера.

79

Раздел 7. Шины МПУ.

Самое главное, что должен знать разработчик микропроцессорных систем — это принципы организации обмена информацией по шинам таких систем. Без этого невозможно разработать аппаратную часть системы, а без аппаратной части не будет работать никакое программное обеспечение.

За более чем 30 лет, прошедших с момента появления первых микропроцессоров, были выработаны определенные правила обмена, которым следуют и разработчики новых микропроцессорных систем. Правила эти не слишком сложны, но твердо знать и неукоснительно соблюдать их для успешной работы необходимо. Как показала практика, принципы организации обмена по шинам гораздо важнее, чем особенности конкретных микропроцессоров. Стандартные системные магистрали живут гораздо дольше, чем тот или иной процессор. Разработчики новых процессоров ориентируются на уже существующие стандарты магистрали. Более того, некоторые системы на основе совершенно разных процессоров используют одну и ту же системную магистраль. То есть магистраль оказывается самым главным системообразующим фактором в микропроцессорных системах.

Обмен информацией в микропроцессорных системах происходит в циклах обмена информацией. Под циклом обмена информацией понимается временной интервал, в течение которого происходит выполнение одной элементарной операции обмена по шине. Например, пересылка кода данных из процессора в память или же пересылка кода данных из устройства ввода/вывода в процессор. В пределах одного цикла также может передаваться и несколько кодов данных, даже целый массив данных, но это встречается реже.

Циклы обмена информацией делятся на два основных типа:

80

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]