
- •Часть 1. Функции, структура и элементная база сау Гл. 1. Элементная база и структура сау
- •1.1. Вариантность элементной базы сау и возможности реализации различных функций
- •Этапы внедрения вычислительной и микропроцессорной техники в системы автоматического управления технологическим оборудованием
- •Микроконтроллер – основная структурная единица аппаратного обеспечения сау
- •Средства распределенного сбора данных и управления
- •Последовательный процесс – основная структурная единица программного обеспечения сау
- •6 X2 (цикл состояния 1)
- •Структура программного обеспечения и основы программирования микроконтроллеров
- •Программное обеспечение сау
- •Эталонная модель взаимодействия открытых систем
Последовательный процесс – основная структурная единица программного обеспечения сау
Программное обеспечение системы автоматического управления разделяют на систем- ное и пользовательское. При разработке конкретной программы всегда пользуются некото- рым набором утилит общего применения. Это программы тестирования аппаратной части микроконтроллера, утилиты для работы с плавающей точкой, диспетчеры задач для поддер- жания их исполнения в реальном времени и т.п. При программировании пользуются этими системными утилитами и подпрограммами и на их основе и с их поддержкой создают управ- ляющую программу – программу пользователя, описывающую правила выполнения предпи- санных системе функций. Функция определяет цель некоторых действий.
Для достижения поставленных целей реализуют ряд процессов, т.е. решают ряд задач. Так, в рассмотренном ранее примере полуфабрикаты параллельно откачиваются, нагреваются и нагружаются. Прежде всего, введем и обсудим основные понятия и определения.
Событие – это момент фиксации чего-либо важного для нас. Не слишком четкое оп- ределение, но говорящее о том, что это понятие субъективное. Главное здесь, что событие моментально. Введем важноедопущение: два события не могут происходить одновременно. Если приняли, что событие моментально и представляет собой точку на оси времени, то вполне оправдано, что эти точки всегда различны и события следуют одно за другим. Собы- тия выступают как следствия каких-либо действий, либо, как причина действий. Действия уже протяженны во времени и, поэтому могут протекать параллельно.
События могут непосредственно определяться программой (программные события) и быть внешними событиями по отношению к управляющей программе. Примером про- граммного события является появление новой информации после завершения выполнения очередной команды программного кода.
Для фиксации внешних событий в микроконтроллерах предусмотрен механизм пре- рываний, с которым Вы очевидно знакомы. Позже мы еще раз рассмотрим этот механизм ввиду его важности для систем управления. Существуют и другие способы фиксации внеш- них событий диспетчером процессов, но для нас пока это особого значения не имеет.
Все события можно разделить на локальные, имеющие значение только для данного потока, и сис- темные (рис.1. 22). Системные события каких либо процессов (потоков) участвуют в инициализации дейст- вий в других процессах или потоках. Иначе говоря, со-
Событие | |
|
|

