Материал: Разработка системы управления механической системы в режиме мягкого реального времени

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Где Vt - текущая скорость перемещения манипулятора по координате Y;

Dx - расстояние до целевой координаты Yс;

St - тормозной путь, требуемый для снижения текущей скорости до нуля;

Vm - максимальная скорость;

sost - переменная указывающая предыдущее состояние задачи.

Задача GotoY основана на том же алгоритме, что и Sled_Y, и имеет подобную структуру состояний. Отличаются лишь условия переходов из одного состояния в другое. Дело в том, что на этапе калибровки не известно, где конкретно находится выходное звено и сколько нужно пройти до начала координат. А значит рассчитать временные интервалы мы можем только для состояния ускорения, и при дальнейшем движении ориентироваться по сигналам, полученным с датчика снижения скорости и датчика начального положения.

Таким образом, задача принимает следующую структуру:

). Stop. Состояние останова. В это состояние задача переходит при инициализации. Если была дана команда выхода в ноль, то задача переходит в состояние освобождения тормоза BRAKE.

). BRAKE. В этом состоянии задача выжидает время действия тормоза, которое задано по условию. Если предыдущее состояние было STOP(то есть мы начинаем движение), то проверяются сигналы с датчиков, для того чтобы бы определить следующее состояние задачи.

Если сработал датчик снижения скорости (ДСС) и еще не сработал датчик начального положения (ДНП), то задача переходит в состояние движения на малой скорости, которая должна быть задана пользователем.

Если ни один из датчиков не сработал, то задача переходит в состояние разгона ACCEL.

Если оба датчика сработали, то задача переходит в состояние дожима DOGE.

Если же переход в текущее состояние произошел для блокировки тормоза, то переходим в состояние останова.

). ACCEL. Состояние разгона. В этом состоянии происходит наращивание скорости, пока не сработает ДСС или не будет достигнута максимальная скорость. В первом случае произойдет переход в состояние торможения DEACCEL, во втором - в состояние движения на постоянной скорости CONST.

). SMALL_V. В этом состоянии происходит движение на заданной малой скорости, пока не сработает датчик начального положения. Как только сработает датчик, задача перейдет в состояние дожима DOGE.

). DOGE. Дожим. Здесь мы делаем m импульсов на 1-ой скорости и переходим в состояние BACK.

). CONST. В данном состоянии происходит движение на постоянной скорости пока не сработает ДСС, а затем происходит переход в состояние торможения DEACCEL.

). DEACCEL. Состояние торможения. Здесь происходит снижение скорости до заданного минимального значения , а затем переход в состояние SMALL_V.

). BACK. Выход в нулевую позицию. В данном состоянии мы делаем n импульсов назад, для выхода в заданную позицию, устанавливаем значение текущей координаты равной нулю и переходим в состояние блокировки тормоза BRAKE.

В результате получим структуру состояний задачи GotoY, представленную на рисунке 2.5.

Рисунок 2.5 - Структура состояний задачи GotoY

Таблица 2.4 Состояния задачи GotoY

Имя

Вход

Действие

Выход

0

InitState

-

-

Ostanovka=1=>sost=STOP

1

STOP

Ostanovka=1

-

sost=BRAKE

2

BRAKE

sost=1 do T_y=1 else T_y=0 Ttek

T=Ttek+T_y

