Инструкция по эксплуатации программного обеспечения (961926), страница 2
Текст из файла (страница 2)
GONEAR (A, B) – здесь A – это точка POINT, В – это расстояние до точки А. Выводит манипулятор в точку с координатами X, Y, (Z – B)
GOSNEAR( A, B) – здесь A – это точка POINT, В – это расстояние до точки А. Выводит манипулятор в точку с координатами X, Y, (Z – B). Движение выполняется по прямой.
MOVE (X, Y, Z) – X, Y, Z – координаты схвата в глобальной декартовой СК. Перемещает манипулятор из текущего положения на X, Y, Z мм по осям системы координат
Для того чтобы добавить пользовательскую команду в язык необходимо воспользоваться библиотекой типов (Type Library) и добавить в интерфейс IControl новый метод стандартным способом, учитывая что типы данных переменных не должны быть привязаны к платформе и архитектуре.
1.4 Модуль драйвера порта
Для того, чтобы осуществить связь между компьютером и контроллером по последовательному порту, используется подпрограмма драйвера COM порта.
Необходимо использование следующих функций:
-
Открыть порт
-
Сконфигурировать порт, то есть определить скорость передачи, контроль четности, количество бит данных.
-
Установить тайм-ауты передачи.
-
Записать данные в порт
-
Прочитать данные из порта
-
Закрыть порт.
Функции для работы с COM-портом находятся в файле Ms.h. В этом файле определен класс драйвера порта содержащий следующие методы:
boolean Open(char port[], DWORD BaudRate, BYTE ByteSize,BYTE Parity, BYTE StopBits) - функция открытия порта. Возвращает TRUE, если порт открылся нормально.
Close(void) - закрытие порта.
ResetRB(void) - очистка буфера приема.
ResetWB(void) - очистка буфера передачи.
unsigned short Read(BYTE *buffer, unsigned short numbytes) - возвращает количество считанных байт.
unsigned short Write(BYTE *buffer, unsigned short numbytes) - возвращает количество переданных байт.
unsigned short MSerial::GetRBSize(void) - возвращает число принятых символов в буфере приема (еще не считанных функцией Read).
unsigned short GetWBSize(void) - возвращает число еще не переданных символов в буфере передачи.
Открытие файла COM-порта может осуществляться как в оверлейной так и в неоверлейной системе. В нашем случае использовалась неоверлейная, однако в целях оптимизации использования ресурсов процессора планируется реализовать оверлейную систему. Для этого нужно будет отредактировать одну строку функции Open.
1.5 Пульт ручного управления
По нажатию пункта меню “Ручное управление” появляется следующее окно:
Рис 6
С помощью этого модуля пользователь может вручную, путем поворота или линейного перемещения звеньев вывести схват в определенную точку. Далее запоминаются(заносятся в массив данных) координаты данной точки. Для удобства работы сделана кнопка Calibrate, которая позволяет запустить процедуру калибровки прямо с пульта, не прибегаю к интерпретатору. После этого можно в основном окне программы добавить текущее положение в память системы управления.
Рис 7
Для начала работы с основной программой необходимо:
-
Запустить файл ckamko.exe
-
Выбрать пункт меню настройка. Появится следующее окно.
Рис 8
-
Выбрать COM-порт, к которому подключен контроллер управления.
-
Нажать кнопку «Установить соединение». В случае успешного отклика системы окно закроется.
-
Набрать текст программы или загрузить ранее сохраненный текст с помощью меню Файл -> Открыть
-
Нажать кнопку «Выполнить». Манипулятор начнет движение. Кнопка «Выполнить» будет недоступна, пока программа не будет выполнена. Промежуточная информация будет выводиться в окне «Журнал событий».
2. Протокол обмена между ПК и блоком управления
Связь машины верхнего уровня с промежуточным микроконтроллером осуществляется по последовательному каналу типа RS-232С с настраиваемой скоростью (по умолчанию 19200 Бод). Обмен данными между PC и микроконтроллером производится только по инициативе первого по командному протоколу.
В системе предусмотрено два типа посылок.
1 Тип – сервисные команды высокого приоритета. Посылка состоит из одного байта, что позволяет обеспечить максимально быструю обработку команды блоком управления приводами. Сервисная команда состоит из 10 бит. Старший бит данных должен быть равен 1
| стартовый бит | 8 бит данных | 1 стоповый бит |
В настоящий момент предусмотрено 3 сервисных команды:
Код 0x81: Команда экстренной остановки двигателей. Манипулятор прекращает движение. Двигатели переводятся в режим удержания.
Код 0x82: Команда снятия управления. Снимается напряжение с драйверов двигателей и с обмоток шаговых двигателей. Управление манипулятором в данном режиме невозможно.
Код 0х83: Команда возвращения управления. Напряжение подается на драйверы двигателей. Возможно получение команд на перемещение.
2 Тип – команды нормального режима работы. Для того чтобы осуществить поворот двигателя на n шагов со скоростью v, необходима посылка из 6 байт. Для того чтобы осуществить перемещение манипулятора, нужна посылка для каждого из 5 двигателей. Таким образом, максимальная длина посылки 30 байт, минимальная 6 байт.
Команда на перемещение двигателя состоит из 6 байт:
Байт 1 называется контрольным:
| 0 | адрес | адрес | адрес | Направление | Шаг/полушаг | ½ обмотки | Коллизия данных |
Старший бит равен 0.
Три оставшиеся бита старшей тетрады содержат адрес приводного контроллера (от 1 до 6).
Старший бит младшей тетрады отвечает за направление вращения двигателя:
0 – по часовой стрелке, 1 - против часовой стрелки
Следующий бит устанавливает шаговый или полу шаговый режим работы двигателя.
0 – полно шаговый режим, 1 – полу шаговый режим.
Следующий бит устанавливает энергетический режим работы шагового двигателя.
0 – включены две обмотки, 1 – включена одна обмотки.
По умолчанию всегда работают 2 обмотки – это позволяет увеличить момент и сохранять его постоянным.
Младший бит – показывает, что в посылке есть байт, значение которого совпадает с кодом сервисной команды. При разборе посылки на нижнем уровне сервисные команды будут отключены на время передачи посылки, которое на скорости 19200 кбит/с составляет чуть меньше 5 миллисекунд..
Далее в посылке следуют 2 байта – слово шагов.
Слово шагов передает на нижний уровень команду на выполнение от 0 до 65535 шагов. На практике значение должно быть кратно 128, так как это минимальное время, за которое может быть выполнен один шаг двигателя. Старший бит слова содержит старшую часть числа, младший – младшую.
Следующие 2 байта – слово периода.
С учетом специфики управления шаговыми двигателями и осуществления режимов разгона и торможения было принято решение отправлять на нижний уровень не скорость, а период времени в миллисекундах, за которое двигатель должен выполнить количество шагов указанных в слове шагов. Слово позволяет передавать значение периода от 0 до 65535 мс. Старший бит слова содержит старшую часть числа, младший – младшую
Последний байт представляет собой контрольную сумму, подсчитанную по алгоритму CRC8 для 5 предыдущих байт.
Поскольку передача и прием информации производится по одним и тем же проводам, нельзя передавать несколько пакетов подряд, необходимо дождаться ответа на каждый переданный пакет либо истечения таймаута, прежде чем передавать следующий. Поэтому было принято решение создать математическую модель обмена сообщениями между уровнями при выполнении команд нормального режима работы системы.
Взаимодействие между уровнями системы управления в виде сети Петри представлено на рис. 7.2:
Переход t1 – передача данных от верхнего уровня(COM-порт) на средний уровень(UART0 микроконтроллера ATmega128).
Переход t2 – передача данных от среднего уровня на приводные контроллеры.
Переход t3 – отработка приводными контроллерами заданных перемещений.
Переход t4 – переход в состояние ожидания запроса отчета о выполнении движения. Ожидание сигнала на линии XBUSA.
Переход t5 – запрос верхним уровнем отчета о выполнении движения после истечения задержки с периодом n, n – время необходимое приводным контроллерам для выполнения заданных перемещений степеней манипулятора.
Переход t6 – установка канальных задержек после обнаружения синхросигнала XBUSA.
Переход t7 – для каждого канала после истечения канальной задержки включается передатчик UART, линия TX переводится в состояние высокого уровня, передаются данные на средний уровень (на UART1 микроконтроллера ATmega128), отключается передатчик UART, линия TX переводится в «третье состояние» (tri-state).
Переход t8 – получение отчетов (микроконтроллером ATmega128) о выполнении заданных перемещений всеми приводными контроллерами.
Переход t9 – передача отчета среднего уровня о выполнении задачи на верхний уровень.
Позиция P1 – начало передачи.
Позиция P2 – установка синхросигнала XBUSA.
Позиция P1 – снятие синхросигнала XBUSA.
Позиция P1 – конец передачи.
Позиции Si – загрузка счетчика постоянным значением для установки временной задержки в миллисекундах.
Позиции Сi – счетчики задержки.
Позиции di – «сток» счетчика задержки.
Данная сеть показала, что в предложенном алгоритме нет тупиковых ветвей и бесконечных циклов. Дальнейшая отладка протокола передачи проводилась с помощью программы ckamdemo и изготовленной системы управления.
3. Алгоритмы ПО приводного уровня.
3.1 Алгоритм основного цикла программы
Основной цикл программы запускается при подаче питания на микроконтроллер или при подаче сигнала RESET.
Основной цикл программы включает следующие этапы:
Инициализация оборудования (только при первом запуске, формально – в основной цикл не входит) – включает настройку портов ввода/вывода, настройку скорости приёма/передачи данных по универсальному асинхронному последовательному интерфейсу UART, инициализацию таймеров, настройку каналов внешних и внутренних прерываний, инициализацию драйвера управления шаговым двигателем.
Ожидание связи с центральным модулем (только при первом запуске, формально – в основной цикл не входит) – заключается в ожидании сигнала разрешения от центрального контроллера на включение передатчика и передачи сигнала готовности. Завершением этого этапа является установка связи с центральным уровнем.
Приём байта команды – приём из буфера байта команды на перемещение, повторяется до тех пор, пока из буфера не принято 6 байт команды.
Проверка контрольной суммы – модулем формирования контрольной суммы подсчитывается CRC первых 5 байт команды на перемещение и сравнивается со значением шестого байта принятой крманды.
Анализ команды – в соответствии со значением первого байты команды устанавливается режим перемещения двигателя - полношаговый/полушаговый, а так же направление перемещения двигателя. Второй и третий байты определяют количество шагов, четвёртый и пятый – скорость перемещения.
Вызов подпрограммы управления двигателем – происходит передача данных в подпрограмму управления работой привода.
3.2 Алгоритм обработки сервисных команд
Программа обработки сервисных команд запускается в режиме прерывания во время приёма очередного байта по UART. Сервисная команда имеет размер – 1 байт.
Если поступила одна из сервисных команд, то выполняется соответствующая сервисная подпрограмма и байт сервисной команды в буфер не записывается. Если принятый байт не является сервисной командой, то он записывается в буфер команд.