Программное Внешнее
Локальное Системное
Рис. 1. 22.
бытие данного потока, или какое либо внешнее по от- ношение к управляющей программе событие (непо- средственно не вычисляемое в ней), является систем- ным, если оно обрабатывается ядром операционной системы (диспетчером процессов) и может участвовать в перераспределении вычислительных ресурсов между потоками. На рис.1.22 показано, что внешнее событие
не может быть локальным. Прерывание, предусмотренное для фиксации внешнего события, всегда запускает подпрограмму обслуживания этого прерывания, в результате чего перерас- пределяются вычислительные ресурсы микроконтроллера. Если, конечно прерывание не за- прещено, но тогда и внешнего события для системы управления не будет.
Процесс в нашем понимании, это совокупность событий и действий, объединенных общей природой ипричинно-следственными связями и направленных надостижения постав- ленной цели. С принятой в стандарте POSIX (Portable Operation System Interface Exchange)
точки зрения, процесс – это исполняемый программный код, расположенный в физически защищенном объеме памяти.
Последовательный процесс или поток (нить - thread) – это последовательность свя- занных событий и действий. Каждое событие является следствием предыдущих действий и инициатором последующих. Рассмотренный в примере с роботом автоматный граф является типовым последовательным процессом или потоком. Событиями являются переходы из со- стояния в состояние, когда система задерживается в одном из состояний, осуществляются действия.
Я в тексте часто смешиваю понятия «процесс» и «поток». Мне пока «режет ухо» вы- ражение «поток нагрева» и я по привычке говорю и пишу «процесс нагрева», если проблемы распределения и защиты памяти не существенны.
С точки зрения программиста, обмен и взаимодействие между потоками внутри про- цесса может осуществляться либо через глобальные переменные, либо, при переходе к вло- женной подпрограмме, через стековый механизм обмена с использованием локальных пере- менных. Причем, второй способ предпочтительнее и рекомендован к использованию для лучшей структуризации программ и автономности потоков и процедур, используемых в них.
Обмен между процессами (точнее потоками разных процессов) может осуществляться только через посылку сообщений. Это делает потоки максимально автономными. Каждый поток может осуществляться на различных микроконтроллерах, может быть автономно за- пущен и отлажен. Конечно, потокивлияют друг надруга. Так в приведенном примере с уста- новкой диффузионной сварки процессы нагрева и откачки связаны тем, что нагрев иниции- рует газовыделение, ухудшает вакуум и не должен привести к выходу давления за установ- ленные пределы. Но процесс нагрева может быть запущен автономно даже без откачки, если эмулировать сообщения о давлении при его запросах. Причем, процессу нагрева совершенно безразлично, какими средствами ведется откачка, ему важен лишь интерфейс процесса от- качки, чтобы запросить и получить фактическое значение давления.
Обмен информацией путем передачи сообщений между потоками может быть реали- зован и в рамках одного процесса, что также стандартизует механизм обмена и повышает ав- тономность программного кода потока.
Наибольшая автономность различных процессов и потоков позволяет распараллелить работы по программированию, повышает переносимость программного обеспечения, преем- ственность работ, использование программ сторонних производителей, облегчает отладку и сопровождение программного продукта.
Квантом будем называть отрезок потока между двумя системными событиями. Поток может содержать один или несколько квантов. В процессе выполнения кванта поток на дру- гие не влияет. Взаимодействия осуществляются только после завершения кванта. Организо- ванный таким образом интерфейс взаимодействияпотоков (процессов) способствует их авто- номности.
Рассмотрим и обсудим введенные намипонятиянапримере потокаили процесса регу- лирования температуры. Написан он на некотором паскалеподобном языке и носит учебный характер. Процесс управляет подъемом температуры в печи от исходной до максимальной Tmax с градиентом dT/20 градусов в секунду.
Циклически повторяющийся каждые 20 секунд, квант регулирования температуры описан внутри оператора while T<Tmax do. В каждом проходе цикла встречается оператор delay_t(20,4), передающий управление диспетчеру процессов с указанием, включить этот квант в очередь на исполнение с задержкой в 20 секунд и приоритетом 4. Диспетчер процес- сов ведет очередь всех квантов и запускает их на исполнение, как только условия запуска бу- дут выполнены.
thread NAGREV;
Var T, Tmax, dT ,Tf, Up, Tint, Tdif: real; {T, Tmax Заданная, максимальная и }
{приращение температуры, Tf -фактическая температура, }
{Up - управление, Tint, Tdif - постоянные времени. } Temp, Nagr : Channal; {Аппаратные переменные, связанные }
{с датчиком температуры и регулятором напряжения.}
begin
while T<Tmax do {Пока заданная температура меньше максимальной,} begin
T:=T+dT; {рассчитать заданную температуру,} Tf:=control(Тemp); {измерить фактическую по каналу,} Up:=PID(T,Tf, Tint, Tdif); {рассчитать управление по ПИД- } regulir(Up, nagr); {закону и выдать значение Up по каналу nagr} delay_t(20,4) {передать управление диспетчеру процессов} end; { с указанием (Ждать 20 секунд с приоритетом 1)}
Start(STAB_T, 0, 0) {запустить процесс стабилизации температуры} Start(SQUEEZING, 0.001, 1) {запустить процесс сжатия образцов}
через миллисекунду с приоритетом 0 } Stop {Окончить процесс нагрева, когда температура достигнута.}
end.
По времени, Выполнение кванта этого потока (участка кода внутри оператора while T<Tmax, ограниченного оператором delay_t()), займет менее миллисекунды и повторя- ется квант с периодичностью в 20 секунд. Остальное время вычислительное ядро микрокон- троллера свободно и может обрабатывать кванты других потоков. Именно за счет быстрой обработки квантов различных потоков, даже на одном микроконтроллере добиваются квази- параллельности выполнения управляющей программы.
Каждый поток (и квант) имеет критерий начала. По сути, это описание системного события, когда поток должен быть поставлен в очередь на исполнение. Критерий начала по- тока должен быть описан в других потоках или процессах, либо определяться внешними по отношению к управляющей программе событиями. В приведенном примере оператор Start(STAB_T, 0, 0) поставит в очередь диспетчеру процессов поток стабилизации температу- ры STAB_T с временем запуска, равным моменту исполнения оператора Start и приоритетом 0, а операторStart(SQUEEZING, 0.001, 0) - процесссжатия свариваемыхобразцов. Время за- пуска этого потока определено через миллисекунду после исполнения оператора Start также с нулевым приоритетом. Приоритет говорит о том, что если времена запуска у различных квантов совпадут, диспетчер выберет квант с максимальным приоритетом. Здесь квант с ну- левым приоритетом считается самым «важным», хотя в других операционных системах или средах исполнения жесткого реального времени (ОСРВ) может быть и иначе. Например, в системе Neutrino, чем показатель приоритета выше, тем процесс приоритетнее. Если совпа- дут времена запуска и приоритеты квантов, выполняется обычно квант, ранее поставленный в очередь. Существуют и другие алгоритмы и даже стратегии ведения очереди потоков или квантов.
Оператор delay_t(20,4) передает управление диспетчеру процессов и ставит квант процесса NAGREV в очередь с временем исполнения на 20 секунд большим, чем момент за- вершения delay_t() и приоритетом 4. Таким образом, завершение оператора delay_t() также определяет системное событие.
Критерий окончания указывает, что поток более не нужен и может не рассматривать- ся диспетчером процессов. Здесь это оператор stop. После выполнения этой системной про-
цедуры поток NAGREV будет исключен из очереди диспетчера процессов. Его дескриптор, в котором хранится контекст, адрес первой команды кода и условия запуска процесса, будет уничтожен, чтобы не перегружать диспетчер излишней работой. Далее процесс нагрева в технологическом цикле не нужен.
Помимо критериев начала и окончания, каждый поток характеризуется управляющи- ми, управляемыми и контролируемыми переменными.
Управляемая переменная характеризует качество ведения процесса. В нашем примере диффузионной сварки управляемой переменной процесса или потока нагрева является тем- пература изделия. Эта переменная в кванте управления процессом представлена значением Tf в формате реального числа.
Управляющей переменной, определяющей мощность, выделяющуюся на нагревателе печи, является значение Up, рассчитанное в процедуре закона регулирования PID(T,Tf,Tint,Tdif) в зависимости от требуемой температуры Т, или уставки, фактической температуры Tf и постоянных интегрирования Tint (задержки) и дифференцирования Tdif (опережения). Из курса «Управление в технических системах» вы должны знать, чем опреде- лены и как выбираются эти параметры.
В нашем примере управляемую переменную, определяющую качество процесса можно непосредственно контролировать, поэтому температура Tf является одновременно и контро- лируемой переменной. Ее значение формируется функцией control(Тemp), которая преобразует нормированный аналоговый сигнал с термопары, расположенной вблизи зоны сварки, в фор- мат реального числа. При этом сигнал с термопары фильтруется (очищается от помех). Как это делается, мы будем рассматривать далее (пример такой функции приведен в гл.5.3.Г).
Кванты потоков, используемых в САУ разделяют на синхрокванты, запускаемые или перезапускаемые по времени, как в рассмотренном ранее примере программы нагрева и кван- ты, запускаемые внешними событиями - интеркванты. Эти внешние по отношению к управляющей программе события происходят, например, при нажатии на какую-либо кнопку управления на пульте, при срабатывании конечных выключателей и т.п. Из курса вакуумной техники вы знаете, что есть так называемые блокировочные вакуумметры, которые выдают дискретный сигнал, если давление превзойдет или опустится ниже некоторого заранее уста- новленного уровня, причем, таких уровней может быть несколько. Это также будет внешнее событие. О наступлении внешнего события системе управления сообщает прерывание.
Вы, очевидно, из предшествующих курсов знакомы с механизмом прерывания микро- процессоров. Мы в главе 3 еще будем подробно изучать этот раздел. Пока напомню, что по сигналу прерывания микропроцессор (микроконтроллер) заканчивает очередную команду выполняемого участка программного кода, запоминает точкуостанова и переходит к подпро- грамме обслуживания прерывания. Не будем пока касаться вопроса, как он находит эту под- программу (см. гл. 3). Просто поверьте, что находит и переходит к ее обработке, а по завер- шению, снова возвращается к исходной точке основной программы.
Строго говоря, выполнение заданной задержки времени, это тоже событие, но отста- вим деление на синхрокванты и интеркванты, запускаемые внешними событиями. Сигналы времени («тики») будем считать особыми, отличными от других внешних событий, их авто- матическая обработка задействована во всех современных микроконтроллерах и компьюте- рах и поддерживается их аппаратным и программным обеспечением.
Диспетчер процессов или задач, являющийся неотъемлемой частью программного со- временных САУ, следит за очередностью исполнения квантов потоков. При возникновении системного события он через прерывание узнает об этом и ставит в очередь на исполнение связанный с этим событием интерквант.
Описанное деление программного обеспечения на процессы, потоки и кванты заложе- но во все современные средства разработки и поддержки исполнения управляющей програм-
37
мы, но имеет свои особенности в каждой конкретной системе. Это часто приводит к терми- нологическим проблемам. Так, в системе программирования CoDeSys, построенной в соот- ветствии с международным стандартом МЭК 61131-3 рассмотренный нами квант определен как задача. Задача имеет название, приоритет и тип. Тип определяет условие вызова задачи на исполнение. Тип задачи cyclic определяет ее как синхроквант, тип triggered by external
event
–
как
интерквант.
Внешнее событие
Оператор
Диспетчер процессов
Экстраквант
На исполнение
Очередь квантов
В некоторых системах кванты, запускаемые внешними событиями, разделяют на экстракванты, запускаемые по возникновению прерывания, не ожи- дая завершения выполняемого кванта, и обычные интеркванты, которые ставятся в очередь диспет- чером процессов с установленным приоритетом и за-
программы
Внешнее событие
Синхроквант Квант Интерквант
Рис. 1. 23.
пускаются впорядке очереди. Рис. 1. 23 иллюстриру-
ет способы запуска синхро, интер и экстраквантов на исполнение.
Широкое использование экстраквантов при разработке управляющих программ снижает предска- зуемость их поведения и вероятность успешного и быстроговосстановленияуправляющей программы при программных сбоях. Повышается и трудоемкость отладки программного обеспечения.
Если разбивать код управляющей программы на достаточно короткие кванты (около миллисекунды), задержка реакции на запуск интеркванта будет также в этих пределах, чего вполне достаточно для большинства ситуаций в технологическом оборудовании, поэтому экстракванты используют обычно в чрезвычайных аварийных ситуациях, например, при об- наружениипропаданияпитания на микроконтроллере. Мы прирассмотрении супервизорных схем рассмотрим реакцию на такие ситуации.
Внутри квантов пользователя содержатся основные элементарные утилиты взаимодей- ствия с объектом по выявлению его состояния:
ДК – дискретный контроль состояния элементов объекта; АК - аналоговый контроль состояния элементов объекта. Либо утилиты по изменению состояния объекта управления:
ДУ – дискретное управление элементами объекта (включить или выключить при- вод, клапан и т.п.);
АУ – аналоговое управление элементами объекта (подать управляющее напряжение заданной величины на регулятор нагревателя, на блок управления двигателем постоянного тока или управления асинхронным трехфазным двигателем и т.п.).
Через операции ДУ, ДК, АУ и АК и осуществляется взаимодействие системы управле- ния и управляемого объекта. Они и являются интерфейсом, между ними. Определимся, что же такое операции контроля и управления, события или действия? Начало, либо конец опе- рации – событие, сама операция – действие. Так, операция аналогового контроля, когда мик- роконтроллер получает дискретный код контролируемого аналогового сигнала объекта, про- водится с помощью аналогово-цифрового преобразователя (АЦП). Длится она заметное вре- мя, около 10 мкс. Здесь будет два события, начало преобразования «старт АЦП», оно ини- циирует процесс преобразования, а после его завершения произойдет событие «конец преоб- разования» и результат будет считан в программе управления.
Операции дискретного контроля ДК бываютс программной и аппаратной инициализа- цией. При программной инициализации контроль проводится по инициативе программного обеспечения. При аппаратной инициализации изменение состояния объекта контроля фикси-
38
руется через прерывания. Тогда событие, заключающееся в изменении его состояния, стано- вится системным. Оно сможет запустить интерквант, в теле которого можно будет описать реакцию на это событие.
Для проведения операций дискретного контроля и управления микроконтроллер имеет в своем составе специальные регистры (рис. 1.24). Эти регистры входят обычно в состав плат устройства связи с объектом (УСО, см. рис. 1.15). Входы регистров дискретного контроля RG1 подсоединены к сигналам объекта ДК, а выходы «Q» программно доступны для операций чте- ния через шину микроконтроллера. Уровень сигнала на линии ДК1 определяет содержимое ну- левого бита регистра контроля и т.д.
Если мы хотим реализовать дискретный контроль с аппаратной инициализацией, линии ДК подсоединяют ко входам прерывания. Поскольку, часто линий прерывания не много, обыч- но линии ДК с аппаратной инициализацией подают на входы логической ячейки «И», а уже выход этой ячейки присоединяют к входулинии прерывания. Тогда, если хотя бы на одной ли- нии ДК появится низкий уровень, возникнет прерывание. В подпрограмме обработки этого прерывания, можно будет определить, по какой из линий ДК оно инициализировано. Это можно сделать, анализируя содержимое регистров дискретного контроля.
Входы регистров дискретного управления RG2, наоборот, подсоединены к шине микро- контроллера, а выходы формируют сигналы дискретного управления ДУ. Содержимое нулевого
Шина микроконтроллера
бита определяет уровень сигнала на линии ДУ1 и т.д. По сигналу синхронизации С ин- формация со входа переписывается внутрь
ДК1 ДК2
D RG1 Q
0 0
1 1
D RG2 Q
0 0
1 1
ДУ1 ДУ2
регистра, а по сигналу ОЕ (Output Enable,
разрешение выдачи) передается из регистра
ДК3 2 2 2
2 ДУ3
на его выводы. Подробнее работу и устрой-
ДК4 3
3 3 3
ДУ4
ство регистров можно посмотреть в гл.2.4.
4 4 4 4
5 5 5 5
6 6 6 6
7 7 7 7
C C
OE OE
Рис. 1. 24
Регистры имеют определенные адреса, из курса информатики вы знаете, что даже в языках высокого уровня есть возможность задавать аппаратные переменные, т.е. пере- менные, имеющие заданный адрес в про- странстве памяти. Эти переменные и будут программно использоваться для обращения к элементам объекта управления.
Для проведения операций дискретного контроля в управляющей программе нужно уметь считывать содержимое отдельных битов, а в языках высокого уровня обычно опери- руют с машинным словом, совокупностью битов. Следует отметить, что в ассемблере совре- менных микроконтроллеров (микропроцессоров, ориентированных на задачи управления) есть команды манипулирования отдельными битами его выходных портов. В третьей главе мы будем знакомиться с такими типовыми микроконтроллерами семейства MCS-51. Если команд манипулирования с отдельными битами нет, используют приемы маскирования.
Например, мы хотим узнать в нуле или единице сигнал ДК2 (рис. 1.24)? Операция ло- гического «И» содержимого регистра RG1 с маской, значение которой в двоичным коде рав- но00000010, дастнулевой результат, если в первом бите RG1 содержится ноль. Иначе, в рас- сматриваемом бите - единица.
Для того, чтобы узнать, не поменялся ли хотя бы один бит регистра дискретного кон- троля, используют операцию «исключающее ИЛИ». Ее нулевой результат с прошлым значе- нием указывает на то, что изменений не было. Иначе, в изменившихся по сравнению с про- шлым моментом контроля битах будут установлены единицы.
Для того, чтобы установить какой либо бит, не изменив содержимое остальных, ис- пользуют «ИЛИ» регистра дискретного управления и маски. Например, чтобы установить третий бит RG2 (рис. 1. 24), необходимо переписать в регистр результат логического «ИЛИ» его прошлогосодержимого смаской 00001000. Длятого, чтобысброситьэтотбит (записать в него нуль), следует переписать в регистр результат логического «И» прошлого содержимого этого регистра с маской 11110111.
Для проведения операций аналогового контроля и управления необходимы аналогово- цифровые и цифро-аналоговые преобразователи. Их мы будем изучать в главе 2.5.
В приведенном нами ранеепримереквантарегулирования температурыпечи оператор
« Tf:=control(Тemp); {измерить фактическую по каналу,}» задает операцию аналогового кон- троля АК. Оператор «regulir(Up, nagr); { выдать значение Up по каналу nagr} задает опера- цию аналогового управления АУ. При этом микроконтроллер может выдать аналоговый управляющий сигнал на некоторый регулятор мощности, который сформирует адекватный этому сигналу энергетический поток на привод.
Можно сформировать энергетический поток требуемой мощности и с помощью ко- манд дискретного управления ДУ. Это делается с помощью фазоимпульсного или широтно- импульсного управления мощностью, которое рассмотрено в разделе 2.1. «Дискретные элек- тронные компоненты САУ».
Использование описанного процессного подхода к программированию систем управления позволяет существенно упростить программирование и отладку программного обеспечения, по-
вышает его переносимость с
Un
R1
ДК1
R2 R3 R4
ДК2 ДК3 ДК4
объекта на объект.
Рассмотрим пример. Допустим, мы управляем не-
SA1
M
БЭА
SA2
ДУ1 (Пуск/Стоп)
SA3
"Пуск" "Стоп"
которым сканирующим при- водом (рис.1.25). Трехфазный асинхронный двигатель М приводит во вращение ходо- вой винт, который перемеща-
3х220х380В
ДУ2 (Движение вправо) ДУ3 (Движение влево)
Рис. 1. 25.
ет каретку от упора, оборудо-
ванного конечным выключа- телем SA1, до такого же упора с конечным выключателем
SA2. Конечные выключатели подключены к источнику постоянного напряжения Un через балла- стные резисторы R1 и R2. Как только доехали до упора, двигатель тормозится и реверсируется.
Для энергообеспечениядвигателя примененблок электроавтоматики БЭА. Он подключен к сети 3х220х380В и имеет три управляющих входа: ДУ1, ДУ2 и ДУ3, в зависимости от уровня сигнала на которых, формируется энергетический поток на двигатель. Построен блок как комби- национная логическая схема, таблица истинности приведена ниже. Символ «Z» обозначает в ней ноль или единица – безразлично.
Кроме конечных выключателей SA1 и SA2, формирующихсигналы дискретного контро- ля ДК1 и ДК2 на реверс двигателя, мы должны иметь и две кнопки SA3 «Пуск» и SA4 «Стоп», так же формирующих сигналы дискретного контроля ДК3 и ДК4 (рис.1. 25). Хотелось бы под- черкнуть, что две, вроде бы управляющие кнопки «Пуск» и «Стоп» формируют контролируемые, а не управляющие сигналы.
В зависимости от состояния четырех сигналов дискретного контроля ДК1…ДК4 мик- роконтроллер формирует три сигнала дискретного управления, поступающих на блок энерго- автоматики. Сигнал ДУ1 «Пуск/Стоп» разрешает подачу напряжения на двигатель, сигнал ДУ2 задает движение вправо, а ДУ3 – влево (см. таблицу истинности).
Таблица истинности блока энергоавтоматики.
Входные сигналы |
Выходные энергетические потоки | ||
ДУ1 |
ДУ2 |
ДУ3 | |
0 |
Z |
Z |
Нет напряжения |
1 |
0 |
0 |
Нет напряжения |
1 |
0 |
1 |
Фазы А, В, С (каретка движется вправо) |
1 |
1 |
0 |
Фазы В, А, С (каретка движется влево) |
1 |
1 |
1 |
Нет напряжения |
На рис. 1. 26 представлен автоматный граф состояний привода, являющийся четким техническим заданием и предложением на разработку программного обеспечения микрокон- троллера. Символом «х» на нем обозначен сигнал с соответствующего конечного выключате- ля SA.
x3
Состояние |
ДУ1 |
ДУ2 |
ДУ3 | |
0 |
Исходное |
0 |
0 |
0 |
1 |
Вправо |
1 |
1 |
0 |
2 |
Останов |
1 |
0 |
0 |
3 |
Влево |
1 |
0 |
1 |
0
3 1
x2*x4
2
(x2)*(t=0.05c)
t<0.05c
Рис. 1. 26
Автоматный граф однозначно показывает, что должна делать система управления, но как это все проделать, задача программиста. И ее можно выполнить с той или иной степенью качества, определяемого:
требуемой памятью и быстродействием микроконтроллера;
надежностью работы аппаратной и программной частей системы управления;
уровнем использования ресурсов микроконтроллера;
универсальностью и переносимостью программного обеспечения на другие микрокон- троллеры.
Из графа видно, что суть управления заключается в проведении операций дискретного контроля (снятии логических переменных х1…х4 с объекта управления) и формировании в зависимости от их значений состояния объекта. Состояние объекта однозначно определяет управляющие воздействия ДУ1…ДУ3. Переменные Х можно читать из четырех битов реги- стра дискретного контроля RG1, а для выдачи управляющего воздействия следует установить соответствующие биты регистра дискретного управления RG2.
Хорош ли предложенный нами граф? Ну, во первых, он не полон. Так, в первом со- стоянии (движение вправо) анализируются только сигналы с правого конечного выключателя х2 и с кнопки «Стоп» (х4). То, что мы не обращаем внимание на кнопку «Пуск» (х3) вполне допустимо, но ведь может появиться низкий уровень одновременно на правом и левом ко- нечных выключателях. Такой сигнал свидетельствует нам об аварийной ситуации. Пока мы не выделяем и не реагируем на них. Другим недочетом является то, что при нажатии на кноп- ку «Стоп» привод мгновенно останавливается, а не уходит в какое либо исходное состояние, например, крайнее левое. Но пока, чтобы не усложнять пример, остановимся на таком графе.
На рисунке 1.27 приведен алгоритм реализации этого графа в виде единого потока, со- стоящего из четырех синхроквантов. Операторы, инициированные системными событиями
здесь выделены овалами. Критерий
1
Старт
Цикл состояния 0
3
начала потока – оператор 1 – Старт. Это безусловный оператор и он бу-
2 Ждать 0.1с
RG1d
х3 х3
х2 4 х2
RG1