DSS_Y=0 or (DSS_Y=1&(DSP_Y=1orDSP_Y=1)

3

ACCEL

Vt,Tt, Vm,A,Yc, Yt

Vt,dt,Ttek

4

SMALL_V

Yt ,Yc A, Ssh,Tt,Vt

dy=Yc-Yt St=Ssh*i - тормозной путь  Vt=Vi+ai*dt

DSP=1=>sost=DOGE

5

DOGE

DSP=1

Stcount=m

sost=BACK

6

CONST

Yt ,Yc Ai Ssh

dy=Yc-Yt St=Ssh*i - тормозной путь  Vt=Vi+ai*dt

DSS=1 =>sost=DEACCEL

7

DEACCEL

Yc Yt

dy=Yc-Yt Vt=Vi-ai**dt

Vt=Vmin Sost=SMALL_V

8

BACK

Yt sost=DOGE

Stcount=n

Yt=0 sost=BRAKE


Где Vt - текущая скорость перемещения манипулятора по координате Y;

Dx - расстояние до целевой координаты Yс;

St - тормозной путь, требуемый для снижения текущей скорости до нуля;

Vm- максимальная скорость;

sost - переменная указывающая предыдущее состояние задачи.

Задача ProgControl:

Читает текущую команду пользователя и соответственно с ней изменяет параметры движения и координаты целевой точки.

Имеет следующие состояния:

. Wait_cmd. Состояние ожидания команды оператора. В этом состоянии задача ожидает, пока оператор откроет файл или пока выполняется текущая команда. Как только получена команда разборки следующей строки задача переходит в состояние расчета Calculation.

. Calculation. В этом состоянии задача разбирает текущую строку команды оператора и извлекает из нее максимальную скорость целевые координаты и время останова, рассчитывает временные интервалы между импульсами на каждом шаге разгона. Рассчитав все это, задача переходит в состояние ожидания Wait_cmd.

3. Проектирование интерфейса СРВ

Интерфейс оператора (пользователя) служит для организации взаимодействия между человеком и системой управления (ОУ). В зависимости от назначения и функций СРВ может быть использован интерфейс оператора различного типа:

-             Командный интерфейс. Для отображения информации используются символьные буквенно-цифровые сообщения. Вводимые команды и параметры также представляют наборы символов. Используется алфавитно-цифровой дисплей и клавиатура. Для временного или удалённого подключения к системе может использоваться последовательная линия. Командный интерфейс требует мало ресурсов процессора, ПОРВ на его основе обладают высокой мобильностью.

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

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

-             Специальный интерфейс. Ввод и вывод информации производится через специальные органы управления. Пример - штурвал самолёта или руль автомобиля. Применяется в специальных условиях.

Окно интерфейса оператора показано на рисунке 3.1

Рисунок 3.1 - Интерфейс оператора СРВ

Форма интерфейса содержит следующие элементы:

1.      Элемент MultiText - открытый файл, в котором содержатся координаты точки X,Y, скорость движения двигателя (мм/с), время ожидания перехода к следующей точке.

2.      Кнопка Inicializate - сохраняет все введенные оператором данные (Vmax_X, Vmax_Y(m/c); A_x, A_y(m/c2); Ssh_x, Ssh_y(mm)).

.        Кнопка Start - при нажатии начинается выполнение задач из файла.

.        Кнопка Stop - останавливает выполнение чтения из файла.

.        Кнопка GoTo_0X - устанавливает двигатель в начальное положение по

оси Х.

6.      Кнопка GoTo_0Y - устанавливает двигатель в начальное положение по

оси Y.

7.      Кнопка Otkrit - чтобы открыть файл выполнения программы,

необходимо указать его название и нажать данную клавишу.

8.      Vtek_x(m/c), Vtek_y (m/c) - показывает проходящие точки, для достижения заданной точки.

9.      X, Y - показывает координаты заданного положения.

4. Проектирование на основе вычислительной технологии

.1 Выбор аппаратной архитектуры

Для создания управляющей программы СРВ необходимо преобразовать модель задач-состояний в код управляющего компьютера. Первый шаг в этом направлении - определить сколько управляющих вычислительных устройств будет в СРВ и составить перечень задач для каждого из них. Исходя из сложности проектируемой системы было принято решение использовать в качестве вычислительного устройства - персональный компьютер на базе процессора х86,на котором реализуются все задачи управления. Связь с управляемым объектом осуществляется по параллельному порту.

.2 Выбор базового ПО и инструментальных средств

В качестве базового ПО используется ОСРВ QNX 6.2.1. Эта ОСРВ построена по принципам высоконадежной архитектуры на основе микроядра и четко детерминированного механизма обмена сообщениями, в том числе для взаимодействия процессов по сети.

В состав QNX входит также графическая оболочка Photon microGUI для построения встраиваемых приложений с графическим интерфейсом пользователя.

Инструментальные средства, входящие в состав пакета QNX Momentics, включают: редактор, отладчик (в том числе для удалённой отладки), средства построения встраиваемых систем, различные анализаторы, средства разработки интерфейса пользователя, средства управления версиями, компиляторы с различных языков высокого уровня.

При разработке и отладке основного процесса СРВ использовались:

-       редактор WorkSpace для создания исходных текстов программы;

-       компилятор gcc версии 2.95.2;

-       отладчик gdb.

Интерфейс оператора разрабатывался в интегрированной среде Photon Application Builder на основе визуальных компонентов GUI Photon.

.3 Выбор модели процессов-потоков

Все задачи СРВ должны выполняться параллельно. Так как задачи основного процесса выполняются псевдопараллельно (т.е. на одном и том же процессоре), то для организации их параллельного выполнения был применён метод последовательного совместного диспетчера /1/. Такой метод организации прост и универсален.

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

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

Как уже говорилось ранее, мы пришли к решению разделения нашей программы на два исполняемых параллельно потока.

Задача интерфейса оператора реализуется в виде главного потока. Во втором потоке реализуется главный цикл программы MainCicle, который представляет собой последовательный диспетчер, в нем последовательно вызываются задачи, определенные нами ранее.

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

Графическая схема выбранной модели процессов-потоков представлена на рисунке 4.1.

Рисунок 4.1 - Выбранная модель процессов-потоков

На рисунке показаны два потока:Interface и MainCicle. В главном потоке выполняется сохранение введенных оператором данных, предоставляется оператору возможность задавать настроечные данные: Во втором потоке представлен последовательный диспетчер, который реализует псевдопараллельное выполнение наших задач.

Потоки обмениваются следующими данными: поток Interface передает настроечные данные(settings), координаты целевой точки (Хс,Yc) и команды калибровки; поток MainCicle передает координаты текущей точки(Xt,Yt) и скорости по обеим осям(Vt_x,Vt_y).

5. Разработка ПО РВ

Разработку ПО РВ можно разделить на два этапа:

1.  Разработка интерфейса оператора (главный поток).

2.      Разработка второго потока, который непосредственно связан с процессом управления.

Обмен данными между потоками и между самими задачами происходит с использованием глобальных переменных, для удобства все глобальные переменные создаются в файле variable.c, который подключается во всех остальных модулях. Этот файл содержит следующие переменные:

Xc,Yc - координаты целевой точки;

Xt,Yt - координаты текущего положения выходного звена;

vihod_0X, vihod_0Y - переменные, указывающие был ли сделан выход в 0 по соответствующим осям. Если выход в 0 был сделан, то этим переменные присваивается значение 1, в противном случае - 0.

Vt_x, Vt_y- текущие значения скоростей по обеим осям.

Ssh_x, Ssh_y, a_x, a_y, Vmax_x, Vmax_y - параметры движения._x- индекс текущего шага в главном массиве

Vm_step_x - номер шага, соответствующий максимальной скорости.

vihod_0X_cmd, vihod_0Y_cmd - переменные, указывающие была ли оператором введена команда выхода в 0._x - массив ,содержащий характеристики движения на каждом шаге. Он имеет следующую структуру:

uint64_t dt_ms - интервал времени между импульсами в мс;

uint64_t dt - интервал времени между импульсами в тактах процессора;

V - скорость.

Ttormoz_ms, Ttormoz - время срабатывания тормоза в мс и в тактах.

Также здесь определены константы, устанавливающие фазные сигналы для шагового двигателя.

const unsigned short int phases_signals_x[4] = {0x08, 0x02, 0x04,0x01} - сигналы для двигателя, подключенного к первым четверым выходам.

Рассмотрим модули главного потока. Они представляют собой обработчики, каких либо событий.

Спецификация этих модулей представлена в таблице 4.1. Рассмотрим подробнее каждый модуль.

1.       Модуль createMain. Эта функция вызывается при нажатии на кнопку Start. Здесь создается второй поток MainCicle и создается мьютекс для синхронизации обоих потоков.

2.      Модуль ending Вызывается при нажатии на кнопку Stop. Останавливает цикл выполнения задач, присвоив переменной work значение 0.

.        Модуль init. Вызывается при нажатии на кнопку Inicializate. Заполняет переменные a_x, Ssh_x, Vmax_x, a_y, Ssh_y,Vmax_y значениями, введенными оператором.

.        Модуль GotoX. Вызывается при нажатии на кнопку Goto_0X. В обработчике этого события переменной vihod_0X_cmd присваивается значение 1