Работа посредством ModBus
Состав сенсорной сети Modbus робототехнической системы «Промобот» образован 4 связанными каналами, распределение устройств по которым выполнено по функциональной принадлежности к определенным частям робота. Каждое устройство
в modbus-сети имеет индивидуальный адрес.
Состав устройств сети робототехнической системы показывает наличие преимущественно сервоприводов для управления движениями робота. Робот содержит плату для управления светодиодной матрицей «Лица». «Уши» робота снабжены специальной светодиодной лентой с многосегментными светодиодами.
Каждое устройство modbus-сети робота содержит определенное количество регистров различного назначения. Рассмотрим организацию регистров сервопривода. Устройства такого типа имеют типовую для «Промобот» структуру регистров. Состав устройства определен 57 регистрами. Основными для управления сервоприводом робота являются регистры с номерами 41, 42, 43, 46, 47, 48, 52. Назначение регистров показано в табл. 3. Каждый регистр имеет тип Holding register.
Рассмотрим расположение и назначение устройств modbus-сети.
Устройства правой руки робота:
- Сервопривод 21: вращение сустава 1 в плоскости оси X.
- Сервоприводы 22 и 23: вращение сустава 2 вокруг оси Z, вращение сустава 2 в плоскости оси Y.
- Сервоприводы 24 и 25: вращение сустава 3 вокруг оси Z, вращение сустава в плоскости оси X.
- Сервопривод 26: движение “ладони” робота, движение “пальцев” робота.
Устройства левой руки робота:
- Сервоприводы: 31, 32, 33, 34, 35, 36. Назначение и движение идентично сервоприводам правой руки.
Устройства группы «Голова»:
- Сервоприводы: 41 и 42: вращение головы вокруг оси Z. Наклон вверх/вниз.
Устройства группы «Торс»:
- Сервопривод 13: движение торса вдоль оси Z.
- Сервоприводы 11 и 12: наклон торса право (влево), вверх (вниз).
Ведущим устройством на данном этапе работы является плата Main_Board с программным обеспечением Servo_control. Окно программы содержит следующие области:
- область устройств «Servos»;
- значения регистров «Info»;
- область ошибок «Errors»;
- элемент управления сервоприводом (регистра 42) «Control»;
- строку RTU запроса «Send packet» для формирования запросов к ведомым устройствам в ручном режиме;
- поле «Packets» хранения запросов и ответов по транзакциям записи данных в регистры ведомых устройств.
Интерфейс программы прост для использования. Пользователь должен выбрать устройство (сервопривод) сети, разрешить работу двигателя (кнопка «Enable») и задать управление регистром (ползунок «Control»), либо в ручном режиме задать Modbus-пакет (кнопка «Send»).
Для выполнения работы с сетью Modbus в полунатурном режиме следуйте инструкциям:
- Выполним подключение персонального компьютера к исполняющему компьютеру Main_Board робота.
- Подключите робота к WiFi-точке доступа локальной сети лаборатории. Для этого используйте инструкции из руководства пользователя Promobot: на дисплее робота перейдите в меню настроек сети, выберете беспроводную сеть лаборатории и введите пароль, дождитесь вывода внешнего IP-адреса маршрутизатора робота.
- Откройте на компьютере программу VNC Viewer и создайте подключение по IP-адресу маршрутизатора робота и номеру порта 9455. Используйте пароль mainboard для подключения к VNC-серверу.
- Отключим на роботе программное обеспечение мастера и запустим для работы в рамках лабораторной программу Servo_control.
- Запустите командную оболочку bash и выполните команду отключения программного обеспечения мастера:
sudo svc –d /etc/service/mboard
Это необходимо, так как в сети может быть только одно устройство-мастер. Для отключения приложения используется ключ –d, для включения –u, рестарт -t. Если приложение было включено до работы, не забудьте после выполнения лабораторной работы снова запустить его.
- Запустите пользовательскую программу мастер «Servo_control» через интерпретатор bash, предварительно сменив директорию:
cd /home/student/lab/
./demo_control
Работа с Modbus-сетью в полунатурном режиме.
- Ознакомьтесь с назначением устройств modbus-сети. Для этого в программе Slave_control последовательно выполните работу с каждым ведомым устройством. Управление на сервопривод устройства можно передать элементом управления «ползунок» Control, прежде разрешив управление двигателем кнопкой «Enable». Разберитесь с управлением осями движения робота. Запишите назначение каждого сервопривода в отдельную таблицу.
Начните изучение сервоприводов с наиболее безопасных устройств 21, 31.
Разберите форматы запросов Modbus RTU к ведомым устройствам сети. В качестве примера рассмотрите запрос на управление сервоприводом 31 левой руки, установление задания управления в 1000. Для управления сервоприводом необходимо сначала установить в 1 значение регистра 41 (значение разрешения работы двигателя) пакетом '1f 06 0029 0001 9A7C'
. После этого можно выставлять уставку двигателю (регистр 42) 1000 запросом '1f 06 002A 03E8 AB02'
. Обратите внимание, что программа в поле «Send packet» автоматически рассчитывает контрольную сумму CRC и ее вводить не нужно.
- Запишите следующие запросы (последовательности запросов) по управлению роботом, предполагая, что робот находится в исходном (расслабленном) состоянии:
– Полностью сбросить положения рук робота, т.е. привести их в исходное положение (руки опущены вдоль тела, задание разрешения (регистр 41) 1, положение двигателя (регистр 42) 0).
– Правка рука робота согнута в локтевом суставе и образует угол 90 градусов по отношению к предплечью.
– Левая рука робота поднята в плечевом суставе (вбок), согнута в локтевом суставе и поднята вверх, образуя прямой угол с предплечьем.
– Правая рука робота отведена назад вдоль тела и образует с ним прямой угол.
– Торс робота наклонен на правый бок и имеет отклонение назад.
-
Рассмотрите способы управления устройствами «Лицо» и «Уши» робота.
– Выведите текст ‘HELLO!’ на лицо робота. Для передачи текстовых данных на «лицо» робота недостаточно использования процедур записи данных в регистры робота. Роботу должна быть передана байтовая последовательность данных с определенным кодом функции. В качестве кода функции необходимо задать код определенный в устройстве робота ‘AD’. В качестве данных необходимо закодировать в шестнадцатеричный формат текст по таблице ASCII (приложение), записать сообщение ADU и отправить RTU-запрос через поле «Send Packet». Рассмотрим пример записи текста, для этого запишите RTU-пакет работы с устройством 43(2B):
'2B AD 000D 0006 0A 0A 0A 0A 20 20 20 48 45 4C 4C 4F 21 00 С118'
,
где 2B – адрес устройства,
AD – код функции,
000D – число передаваемых символов текста,
0006 – цвет текста,
0A 0A 0A 0A – отступ по вертикали на 4 строки (ASCII-сим-вол переноса строки),
20 20 20 – отступ по горизонтали на 3 символа (ASCII-сим-вол пробела),
48 45 4C 4C 4F 21 00 – шестнадцатеричное представление символов слова ‘HELLO’ (ASCII, см. приложение), дополнено 0x00,
C118 – контрольная сумма пакета.
- Осуществите управление светодиодной подсветкой устройства «Уши» робота (устройства 44, 45). Управление подсветкой производится по определенному алгоритму. При этом задействованы следующие регистры:
- Команда всего кольца (9) – задает режим работы всех светодиодов. Возможные режимы работы: 0 – выключение, 1 – включение, 2 – плавное включение и последующее горение, 3 – плавное выключение из включенного состояния, 4 – мигание.
- Период одного цикла (10) – задает время работы светодиодов. Период мигания, время плавного включения/выключения.
- Максимальная яркость (11,12,13) – задает максимальную яркость [0;100] (посредством широтно-импульсной модуляции, ЩИМ) для каждого цвета (красный, голубой, зеленый, RGB)) для всех светодиодов.
- Максимальная яркость сектора (16,19,22,25… 40) – задает максимальную яркость [0; 100] для каждого из 9 секторов светодиодной ленты.
- Показания сенсора (48) – показания с датчика прикосновения.
Алгоритм подразумевает необходимость конфигурирования параметров режима подсветки. Рассмотрим пример мигания красным цветом всей подсветки с периодом 2 с:
- Запись во все регистры «Максимальная яркость сектора» значение 60.
- Запись в регистр «Максимальная яркость» красного (регистр 11) – яркость красного цвета светодиодов 80.
- Запись в регистр «Период одного цикла» – период мигания (мс) 2000;
- Запись в регистр «Команда всего кольца» – цикличное мигание светодиодами (значение 4).
- Для остановки мигания записать в регистр «Команда всего кольца» значение 0.