5 8
x1*x4 (цикл состояния 3)
дет обязательно выполнятся с за-
пуском программного обеспечения контроллера. Он приводит систему в нулевое исходное состояние.
Необходимо отметить, что логика наших контрольных сигна-
x2*x4 (цикл состояния 1)
RG2:=RG2 or #00000101
движение влево
RG2:=RG2 or #00000011
движение вправо
лов инверсна и при нажатии кнопок или конечных выключателей, они
6
RG1ϩ
х1*х4 7
Ждать 0.02с
x1*x4
11
x2*x4
9
RG1ϲ
х2*х4
10
Ждать 0.02с
выдают активный низкий уровень.
В исходном состоянии 10 раз в секунду проверяется, не нажата ли кнопка «Пуск» и, если она нажата и привод был в крайнем правом по-
RG1Ϩ
х4 х4
12
2 RG2:=RG2 & #11110000
остановить привод
13
Ждать 0.05с
Cостояние 2
х4 14
RG1Ϩ
2 х4
х2 15
RG1

5 х2
8
Рис. 1. 27
ложении, следует движение влево,
иначе - вправо. Так что, если при- вод остановился в промежуточном положении, он всегда начнетдви- гаться вправо. Условие выхода из нулевого состояния проверяется синхроквантом, содержащим опера- тор 2. Системный оператор 3
«Ждать 0.1с», выполняемый, если кнопка «Пуск» не нажата, передает управление диспетчеру задач и от- кладывает выполнение приведенно- го алгоритма на 0.1 секунды.
Синхрокванты с большей частотой перезапуска проверяют условия выхода из состояний 1 и 3 и переводят систему в исходное со- стояние или состояние останова.
В этом примере использован дискретный контроль с программной инициализацией и преимуществапроцессного подхода к программированиюсистем управления практическине реализованы. Операторы «Ждать» вполне можно было бы заменить программными задерж- ками. Программа управления работала бы точно также, с тем только отличием, что больше ни каких процессов микроконтроллер выполнять бы не смог, поскольку временных окон в ходе выполнения потока не было бы.
Разработанный алгоритм, как и автоматный граф проверяют на полноту, составляя таблицу возможных сочетаний сигналов в каждом из состояний и реакцию на них, исходя из операторов алгоритма. Ниже представлена такая таблица для состояния 2 после задержки.
Входные сигналы |
Состояние |
Примечание | |||||
х4 |
х3 |
х2 |
х1 |
|
| ||
0 |
0 |
0 |
0 |
Исходное (0) |
Аварийное сочетание - нет питания |
0 |
0 |
0 |
1 |
Исходное (0) |
Аварийное сочетание |
0 |
0 |
1 |
0 |
Исходное (0) |
Аварийное сочетание |
0 |
0 |
1 |
1 |
Исходное (0) |
Аварийное сочетание |
0 |
1 |
0 |
0 |
Исходное (0) |
Аварийное сочетание |
0 |
1 |
0 |
1 |
Исходное (0) |
Нормальная работа |
0 |
1 |
1 |
0 |
Исходное (0) |
Нормальная работа |
0 |
1 |
1 |
1 |
Исходное (0) |
Аварийное сочетание |
1 |
0 |
0 |
0 |
Влево (3) |
Аварийное сочетание - нет питания SA3 и (SA1 или SA2) |
1 |
0 |
0 |
1 |
Влево (3) |
Нештатный сигнал «Пуск» SA3 |
1 |
0 |
1 |
0 |
Вправо (1) |
Нештатный сигнал «Пуск» SA3 |
1 |
0 |
1 |
1 |
Вправо (1) |
Аварийное сочетание, отказ SA1 или SA2 |
1 |
1 |
0 |
0 |
Влево (3) |
Аварийное сочетание - нет питания SA1 или SA2 |
1 |
1 |
0 |
1 |
Влево (3) |
Нормальная работа |
1 |
1 |
1 |
0 |
Вправо (1) |
Нормальная работа |
1 |
1 |
1 |
1 |
Вправо (1) |
Аварийное сочетание, отказ SA1 или SA2 |
Здесь особо опасны выделенные жирным шрифтом сочетания, которые могут привести к поломке привода. При таких сочетаниях сигнала целесообразно систему оставить в поло- жении«Останов», так, чтобы перезапустить систему можно было нажатием кнопки «Стоп» и затем «Пуск». Можно предусмотреть индикацию аварийного состояния. Откорректированная
часть алгоритма
после оператора
13
представлена
на
рис.
1.28.
Также внимательно следует проверить и переходы из других
х1*x2
14
RG1
х1+x2
состояний.
Квант характеризуют коэффициентом загрузки про- цессора k, равным отношению длительности выполнения
х1*x2
15
RG1
кванта τ к периоду его перезапуска h:
k
h.
х1*x2
х4 16
RG1Ϩ
2 х4
х1 17
RG1
8 х1
5
Посчитатьдлительностьисполнения кванта можно, просто имея его текст на ассемблере и зная длительность вы- полнения каждой операции. При некотором опыте программи- рования это можно сделать и просто по экспертной оценке. Например, описанный ранее квант регулирования температуры на процессоре с длительностью выполнения короткой команды в одну микросекунду будет выполняться не более 1 мс и коэф- фициент загрузки процессора при перезапуске кванта раз в 20 секунд составит:
Рис. 1. 28
k 103
20 5 *105.
Коэффициент
загрузки
процессора,
по
сути,
доля
отнимаемого
у процессора
ресурса
времени.
Какую
то
долю
времени отнимает
у микропроцессора
диспетчер
процессов,
осуще-
ствляющий
перезапуск
квантов,
какую то
-
другие
кванты
процессов.
Если вы
используете
приобретенный
со стороны
диспетчер
процессов или
разработали
его самостоятельно,
обяза-
тельно
проверьте
время
диспетчирования.
Обычно оно
составляет не
более 100
мкс.
Суммар-
ный
коэффициент
загрузки
процессора
на
все
элементы
управляющей
программы не
должен
приближаться
к единице,
иначе
процессор
просто
не
успеет,
и будут
возникать
неизбежные
задержки.
Посчитать
эти
задержки можно
с использованием
методов
теории
массового об-
служивания
или имитационным
моделированием.
Реально, чтобы не было заметных задержек, нужно писать управляющую программу, как совокупность коротких квантов и суммарный коэффициент загрузки процессора не дол- жен составлять более 0,1.
В рассматриваемом приводе сканирования коэффициент загрузки процессора квантом проверки нулевого состояния составит с учетом работы диспетчера задач не более 10-3 и кон- троллер сможет одновременно обслуживать до ста таких квантов.
Если усложнить автоматный граф привода сканирования и заставить привод останав- ливаться после нажатия кнопки стоп только в крайнемлевом положении, управляющий алго- ритм резко усложнится, поскольку придется вводить дополнительное состояние для движе- ния влево, в которое система будет переходить, если ранее в любом из состояний кроме ис- ходного была нажата кнопка «Стоп». Попробуйте сами нарисовать такой граф и алгоритм, мы же здесь не будем этого делать, поскольку процессный подход предлагает более простые методы решения.
На практике кнопки «Пуск» и «Стоп» объединяют пусковым RS-триггером, выполнен- ным на реле, как это показано на рис. 1.29. Реле К1 формирует сигнал х3, находящейся в ак- тивном низком уровне, если была нажата кнопка «Пуск» до тех пор, пока не нажата «Стоп». Использование такой схемы позволит нам легко модифицировать автоматный граф так, что ос- танавливаться привод после нажатия кнопки «Стоп» будет всегда в крайнем левом положении.
x5
Состояние |
ДУ1 |
ДУ2 |
ДУ3 | |||
0 |
Исходное |
0 |
0 |
0 | ||
1 |
Вправо |
1 |
1 |
0 | ||
2 |
Останов |
1 |
0 |
0 | ||
3 |
Влево |
1 |
0 |
1 |

