Лабораторный цикл: «Модели взаимодействия потоков и процессов в операционной системе qnx-neutrino»




Дата канвертавання25.04.2016
Памер132.62 Kb.
Лабораторный цикл: «Модели взаимодействия потоков и процессов в операционной системе QNX-Neutrino»

Дорогов А.Ю

Санкт-Петербургский электротехнический университет, кафедра Автоматики и процессов управления dorogov@lens.spb.ru


1.Задачи лабораторного цикла. Лабораторный цикл является составной частью учебного курса Программирование систем реального времени для студентов специальности 210100 - Управление и информатика в технических системах. Основным содержанием курса является изучение системных вызовов, архитектуры ядра и средств управление ресурсами операционной системы (OC) реального времени QNX-Neutrino.

Основная задача лабораторного цикла заключается в обучении студентов практическим навыкам программирования многопоточных приложений с использованием среды разработки Momentics IDE. Основными целями лабораторного цикла являются:



  • Методика создания прикладных программ в OC QNX-Neutrino.

  • Освоение низкоуровневого интерфейса управления технологическим объектом.

  • Изучение системных функций QNX по локализации процессов.

  • Изучение функций установления соединений и передачи сообщений, импульсов и сигналов.

  • Изучение функций создания и управления потоками.

  • Изучение функций создания и управления виртуальными таймерами.

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

2.Лабораторные средства. Все занятия объединены общей темой, связанной с разработкой прикладных программ для управления программной моделью технологического робота (далее эмулятор робота). Реальным прототипом эмулятора является учебный робототехнический комплекс (УРТК), который в течение нескольких лет использовался для выполнения лабораторных работ по курсу Системное программное обеспечение. Робототехнический комплекс состоит из манипулятора, блока управления, устройства ввода-вывода информации и управляющей ЭВМ (Рис.1). Эмулятор робота в режиме реального времени моделирует работу манипулятора робота, блока внешнего управления и интерфейсного контроллера.




Рис. 1. Структурная схема УРТК. X,Y,Z - координаты линейного перемещения, F - поворот основания, W - поворот головки, S - управление схватом, D - управление двигателем.

Манипулятор. Манипулятор представляет собой устройство из трех взаимно-перпендикулярных ходовых винтов, установленных на подвижном основании и поворотной головки. Привод на ходовые винты и поворотную головку осуществляется от электродвигателей постоянного тока со встроенным редуктором. Поворотная головка оборудована схватом и двигателем, имитирующим привод сверлильного станка. УРТК позволяет имитировать работу обрабатывающих и транспортно-складских устройств.

Блок управления. Блок управления и устройство ввода-вывода информации представляет собой электронное устройство, которое позволяет осуществлять работу манипулятора в режиме ручного и автоматического управления. Управление УРТК в режиме ручного управления осуществляется с клавиатуры блока управления, а в режиме автоматического от ЭВМ. В режиме автоматического управления для определения текущего положения каретки манипулятора используются фотодатчики импульсного типа, установленные по координатам X,Y,Z. Импульсы датчика порождаются вращением 6-ти лепестковой крыльчатки, расположенной на валу винтовой пары. ЭВМ осуществляет подсчет импульсов поступивших от датчика с момента начала движения, что позволяет с высокой точностью определить текущее положение каретки манипулятора.

Для координат X,Y,Z существуют герконовые датчики начального положения. Для координат W,F - импульсные датчики перемещения отсутствуют, есть только герконовые датчики начального и конечного положения.



Контроллер робота-манипулятора. Контроллер робота построен на основе программируемой микросхемы 580ВВ55 (рис.2). Микросхема предназначена для организации обмена 8-ми битовыми данными и содержит три независимых регистра.




Рис. 2. Функциональная схема контроллера робота
Регистры контроллера настроены на выполнение следующих операций:

  • регистр A[0...7] - на вывод данных;

  • регистр C[0...3] -на ввод данных;

  • регистр C[4...5] -на вывод данных;

  • регистр B[0...7] -на ввод данных.


3. Программный интерфейс эмулятора робота. Эмулятор (программа roby) представляет собой процесс, реализующий одновременно функции сервера и клиента. Для управляющих команд эмулятор выступает как неполный сервер, регистрирующий для межпроцессного взаимодействия имя "apu/roby". Локализация сервера выполняется командой name_open(), возвращающей управляющему процессу идентификатор соединения. Программный интерфейс с серверной компонентой обеспечивается посредством передачи QNX-сообщений. Каждое сообщение состоит из фиксированной части - кода команды длиной в 1 байт и переменной части - значения команды длиной три байта. Значение регистра контроллера передается в первом байте, старшие байты не используются. Для передачи номера канала в сообщении используются два младших байта. На команды чтения эмулятор возвращает ответ длиной в один байт, который содержит прочитанные данные. На команды записи и инициализации ответа не предусмотрено (т.е. формируется ответ нулевой длины). Формат управляющих команд и сообщений программного интерфейса приведен в таблице 1.
Таблица 1