Un 0
K1 ДК3
(x3)
SA3
SA4 3 1
"Пуск" "Стоп"
x2
K1.1
(x2)*(t=0.05c)
2 t<0.05c
Рис. 1.29
Количество сигналов уменьшилось, и сигнал х3 анализируется только в нулевом и втором состояниях. Алгоритм, реализующий этот граф, попробуйте разработать самостоя- тельно. В конце параграфа приведен рисунок этого алгоритма. Проанализируйте полноту ус- ловий переходов в состояниях 1 и 3 с помощью таблицы аналогично тому, как мы делали это ранее для состояния 2
Реализовать схему, приведенную на рис. 1.29, можно и программным путем, просто анализируя сигналы х3 и х4 в отдельном алгоритме, исполняемом как параллельный поток. Назовем его «Пуск-стоп». Тогда у нас будет два потока «Пуск-стоп» и «Вправо-влево». По- ток «Пуск-стоп» будет модифицировать глобальную логическую переменную Работа, кото- рая заменит сигнал х3 в автоматном графе по рис. 1.29.
Будем постепенно знакомиться с возможностями многопоточного программирования. Для начала рассмотрим случай, когда потоки одного уровня иерархии и оба безусловно за- пускаются из диспетчера задач при исполнении управляющей программы (рис. 1.30). Это от- ражают системные операторы «Старт», в которых не указано условие запуска.
Поток "Вправо-влево" 1
Поток "Пуск-стоп" 1
Старт
2
Работа?
да
Цикл состояния 0
3
Ждать 0.5с
нет
Старт
2
RG1ь
х3+x4
х3*x4 7
Авария
х2 4 х2
RG1

х3*x4
3
RG1ь
5
RG2:=RG2 or #00000101
x1 (цикл состояния 3)
движение влево
8
RG2:=RG2 or #00000011
движение вправо
х3*x4
4 х3
6 x1
RG1
х1 7
Ждать 0.02с
11
9
x2 RG1

х2
10
Ждать 0.02с
RG1d
5 х3
Работа:=false