Команда

Код сообщения

Данные

Ответ

Запись в регистр А

0

Значение регистра

-

Запись в регистр С

1

Значение регистра

-

Чтение регистра С

2

-

Значение регистра

Чтение регистра В

3

-

Значение регистра

Инициализация импульсного датчика X

5

идентификатор канала или 0

-

Инициализация импульсного датчика Y

6

идентификатор канала или 0

-

Инициализация датчиков конечных положений координаты W

7

идентификатор канала или 0

-

Инициализация датчиков конечных положений координаты F

8

идентификатор канала или 0

-

Эмулятор содержит внутренний таймер и счетчики по каждой координате. Счетчики выполняют подсчет импульсов таймера, эмулируя пошаговые перемещения каретки робота. При движении робота значения внутренних счетчиков по всем координатам непрерывно выводятся в терминальном окне. Темп работы счетчиков зависит от координаты, а возможные состояния ограничены диапазоном: 0-1024 для координат X,Y,Z и 0-64 для координат W,F. Счетчики запускаются, когда получена команда на перемещение и прекращают счет при достижении границ допустимого диапазона. Состояние импульсных датчиков координат X,Y,Z изменяется на каждом шаге перемещения, и отображается битовыми переменными регистра B контроллера. При достижении крайних положений изменяют свое состояние датчики конечных положений, их значение отображается битовыми переменными регистров B и C.

Управление реальным роботом (УРТК) осуществлялось за счет непрерывного циклического опроса регистров контроллера B и C. Счетчики перемещений в этом случае поддерживались в управляющей программе. Такой вариант управления возможен и для эмулятора, но для учебных целей функции эмулятора расширены возможностью передачи численных значений внутренних счетчиков положений с помощью сигналов и импульсных сообщений. Для перехода в режим расширенного использования датчики эмулятора должны быть инициализированы номером канала или нулевым значением. Инициализация датчиков номером канала активизирует эмулятор робота для работы в режиме клиента – источника сообщений. Сервером в этом случае выступает управляющая программа, которая открывает канал (при помощи вызова ChannelCreate()) и передает эмулятору номер этого канала (в общем случае на каждый датчик может быть использован свой собственный канал). Эмулятор использует номер канала для установления соединений, через которые посылаются импульсные сообщения (pulse) при каждом изменении значений импульсных фотодатчиков.

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

Если при инициализации вместо номера канала, передано нулевое значение, то информация о состоянии координат будет передаваться сигналами (SIGUSR1). Код сигнала несет информацию о координате, а значение - о состоянии соответствующего счетчика.

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



Таблица 2

Координата робота

Код импульса

Значение импульса

Код сигнала

Значение сигнала

X-импульсный

0x01

Счетчик X

-0x01

Счетчик X

Y-импульсный

0x02

Счетчик Y

-0x02

Счетчик Y

Z-импульсный

0x04

Счетчик Z

-0x04

Счетчик Z

W-начало

0x10

Счетчик W

-0x10

Счетчик W

W-конец

0x08

Счетчик W

-0x08

Счетчик W

F-начало

0x40

Счетчик F

-0x40

Счетчик F

F-конец

0x20

Счетчик F

-0x20

Счетчик F

Передача информации о состоянии датчиков начальных положений по координатам X,Y,Z не предусмотрена, их состояние может контролироваться только в режиме опроса регистра B контроллера.


4.Характеристика лабораторных работ. Лабораторный цикл состоит из пяти лабораторных работ, названия и продолжительность которых представлены в таблице 3.

Таблица 3



Название лабораторной работы

Продолжительность

1


Технология создания программных проектов в операционной системе QNX

2 часа

2

Отладка программ в интегрированной системе Momentics IDE

2 часа

3

Программирование низкоуровневого интерфейса робота манипулятора

4 часа

4

Разработка многопоточной программы управления роботом, по координатам линейных перемещений

4 часа

5

Разработка многопоточной программы управления роботом, по координатам угловых перемещений

4 часа

Первые две лабораторные работы предназначены для обучения студентов практическим навыкам создания и отладки программных проектов с использованием интегрированной системы Momentics IDE. Кроме того, в лабораторной работе 2 выполняются задания связанные с исследованием механизмов синхронизации ядра, передачи и приема сигналов и обмена сообщениями. Для этой цели использованы тестовые примеры из HELP документации QNX Neutrino.


Лабораторная работа 3. Программирование низкоуровневого интерфейса робота манипулятора. Ставит целью:

  • Освоение низкоуровневого интерфейса с роботом манипулятором.

  • Изучение системных функций QNX идентификации процесса по имени.

  • Изучение функции передачи сообщения.

Результатом выполнения является разработка однопоточного приложения prog1 способного предавать управляющие команды эмулятору робота.
Лабораторная работа 4. Разработка многопоточной программы управления роботом, по координатам линейных перемещений. Целью лабораторной работы является освоение системных средств, порождения программных потоков и поддержки взаимодействия процессов через импульсы и сигналы. Лабораторная работа включат в себя три задания:




Рис. 3

Задание 1. Взаимодействие процессов через импульсы. На основе программы prog1 необходимо разработать двухпоточное приложение prog2, в котором поток main реализует пользовательский интерфейс для управления эмулятором робота, а дочерний поток Display отображает текущее состояние линейных координат X,Y,Z. (Рис. 2)

Поток Display принимает и обрабатывает импульсы от датчиков перемещения робота манипулятора. Импульсы формируются при перемещении по любой координате на один шаг. При запуске поток Display открывает канал и передает сообщения, инициализирующие датчики линейных перемещений. Выполняя инициализацию, эмулятор робота открывает соединения с каналом для каждого датчика. Инициализация датчиков подтверждается сообщениями Init X, Init Y, Init Z которые отображаются эмулятором в терминальном окне. На экран выводятся также идентификаторы соединений. Поток Display выполняет отображение значений координат в терминальном окне.



Задание 2. Исследование конфигурацию каналов и соединений с помощью интегрированной системы Momentics IDE. В этом задании необходимо создать целевой проект QNX Target System Project и используя перспективу QNX System Information получить информацию о каналах, идентификаторах и дескрипторов соединений построенного приложения prog2 при взаимодействии с эмулятором робота.

Задание 3. Взаимодействие процессов через сигналы. Эмулятор робота способен генерировать сигналы после выполнения процедуры инициализации датчиков перемещения значением нулевым значением. Для взаимодействия используется сигнал SIGUSR1. Сигнал формируется при изменении любой линейной координаты X,Y,Z на один шаг. Сигналы должны приниматься потоком Display. В этом задании необходимо создать новый проект prog3, взяв за основу разработанный проект prog2. В новом проекте необходимо написать обработчик сигналов, который логически выполняет те же функции приема данных, что и при использовании импульсных сообщений.
Лабораторная работа 5. Разработка многопоточной программы управления роботом, по координатам угловых перемещений. Цель работы: изучить и освоить системные средства создания виртуальных таймеров и способов обработки генерируемых ими событий. В лабораторной работе необходимо разработать программу управления роботом по координатам W и F. Робот манипулятор не имеет импульсных датчиков перемещения по этим координатам. Текущее положение робота по координате W и F можно измерить количеством элементарных временных интервалов, которое затрачивается на перемещение робота из начального положения в заданное текущее. В этом случае шаг перемещения равен длительности элементарного временного интервала.




Рис. 4
Для задания временного интервала и формирования события по его истечению предлагается использовать виртуальный таймер. Передача события от интервального периодического таймера в программный процесс выполняется с помощью сигнала или импульсного сообщения. На следующем рис.4 показан программный интерфейс трехпоточного приложения для управления роботом по координатам X,Y,Z и W,F.

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

По координатам W и F робот оснащен датчиками конечных положений. При достижений крайних положений (начального и конечного) робот может формировать сигнал SIGUSR2 или импульсное сообщение. Предварительно датчики конечных положений должны быть инициализированы.

Лабораторная работа содержит два задания:



Задание 1. Таймеры с импульсным выходом, датчики с импульсным выходом. В этом задании необходимо создать поток DisplayWF, в котором определить таймер с периодической генерацией импульсов. Импульсы таймера должны обрабатываться в этом же потоке. Период таймера так чтобы обеспечить 1024 шага при полном перемещении по координатам W, F. Поток DisplayWF должен отображать значения координат в терминальном окне.

Задание 4. Таймеры с сигнальным выходом, датчики с сигнальным выходом. Эта программа внешне должна работать точно также как и программа prog4 в задании 1, но событиями таймеров должны являться сигналы. Датчики конечных положений должны быть также инициализированы для передачи сигналов.
5. Заключение. В методических материалах к лабораторным работам приводятся примерные рекомендации по созданию проектов и ссылки на используемые системные вызовы. Перед выполнением лабораторных работ студенты располагают лекционным материалом, где подробно рассмотрены механизмы взаимодействия потоков и соответствующие системные вызовы. В отчетах студенты приводят комментированные тексты разработанных программ. Лабораторные работы являются базой для выполнения последующего курсового проектирования. Опыт апробации лабораторного цикла показал, что студенты способны за выделенное время уверенно освоить средства программирования многопоточных приложений в операционной системе QNX Neutrino. Использование реального прототипа для моделирования объекта управления позволяет сформировать у студентов устойчивые ассоциации о предназначении системных вызов QNX Neutrino.


База данных защищена авторским правом ©shkola.of.by 2016
звярнуцца да адміністрацыі

    Галоўная старонка