Палитра блоков
Для того, чтобы сделать программирование роботов EV3 более простым и интуитивно понятным в среде программирования EV3 используется палитра блоков. Это блоки программирования различного цвета.
Всего палитра блоков состоит из шести закладок разного цвета слева направо:
- Зеленая – «Действие»
- Оранжевая – «Управление операторами»
- Желтая – «Датчики»
- Красная – «Операции с данными»
- Синяя – «Дополнения»
- Зеленая – «Мои блоки»
Каждая из этих закладок содержит различные блоки программирования. Кратко опишу состав каждой закладки из палитры блоков.
Закладка «Действие»
Это закладка зеленого цвета и каждый блок имеет в своей верхней части зелёную полосу. Всего в закладке находится семь блоков действия. При помощи этих блоков можно программировать управление моторами, экраном, звуками и индикатором состояния модуля. Блоки действия используются очень часто даже начинающими робототехниками.
Перечислю названия блоков:
- Блок – «Средний мотор»
- Блок – «Большой мотор»
- Блок – «Рулевое управление»
- Блок – «Независимое управление моторам»
- Блок – «Экран»
- Блок – «Звук»
- Блок – «Индикатор состояния модуля»
Закладка «Управление операторами»
В палитре блоков это закладка оранжевого цвета. При помощи блоков программирования из этой закладки можно реализовывать достаточно сложные программы управления роботом EV3. В ней содержатся сложные алгоритмические конструкции.
Всего в закладке «Операторы» пять блоков:
- Блок – «Начало»
- Блок – «Ожидание»
- Блок – «Цикл»
- Блок – «Переключатель»
- Блок – «Прерывание цикла»
Работа с этими блоками более понятна, чем использование тех же самых конструкций в любом текстовом языке программирования.
Закладка «Датчики»
Это закладка желтого цвета. Для создания обратной связи с робототехнической системой необходимо применять различного типа датчики. Ещё их называют сенсорами. Датчики Lego EV3 позволяют автономно управлять роботом EV3.
Использование датчиков уже дает возможность сделать не просто электромеханическую систему. Это позволяет создать полноценного робота, способного реагировать на изменения в окружающей среде.
Всего в закладке «Датчики» одиннадцать блоков:
- Блок – «Кнопки управления модулем»
- Блок – «Датчик цвета»
- Блок – «Гироскопический датчик»
- Блок – «Инфракрасный датчик»
- Блок – «Вращение мотора»
- Блок – «Температурный датчик»
- Блок – «Таймер»
- Блок – «Датчик касания»
- Блок – «Ультразвуковой датчик»
- Блок – «Счетчик электроэнергии»
- Блок – «Датчик звука NXT»
У всех блоков датчиков из палитры блоков Lego EV3 есть режимы измерения и сравнения. В некоторых блоках еще добавлен режим калибровки и сброса.
Палитра блоков. Закладка «Операции с данными»
Это закладка красного цвета. Здесь можно производить различные математические операции с константами, переменными, массивами. Без использования блоков операций с данными сложно принимать участие в различных конкурсах и соревнованиях.
Закладка «Операции с данными» состоит из десяти блоков программирования:
- Блок – «Переменная»
- Блок – «Константа»
- Блок – «Операции над массивами»
- Блок – «Логические операции»
- Блок – «Математика»
- Блок – «Округление»
- Блок – «Сравнение»
- Блок – «Интервал»
- Блок – «Текст»
- Блок – «Случайное значение»
В этой закладке палитры блоков широко используется булева алгебра, различные логические операции и операции с массивами.
Палитра блоков. Закладка «Дополнения»
Закладка синего цвета. Блоки программирования в закладке дополнений позволяют значительно расширить возможности робототехнических систем Lego EV3. С их помощью можно организовать совместную работу нескольких роботов. При помощи блока EV3 удаленно управлять другим Lego роботом и многое другое.
Закладка «Дополнения» в палитре блоков состоит из десяти блоков программирования:
- Блок – «Доступ к файлу»
- Блок – «Регистрация данных»
- Блок – «Обмен сообщениями»
- Блок – «Подключение через Bluetooth»
- Блок – «Поддерживать в активном состоянии»
- Блок – «Необработанное значение датчика»
- Блок – «Нерегулируемый мотор»
- Блок – «Инвертирование мотора»
- Блок – «Остановить программу»
- Блок – «Комментарий»
На начальном этапе изучения программирования роботов Lego EV3 эти блоки не понадобятся. Но с ростом знаний и усложнением решаемых задач без этих блоков будет тяжело обойтись.
Палитра блоков. Закладка «Мои блоки»
Это закладка зеленого цвета. Изначально в ней не содержится ни одного блока. Все блоки создает сам пользователь в том случае, когда есть часто повторяющиеся конструкции. Это позволяет не писать код каждый раз. Вместо этого можно использовать собственный сохраненный блок.
Каждую из закладок палитры блоков я разберу отдельно в статьях. Также приведу примеры использования блоков программирования.
LEGO Mindstorms Education EV3 — Обзор конструктора. Читать последние новости из мира Лего – EduCube
Рассмотрим, что же изменилось в EV3 по сравнению со старой версией NXT.
В наборе будет 3 мотора, но один из них будет отличаться как по размерам так и по техническим характеристикам.
Датчик звука был заменен на гироскоп. Остальные типы датчиков остались прежними.
Еще одной особенностью является авто-определение датчиков и моторов при их подключении к блоку – о данной особенности я расскажу в разделе, описывающем новую среду программирования EV3.
Характеристики датчиков и моторов представлены ниже.
Датчик касания
Датчик касания EV3 очень похож на датчик предыдущей версии. Он определяет, когда кнопка нажата или отпущена, также он может подсчитывать одиночные или многократные нажатия.
Датчик цвета
Датчик цвета EV3 различает 7 цветов и может определить отсутствие цвета. Как и в прошлой версии он может работать как датчик освещенности.
- Измеряет отраженный красный свет и окружающее освещение
- Способен определять различия между белым и черным или цветами: синим, зеленым, желтым, красным, белым и коричневым
- Частота работы: 1 кГц
Гироскопический датчик EV3 измеряет вращательное движение робота и изменение его положения.
- Может использоваться для определения текущего направления вращения
- Точность: +/- 3 градуса на 90 градусов оборота (в режиме измерения наклона)
- Может определить максимум 440 градусов/c (в режиме гироскопа)
- Частота работы: 1 кГц
Ультразвуковой датчик расстояния
К основной функции ультразвукового датчика EV3 добавилась еще одна — он также может «слушать» ультразвуковые колебания, испускаемые другими датчиками ультразвука.
- Может измерять расстояние в диапазоне 3 — 250 см.
- Точность измерений : +/- 1 см
- Дискретность результата измерений: 0.1 см.
- Может быть использован для поиска других активных ультразвуковых датчиков (режим прослушивания)
- Красная LED подсветка вокруг «глаз»
Большой мотор
Большой сервомотор EV3 очень похож на предыдущую версию мотора NXT, однако корпус мотора стал чуть больше (виртуально он теперь занимает 14x7x5 отверстий против бывших 14x6x5). Также были изменены места крепления моторов и их тип.
- Максимальные обороты — 160- 170 об/мин.
- Заданный крутящий момент — 40 Н/см
- Реальный крутящий момент — 20 Н/см.
- Встроенный датчик угла поворота (энкодер) мотора с точностью 1 градус
Средний мотор
Средний сервомотор EV3 основан на Power Function моторе аналогичного размера. Дополнительное место потребовали только датчик угла поворота и порт для подключения. Этот мотор отлично подойдет для работы под низкими нагрузками и высокими скоростями.
- Максимальные обороты — 240- 250 об/мин.
- Заданный крутящий момент — 12 Н/см
- Реальный крутящий момент — 8 Н/см.
- Встроенный датчик угла поворота (энкодер) мотора с точностью 1 градус
NXT датчики, моторы и кабели совместимы с EV3, таким образом все ранее построенные роботы могут управляться новым блоком.
Программируемый блок EV3
Серьезные изменения произошли и с микрокомпьютером EV3. По сравнению с NXT, EV3 блок имеет более быстрый процессор, больше памяти. Прошивка блока EV3 базируется на свободно распространяемой ОС Linux, что дает возможность создавать свои прошивки для блока. Подключить робота к компьютеру теперь возможно не только через USB и Bluetooth, но и по Wi-Fi. Между собой роботы также могут «общаться» по USB, Bluetooth и Wi-Fi.
Ниже представлена сравнительная таблица характеристик NXT и EV3:
|
NXT | EV3 |
Процессор | Atmel 32-Bit ARM AT91SAM7S256 48 MHz 256 KB FLASH памяти 64 KB RAM памяти |
ARM9 300 MHz 16 Mb Flash памяти 64 Mb RAM памяти |
Со-процессор | Atmel 8-Bit ARM AVR, ATmega48 8 MHz 4 KB FLASH памяти 512 Byte RAM памяти |
отсутствует |
Операционная система | Проприетарная | Linux |
Порты ввода (для датчиков) | 4 порта Поддерживает аналоговые, цифровые датчики Скорость передачи данных: 9600 бит/с (I2C) |
4 порта Поддерживает аналоговые, цифровые датчики Скорость передачи данных: до 460.8 Кбит/с (UART) |
Порты вывода (для моторов) | 3 порта | 4 порта |
Передача данных по USB | Используется режим full speed: 12 Мбит/c | Используется режим high speed: 480 Мбит/с |
Подключение USB устройств | Нет возможности | Возможно последовательное подключение до 3 устройств, в том числе сетевых карт wi-fi и flash карт |
Устройство для чтения SD карт | Отсутствует | Поддерживает miniSD карты, максимальный объем — 32 Гб |
Подключение к мобильным устройствам | Возможно подключение к устройствам с ОС Android | Возможно подключение к устройствам с ОС Android и iOS (iPhone, iPad) |
Экран | LCD, монохромный 100 * 64 пикселей |
LCD, монохромный 178 * 128 пикселей |
Взаимодействие | Bluetooth USB 2.0 |
Bluetooth v2.1 DER USB 2.0 (при подключении к ПК USB 1.1 (при последовательном подключении нескольких устройств) Wi-Fi |
С EV3 в комплекте поставляется новая графическая среда разработки на базе LabView, похожая на NXT-G. Работать она будет, как и NXT-G, на ОС Windows и Mac.
Среда разработки EV3 была значительно улучшена. Теперь все материалы для робота: программы для робота, документацию, результаты экспериментов, фото и видео — можно хранить в проекте. Был также добавлен инструмент zoom, который позволяет масштабировать программу, чтобы, например, увидеть всю программу целиком. Стоит отметить, что NXT блок можно программировать с помощью новой среды EV3, однако старый блок поддерживает не все особенности нового языка программирования.
Перечислим основные нововведения среды программирования EV3:
- Тесная интеграция среды программирования с блоком:
- Добавлена специальная страница с подключенным оборудованием. Она позволяет отслеживать статус EV3 блока и получать значения с датчиков в реальном времени.
- Датчики и моторы распознаются при подключении автоматически, благодаря функции auto-id. Это позволяет не указывать, что к такому-то порту подключен такой-то датчик или мотор.
- В процессе работы программы подсвечивается выполняемый блок. Это позволяет точно понимать поведение программы.
- На программном блоке загорается специальный символ, если к данному порту подключен другой датчик или мотор.
- Добавлена возможность просматривать значения, передаваемые через каналы данных (data wires).
- Сцепление блоков друг с другом позволило отказаться от «балки исполнения», на которой располагались блоки в среде NXT-G.
- У блоков нет такого понятия, как панель настройки, — поведение теперь настраивается непосредственно на блоке, что привело к увеличению их размера. Программу теперь намного легче читать – сразу видно как настроены датчики и моторы.
- Появились блоки «ждать изменения», которые позволяют реагировать на факт изменения значения, а не на изменение до определенного значения как в NXT-G.
- Улучшения в передачи данных от блока к блоку позволяют упростить преобразование типов (теперь не нужно вручную преобразовывать, например, число в строку).
- Добавлена возможность работы с массивами.
- Стал возможен досрочный выход из цикла.
Кроме нового языка программирования появились программы под Android и iPhone\iPad для управления роботом. Также на базе программы Autodesk Invertor Publisher создана программа для создания и просмотра пошаговых 3D инструкций. В этой программе можно масштабировать и вращать модель на каждом этапе сборки, что позволяет строить более сложных роботов по инструкциям.
В образовательный набор включены инструкции для сборки 5 роботов:
Color Sorter
Классическая задача по сортировке предметов (в данном случае — Lego деталей) по цвету.Gyro Boy
Робот-сигвей, использующий гироскоп для балансировки.Puppy
Робот-собачка, которую можно гладить, кормить. Спать и справлять нужду она также умеет 🙂 Напоминает тамагочи.Робо-рука
Позволяет перемещать предметы.Для EV3 набора был подготовлен ресурсный набор LEGO MINDSTORMS Education EV3, позволяющий собирать другие модели, используя новые детали.
При написании статьи использовались материалы блога nnxt.blogspot.com.
Подпишись
Меню
- LEGO EDUCATION
- Мебель LEGO
- Соревнования
- Амперка
- Интерактивное оборудование
- Книги по робототехнике
- Поддержка
Контакты
Интернет — магазин Educube.ru
123022 г. Москва , ул. 2-я Звенигородская, д. 13, стр. 15,
Юр. адресс: 111397, г. Москва, Федеративный пр-кт, д. 4, кв. 47 офис XI
Мы работаем: c 09:00 до 18:00
© 2013 — 2024 Educube.ru | Рекомендованный магазин LEGO® Education в России.
Мы в социальных сетяхX Сайт может собирать метаданные пользователя (cookie, данные об IP-адресе и местоположении).
Если, прочитав это сообщение, вы остаетесь на нашем сайте, это означает, что вы не возражаете против использования этих технологий.LEGO, логотип LEGO, Minifigure (Минифигурка), DUPLO и MINDSTORMS являются торговыми марками и/или охраняемой авторским правом собственностью LEGO Group.
©2024 The LEGO Group. Все права защищены. Использование этого вебсайта подтверждает ваше согласие с этим.Программирование модуля EV3
Вопрос про программирование модуля EV3 без применения компьютера иногда встает перед многими любителями робототехники. Для этого на микрокомпьютер EV3 уже предустановлено программное обеспечение идентичное ПО установленному на микрокомпьютер.
Создать свою программу можно при помощи приложения модуля EV3 находящегося в окне приложений. Это третья вкладка интерфейса микроконтроллера EV3. Приложение называется Brick Program и является четвертым приложением по счету.
Дословно это переводится как кирпичная программа и является средой программирования модуля EV3. Зайти в это приложение можно после включения модуля при помощи кнопок управления модулем.
Среда программирования микрокомпьютера EV3
Если зайти в среду программирования микрокомпьютера EV3, то первое что мы увидим будет блок «Начало» и блок «Цикл». Между этими двумя блоками находится вертикально расположенная прерывистая линия, при помощи которой происходит добавление блоков из палитры блоков.
В палитре блоков расположены блоки двух типов:
- Блоки действия;
- Блоки ожидания.
Также в палитре блоков находится корзина для удаления ненужного блока из программы.
Блоки действия
Всего в палитре блоков находятся шесть блоков действия:
- Экран;
- Звук;
- Подсветка кнопок;
- Средний двигатель;
- Большой двигатель;
- Рулевое управление – в этом блоке используется два двигателя.
В правом верхнем углу каждого блока действия находится его указатель в виде маленькой стрелки. Блоки действия предназначены для выполнения какого-либо действия. Это может быть включение мотора, изменение цвета подсветки кнопок и прочее.
Блоки ожидания
Имеется одиннадцать блоков ожидания:
- Ожидание температуры;
- Ожидание показаний энкодера;
- Ожидание нажатия управляющей кнопки модуля EV3;
- Ожидание времени;
- Ожидание ультразвукового датчика;
- Ожидание инфракрасного датчика;
- Ожидание инфракрасного маяка;
- Ожидание датчика гироскопа;
- Ожидание датчика касания;
- Ожидание датчика освещенности;
- Ожидание датчика цвета.
В правом верхнем углу каждого блока ожидания находится его указатель в виде маленьких песочных часов. Блоки ожидания предназначены для ожидания наступления какого-либо события. Это может быть достижение нужных показаний датчиков, нажатие на кнопку и так далее.
Как создать программу на модуле EV3
Для того, чтобы на микрокомпьютере EV3 создать программу нужно найти в третьем окне интерфейса модуля приложение Brick Program. Нажав на центральную кнопку блока входим в приложение и видим блок начало и цикл. Между этими двумя блоками можно разместить всего шестнадцать различных блоков ожидания и блоков действия.
Поэтому при помощи интерфейса микроконтроллера EV3 можно писать только несложные программы. В блоках программирования есть возможность изменения одного параметра при помощи кнопок «Вверх» и «Вниз». Количество повторений выполнения программы задается в блоке «Цикл» и может принимать значения 1, 2, 3, 4, 5, 10 и бесконечность.
Пример простой программы микрокомпьютера EV3
Например, стоит задача движения робота с двумя большими моторами вперед пять секунд. Для этого мы выбираем при помощи прерывистой линии переходим в блоки действий и выбираем блок «Рулевое управление». Этот блок выглядит как сдвоенная вращающаяся передняя часть большого мотора. Нажатием на центральную кнопку подтверждаем выбор.
Блок рулевого управления устанавливается между блоком «Начало» и «Цикл». Повторным нажатием на центральную кнопку мы переходим в настройки блока, где нажатием на кнопки «Вверх» и «Вниз» можно изменять направление движения робота. По умолчанию у нас в блоке выбраны большие моторы в портах B и C. Также по умолчанию у нас стоит движение вперед.
Для того, чтобы робот ехал вперед пять секунд нужно добавить блок ожидания времени. Устанавливаем прерывистую стрелочку между блоком «Рулевое управление» и блоком «Цикл» и переходим при помощи кнопок управления модулем в палитру блоков ожидания. Находим блок ожидания времени, который выглядит как часы и выбираем. Нажатием средней кнопки подтверждаем выбор.
Блок «Ожидание времени» устанавливается после блока «Рулевое управление» перед блоком «Цикл». Повторное нажатие центральной кнопки на блоке «Ожидания времени» позволяет зайти в настройку времени. Стрелочками «Вверх» и «Вниз» выбираем значение пять секунд и нажатием на центральную кнопку подтверждаем выбор. В своей программе между блоками можно передвигаться при помощи кнопок «Влево» и «Вправо».
На всякий случай нужно проверить значение блока «Цикл» и при необходимости устанавливаем значение в единицу, для того, чтобы программа выполнилась только один раз. Чтобы запустить программу на выполнение переходим в блок «Начало» и нажимаем центральную кнопку. Робот движется вперед пять секунд, после чего останавливается. Программа выполнена.
Как сохранить программу модуля EV3
Для того, чтобы сохранить программу нужно перейти к значку «Сохранить», который находится внизу в левом дальнем конце программы. При нажатии значка откроется окно, где можно дать название программе. Также можно применить название по умолчанию. После этого нужно нажать на кнопку «OK».
Программа с этим названием будет сохранена в папке BrkProg SAVE. Эта папка расположена во втором окне интерфейса модуля EV3 выбор файла.
Как открыть программу модуля EV3
Над значком «Сохранить» находится значок «Открыть». Чтобы отрыть любую программу, которая существует в блоке нужно нажать на этот значок. После этого можно кнопками «Вверх» и «Вниз» выбрать программу. Нажатие на центральную кнопку откроет выбранную программу
Как удалить блок модуля EV3
Для того, чтобы удалить ненужный вам блок из программы необходимо выделить этот блок центральной кнопкой. После этого переходим в палитру блоков нажатием кнопки «Вверх». По палитре блоков нужно переместиться в нижний левый угол и найти значок «Мусорная корзина».
Выделяем значок и нажимаем центральную кнопку. Удаление ненужного блока произведено.
Создание блоков для LEGO Mindstorms EV3
С помощью дополнительных блоков можно существенно расширить возможности своей программы, созданной в среде разработке LEGO Mindstorms EV3. Читая эту статью вы изучите анатомию блока и научитесь создавать свои собственные блоки.
Данная статья написана на основе официальной документации по созданию блоков для LEGO Mindstorms EV3, которая входит в состав комплекта разработчика блоков, скачать который можно на странице загрузок LEGO MINDSTORMS EV3. В состав комплекта входит документация (Creating Blocks for LEGO Mindstorms EV3), необходимое ПО и образцы двух блоков: блок датчика и блок обработки данных. Для создания своих блоков вам понадобится этот комплект, поэтому можете смело его скачивать. Скаченный архив распакуйте в удобное место. В статье я буду постоянно ссылаться на папки и ПО находящееся в этом архиве.
До того как мы начнём делать свой блок, я дам теорию. Итак, мы знаем, что программные блоки используются для создания программ в среде разработки LEGO Mindstorms EV3. Все доступные блоки находятся на палитре внизу среды разработки и для удобства разделены на категории. Каждый блок может и обычно предоставляет более одной операции, которая называется режимом. Но для разработчика блоков, блок – это на самом деле полигруппа, которая содержит один или несколько элементов блока, каждый их которых представляет конкретный режим.
Пакет блока
Если вы хоть раз пытались устанавливать сторонние боки в среду разработки LEGO Mindstorms EV3, то вы знаете, что блоки находятся в файлах с расширением .ev3b. Такие файлы называются пакетами, и, на самом деле, – это просто ZIP-архивы, внутри которых должен быть определённый набор папок и файлов.
Чтобы посмотреть, что находится внутри пакета, вы можете изменить расширение файла с .ev3b на .zip и открыть его с помощью любой программы для работы с архивами.
В комплекте разработчика блоков есть два образца боков – это файлы-пакеты SampleDataOp.ev3b и SampleSensor.ev3b. Вы можете попробовать экспортировать их в среду разработки LEGO Mindstorms EV3. Для этого создайте новый проект, выберите пункт меню «Инструменты -> Мастер импорта блоков».
Затем в диалоге «Мастер экспорта и импорта блоков» нажмите на кнопку «Просмотреть» и откройте файл, например, файл SampleDataOp.ev3b. После этого в списке ниже появятся все файлы с блоками из той же папки. Выберите в списке файл SampleDataOp.ev3b и нажмите «Импорт».
После этого появится предупреждение о необходимости перезапуска среды разработки LEGO Mindstorms EV3. Нажмите кнопку «ОК».
Теперь вы можете закрыть диалог мастера импорта блоков или импортировать ещё один блок. Давайте импортируем ещё второй образец блока из файла SampleSensor.ev3b. Для этого выберите этот файл в списке, нажмите на кнопку «Импорт», затем закройте точно такое же предупреждение. После этого закройте диалог мастера, нажав на кнопку «Закрыть» и перезапустите среду разработки LEGO Mindstorms EV3. Затем создайте новый проект и найдите новые блоки. Блок SampleSensor будет в палитре на закладке «Датчик» в конце справа, см. рисунок ниже.
Блок SampleDataOp — на закладке «Операции с данными», также в конце справа.
Анатомия блока
Теперь давайте разберёмся, что находится внутри файла-пакета. Здесь должен быть набор строго определённых вложенных папок и файлов. Изучая эту структуру, вы можете смотреть на образцы блоков SampleDataOp и SampleSensor для лучшего понимания.
Корневая папка
В каждом пакете внутри содержится одна корневая папка, имя которой должно соответствовать значению атрибута ModuleName внутри файлов blocks.xml, о которых будет написано ниже. Например, если в атрибуте ModuleName указано «SampleDataOp», то имя корневой папки тоже должно быть «SampleDataOp». Внутри этой папки должны находиться главный файл blocks.xml и папки, перечисленные ниже.
Папка «VIs»
Папка «VIs» должна находиться внутри корневой папки. В ней содержится весь программный код для вашего блока. Внутри папки «VIs» могут быть подпапки «PBR» или «NXT», в которых размещается код, зависящий от платформы: в папке «PBR» – для EV3, а в папке «NXT» – для NXT. Код, не зависящий от платформы, размещается непосредственно внутри папки «VIs».
Папка «help»
Папка «help» должна находиться внутри корневой папки. Здесь находятся подпапки содержащие справки для разных языков и регионов. Имена этим подпапкам даются по схеме «язык-РЕГИОН» (регион указывается не всегда). Например, в подпапке с именем «en-US» – будет справка на английском языке для США, в подпапке «en-GB» — справка на английском для Великобритании, а в подпапке с именем «ru» — справка на русском языке. Но поддерживаются не все языки. Все возможные варианты смотрите в таблице ниже:
Язык Код/Имя подпапки Образовательная версия Домашняя версия Китайский zh-Hans + + Датский da + + Голландский nl + + Английский-Великобритания en-GB + — Английский-США en-US + + Французский fr + + Немецкий de + + Итальянский it + — Японский ja + + Корейский ko + + Норвежский nb-NO + — Португальский pt + — Русский ru + + Испанский es + + Шведский sv + — Имя главного файла справки должно совпадать с именем корневой папки и значением атрибута ModuleName внутри файлов blocks.xml, а расширение должно быть .html. Например, если в атрибуте ModuleName указано «MySensor», то имя главного файла справки будет «MySensor.html».
Все файлы картинок, используемые в файлах справки нужно размещать внутри тех же подпапок, что и файлы справки. Можно использовать подпапки, если это нужно, но выходить за папку справки нельзя. Например, все файлы нужные для русскоязычной справки должны быть внутри папки «ru» или внутри подпапок, находящихся в папке «ru».
Папка «images»
Папка «images» должна находиться внутри корневой папки. Здесь находятся все картинки для блоков. И те, которые используются в палитре, и те, которые используются при настройке блока. Все эти картинки должны иметь строго определённые имена и размеры.
Папка «strings»
Папка «strings» должна находиться внутри корневой папки. Здесь находятся подпапки для разных языков и регионов, именуемые по схеме «язык-РЕГИОН» (поддерживаемые языки, см. таблицу выше). В каждой из этих подпапок находится файл «blocks.xml», о котором будет написано ниже, внутри которого хранятся локализованные строки, используемые в блоках, например, для отображения имён и ссылок к локализованной справке.
Внешний вид блока
В отображении блока участвует несколько картинок, которые должны находиться в папке «images». Ниже перечислены необходимые картинки, указаны места, где они используются, а также перечислены требования к ним:
Палитра
Для отображения блоков на палитре используется пара картинок, которые накладываются поверх картинки изображающей блок, см. рисунок ниже. Первый файл картинки должен быть с именем «PolyGroup__Palette.png», а второй — с именем «PolyGroup__Palette_MouseOver.png», где вместо указывается имя полигруппы. Как вы можете догадаться, вторая картинка (с окончанием _MouseOver) показывается, если вы навели мышку на блок, иначе показывается первая картинка. Размер каждой картинки должен быть 20×20, однако в образцах блоков используются картинки 25×25, поэтому можете выбрать конечный размер изображений на ваш вкус. На рисунке снизу показано, как картинка размером 25×25 накладывается на рисунок блока в палитре.
Блок на диаграмме
Первая картинка, которая отображается на блоке слева сверху, когда он лежит на диаграмме, обычно та же, что и для палитры, но другого размера. Размер такой картинки должен быть 34×34, а файл должен называться «PolyGroup__Diagram.png», где вместо указывается имя полигруппы. На рисунке снизу показано, как картинка размером 34×34 накладывается на рисунок блока на диаграмме.
Режимы блока
Следующие картинки, о которых пойдёт речь – это картинки для отображения режимов блока. Здесь у вас будет столько картинок, сколько режимов поддерживает блок. Картинки будут показывать текущий выбранный режим на самом блоке слева снизу, и будут использоваться в меню выбора режима. Размер таких картинок 38×22, имена файлов – «PolyGroup__Mode__Diagram.png» , где вместо указывается имя полигруппы, а вместо — имя режима. Здесь для каждого файла должен быть файл-пара с окончанием _MouseOver, который будет использоваться при наведении мышки на изображение, так же как и для палитры. На рисунке снизу показано, как картинки размером 38×22 отображаются на рисунке блока на диаграмме и в меню выбора режима.
Страница аппаратных средств
Следующий набор картинок нужен для построения графического меню на странице аппаратных средств на закладке «Просмотр портов», при щелчке по порту. В этом меню слева от названия датчика отображается картинка категории. Внутри этого пункта отображаются подпункты с выбором режима аппаратного средства, слева от которых отображается картинка режима аппаратного средства. Кстати после выбора режима, здесь будет отображаться картинка блока для диаграммы и сверху неё картинка режима аппаратного средства.
Картинка категории должна быть размером 38×22, а файл должен называться «PolyGroup__Category.png», где вместо указывается имя полигруппы. Здесь также как и для палитры, должна быть картинка, которая будет отображаться при наведении мышки.
Картинка режима аппаратного средства должна быть размером 22×22, с именем файла «PolyGroup__Mode__Hardware.png», где вместо указывается имя полигруппы, а вместо — имя режима. Здесь также как и для палитры, должна быть картинка, которая будет отображаться при наведении мышки.
На рисунке ниже показано, куда попадают картинки с нарисованным символом #. Обратите внимание, что для выбранных пунктов меню (которые закрашены синим цветом) используется изображение с окончанием _MouseOver, где символ # изображён белым цветом.
Файлы blocks.xml
В пакете блока содержатся два типа файлов blocks.xml, которые почти полностью описывают, что из себя представляет блок. Первый тип – это главный файл blocks.xml, который находится внутри корневой папки и определяет такие вещи, как используемые программы из папки VIs, перечень параметров для каждого режима, режим по умолчанию.
Второй тип файлов blocks.xml находится в подпапках папки «strings». Здесь хранятся локализованные названия и контекстные справки для программных имён, использующихся в главном файле blocks.xml. Этот файл дублируется и переводится для каждой поддерживаемой локали.
Главный файл blocks.xml
Ниже приведено краткое описание основных элементов и атрибутов главного файла blocks.xml.
Если вы посмотрите главный файл blocks.xml, который включён в состав среды разработки LEGO Mindstorms EV3, то вы найдёте намного больше элементов, чем те, что буду описаны ниже. Большинство из них уже не используются, но они были оставлены, чтобы избежать возможных проблем во время обработки файла парсером. Этот файл вы можете найти в папке \Resources\Blocks\LEGO (В Windows 7 x64, при стандартной установке образовательной версии ПО это будет папка C:\Program Files (x86)\LEGO Software\LEGO MINDSTORMS Edu EV3\Resources\Blocks\LEGO).
-
-
- Корневой элемент файла blocks.xml – это EditorDefinitions. Всё остальное находится внутри него.
- Следующий элемент – это PolyGroups. Он находится внутри элемента EditorDefinitions. Этот элемент имеет только два атрибута: ModuleName и ModuleVersion.
- ModuleName – содержит имя модуля, которое будет показано в мастере импорта/экспорта блока. Это имя определяет пакет, который будет установлен или удалён с помощью этого мастера. В файле bocks.xml в образцах, которые вы найдёте в комплекте разработчика блоков, содержится только один блок, но вы можете добавлять сюда любое необходимое количество блоков.
- ModuleVersion – это просто номер версии, отображаемый в мастере импорта/экспорта блоков. Этот номер никак больше не используется.
- Name – имя блока. В образцах это имя совпадает с ModuleName, но совпадений здесь не требуется. Имя блока может быть любым, и оно не обязано совпадать со значением атрибута ModuleName.
- Атрибут BlockFamily определяет закладку палитры, на которой будет размещаться блок. На данный момент вы можете выбрать одно из следующих значений: Action (закладка «Действие»), DataOperations (закладка «Операции с данными»), FlowControl (закладка «Управление операторами»), Sensor (закладка «Датчик») или Advanced (закладка «Дополнения»).
- Внутри элемента PolyGroup может быть любое количество следующих подэлементов: Parameter, Block и Hardware (Hardware – только для блока датчика).
- Элементы Parameter перечисляются внутри элемента PolyGroup в первую очередь и описывают параметры блока. С помощью различных атрибутов этого элемента для параметра определяются тип данных, значение по умолчанию, направление и многое другое. Этот список описывает все возможные параметры блока во всех режимах. Набор параметров для каждого конкретного режима описывается позже.
-
- Name – имя параметра, используемое в программном коде, находящемся в папке VIs. Имя параметра, которое видит пользователь, описывается в файле blocks.xml из локализованной подпапки в папке «strings».
- Direction – направление параметра. Здесь возможен один из следующих значений: Input (для входного параметра) или Output (для выходного параметра).
- DataType – тип данных. Для всех публичных параметров, значения которых могут быть записаны в шину данных или прочтены из неё, необходимо указывать тип данных Single. Специальные параметры, используемые только внутри блока, могут быть других типов. Доступные типы данных, можно посмотреть в образцах блоков, входящих в комплект разработчика блоков. Я нашёл там только следующие типы: Boolean, Int32 и UInt32. А в файле blocks.xml, который включён в состав среды разработки LEGO Mindstorms EV3, я нашёл ещё типы UInt16, String,Single[] и Boolean[], где последние два типа с квадратными скобками – это массивы.
- DefaultValue – это просто значение по умолчанию для параметра, которое будет установлено, когда блок будет перетащен из палитры на диаграмму. Этот атрибут нужно использовать, если значение параметра по умолчанию будет одинаковым для образовательной или домашней версии, иначе нужно использовать атрибуты EducationDefaultValue и RetailDefaultValue.
- EducationDefaultValue – значение по умолчанию для параметра для образовательной версии EV3.
- RetailDefaultValue – значение по умолчанию для параметра для домашней версии EV3.
- MinValue – минимальное значение параметра, которое можно установить при настройке блока. Используется для проверки значения только при вводе вручную, но никак не влияет при получении значения параметра из шины данных.
- MaxValue — максимальное значение параметра, которое можно установить при настройке блока. Используется для проверки значения только при вводе вручную, но никак не влияет при получении значения параметра из шины данных.
- Configuration – этот атрибут определяет поведение или контроль, который вы получаете, когда вы кликаете на параметр, чтобы изменить его. Например, слайдер, который вы используете для изменения мощности мотора, называется «SliderVertical.custom». Другое применение этого атрибута – указать XML-файл перечислений, в котором определяются значения, имена и суффиксы изображений для каждого значения перечисления. Например, взгляните на файл «Identification_ComparisonType.xml», найти который вы можете в папке \Resources\Blocks\LEGO\images. Любой из встроенных пользовательских элементов управления или XML-файлов перечислений можно использовать в своих блоках указывая префикс «builtin://» перед именем файла, как это сделано в образцах блоков из комплекта разработчика блоков. Атрибут Configuration необязательный. Для чисел, строк и логических типов уже есть стандартные поведения для параметров.
- Identification – этот атрибут аналогичен атрибуту Configuration, но он влияет на изображение отображаемое над вводами и выводами блока. Атрибут может указывать на PNG-файл или может использовать определённый в XML-файле «рецепт», описывающий, что показывать. Хороший пример – это параметр «Steering» в стандартном блоке «Move» (в среде разработке – это блок «Рулевое управление», параметр «Рулевое управление»). Пока вы двигаете слайдер, изображение меняется в зависимости от выставленного значения в соответствии с файлом «Identification_Steering.xml». Как минимум в этом атрибуте вы должны указать PNG-файл. Иначе в области идентификации появится знак вопроса.
- CompilerDirectives – используется для обозначения специальных параметров. Например, режим сравнения требует, чтобы результат возвращался в параметре с типом Boolean. Чтобы отметить, что параметр возвращает результат сравнения, в атрибуте CompilerDirectives нужно установить значение «Result».
- ValueDisplay – этот атрибут используется редко. Используется он аналогично атрибутам Configuration и Identification. Чтобы посмотреть хороший пример использования этого атрибута, положите на диаграмму блок «Переключатель» и выберите режим «Кнопки управления модулем -> Измерение -> Кнопки управления модулем». Картинки, отображаемые над каждым вариантом (см. рисунок ниже), появляются благодаря атрибуту ValueDisplay.
-
-
-
-
- Следующими после элементов Parameter идут элементы Hardware. В них важными являются атрибуты EV3AutoID, Direction и DefaultPort.
- EV3AutoID – если ваш датчик новый, который поддерживает автоматическую идентификацию, значение этого атрибута должно быть «-1», иначе оно должно соответствовать номеру AutoID сенсора.
- OtherAutoID – используйте этот атрибут, если вы используете более одного датчика с AutoID и вы хотите отобразить его в этом же блоке.
- Direction – направление в зависимости от устройства. Возможные значения Input или Output.
- DefaultPort – определяет конфигурацию по умолчанию для порта, когда блок перетащили с палитры на диаграмму, а датчик ещё не подключен. Если датчик подключён или если на странице аппаратных средств настроен конкретный датчик, то конфигурация блока будет пытаться соответствовать странице аппаратных средств.
- Mode – программное имя режима.
- Reference – этот подэлемент содержит атрибуты, указывающие на ресурс, который реализует код данного режима.
- Type – в этом атрибуте всегда нужно указывать «VILib».
- Name – Здесь указывается имя VI-файла в папке «VIs».
- Name – указывает на элемент Parameter, находящийся вначале внутри элемента PolyGroup.
- PBROnly – используйте этот флаг, если режим работает только на EV3.
- NXTOnly – используйте этот флаг, если режим работает только на NXT.
Файлы blocks.xml папки «strings»
Структура файлов blocks.xml папки «strings» похожа на структуру главного файла blocks.xml. Здесь есть несколько новых элементов и атрибутов.
-
-
- Элемент PolyGroup содержит два новых атрибута DisplayName и DisplayNamePrefix.
- DisplayName – это имя, которое видит пользователь для блока/полигруппы. Атрибут Name – это ссылка на полигруппу в главном файле blocks.xml.
- DisplayNamePrefix – эта строка используется для регистрации данных для имён наборов данных, названий осей и т.п. Эта строка объединяется с другой информацией, чтобы сформировать уникальные идентификаторы, где это необходимо.
- DisplayName – это имя, которое видит пользователь для параметра. Атрибут Name – это ссылка на параметр в главном файле blocks.xml.
- Description – строка, которая отображается во всплывающей контекстной подсказке, когда пользователь задерживает мышку над параметром.
- DisplayName – это имя, которое видит пользователь для режима. Атрибут Name – это ссылка на режим в главном файле blocks.xml.
- Description – строка, которая отображается во всплывающей контекстной подсказке, когда пользователь задерживает мышку над режимом.
Создание простого блока датчика
Теперь, когда теоретически мы подкованы, попробуем создать свой собственный блок датчика для среды разработки LEGO Mindstorms EV3.
Сначала найдите в комплекте разработчика блоков в папке \DevEnvironment\Windows архив со средой разработки блоков EV3BlockDev.zip и распакуйте его в удобное место, например, в папку C:\EV3BlockDev. После этого найдите в этой папке программу MindstormsEV3.exe и запустите её, см. рисунок снизу.
В качестве отправной точки мы будем использовать блок SampleSensor, который вы можете найти в комплекте разработчика блоков. Вам нужно импортировать блок SampleSensor.ev3b в среду разработки блоков. Так, вы сможете посмотреть блок в среде разработки во время изучения его исходных файлов и чтения документации. Для этого создайте новый проект-программу, пункт меню «File -> New Project -> Program» и выберите пункт меню «Tools -> Block Import Wizard». В появившемся диалоге нажмите кнопку «Browse», откройте файл SampleSensor.ev3b, затем в списке ниже выберите SampleSensor.ev3b и щёлкните по кнопке «Import».
После этого вы увидите предупреждение, что изменения вступят в силу только после перезапуска программы.
Нажмите «OK», перезапустите программу, опять создайте проект-программу и проверьте: на палитре должен появиться блок SampleSensor.
Теперь я приведу рецепт создания блока из документации:
-
- Во-первых, вам нужно придумать имена для модуля (атрибут ModuleName), полигруппы (атрибут Name элемента PolyGroup), режимов (подэлементы Mode элемента Block) и решить, на какой закладке в палитре будет находиться блок (атрибут BlockFamily). Не пытайтесь сразу продумать все режимы вашего блока. Начинайте с простых режимов, так же как это сделано в образце.
- Решите, где вы будете хранить исходные файлы и скопируйте туда папку SampleSensor.
- Переименуйте папку SampleSensor, используя выбранное имя для ModuleName.
- Обновите информацию в главном файле blocks.xml, используя ваши имена, которые вы выбрали в п.1.
- Теперь вы можете обновить файлы blocks.xml папки «strings», чтобы развить хорошую привычку, поддерживать их актуальное состояние и синхронизировать их друг с другом.
- Измените имена файлов изображений, чтобы они соответствовали именам ваших полигрупп, режимов и т.д.
- Не забывайте также, что в конечном итоге вам нужно будет обновить файл справки для вашего блока. Возможно это легче будет сделать позже, после того как ваш блок будет почти доделан.
- Теперь вставим в блок какой-нибудь код. Есть более быстрые способы сделать это, но шаги, перечисленные ниже, дадут вам возможность попрактиковаться в использовании среды разработки.
-
- В новом проекте и программе, подключитесь к EV3.
- Перетащите на диаграмму блок SampleSensor и удостоверьтесь, что выбран режим Mesure (измерение).
- Дважды щёлкните по блоку, чтобы открыть реализацию – VI-файл SampleSensorValue.vix.
-
-
- Выберите меню «Developer -> Export» и сохраните этот файл в папку VIs\PBR вашего блока. Назовите этот файл, используя имя, которое решили использовать в п.1. Помните, что на этот файл указывает главный файл blocks.xml, поэтому имена должны совпадать.
- На диаграмме найдите SubVI с именем SampleSensorEV3Core.vix (имя появляется при наведении мышки, см. первый рисунок ниже) и дважды щёлкните по нему. Откроется файл SampleSensorEV3Core.vix. У этого файла вы можете открыть диаграмму и увидеть, что в нём делается, см. второй рисунок ниже. Как видите, здесь просто возвращается случайное число в интервале от 0 до 100.
-
-
- Экспортируйте этот файл в свою папку PBR, используя любое имя, которое вам нравится. Используя шаблон, похожий на SampleSensor, когда вы добавляете имя целевой платформы и слово «Core» (ядро), вы помогаете другим лучше понять назначение вашей вложенной диаграммы SubVI. Техника использования общей вложенной диаграммы, во-первых, действует как мьютекс вокруг кода, который взаимодействует с аппаратными средствами и, во-вторых, позволяет изменять основной общий код, не сильно меняя код верхнего уровня. Мьютекс является наиболее важным понятием. Чтение данных с одного и того же датчика из разных потоков может быть очень проблематично без взаимной блокировки с помощью Мьютекса.
- Теперь перезапустите среду разработки, ничего не сохраняя. Хоть вы и делали экспорт, ничего не меняя, перезапуск нужен, чтобы быть уверенными, что в памяти не будет ничего лишнего.
- После перезапуска опять создайте новый проект-программу и подключите EV3.
- Выберите пункт меню «Developer -> Import» и откройте ваш файл .vix.
- Сделайте тоже для вашего «Core» файла .vix.
- Следующий шаг демонстрирует использование панели проекта, позволяющей перетащить что-либо на диаграмму чего нет в палитре.
- Наша цель – заменить SampleSensorEV3Core.vix на ваш «Core» файл .vix.
- Пока ваш «Core» файл .vix открыт, он добавлен внутрь проекта, и вы можете найти его, используя панель проекта. Если панель проекта не видна, сделайте так: щёлкните по меню «Developer -> Show Ribbon», затем перейдите на закладку «View», щёлкните по кнопке «View Panes» и выберите пункт меню «Project».
У меня после этой процедуры, кроме панели проекта появилась ещё пустая панель (см. рисунок ниже), с которой ничего невозможно сделать, из-за того, что среда разработки сразу падает.
Пришлось, после открытия панели проекта, сразу перезапустить среду разработки, тогда это помогло: после создания нового проекта-программы, панель проекта сразу видна, см. рисунок ниже.
-
-
-
- На панели проекта найдите свой «Core» файл .vix (у меня на картинке – это файл MySensorEV3Core.vix) и перетащите его на вашу диаграмму для измерения значения датчика.
-
-
-
- Теперь просто удалите старый «Core» файл .vix, передвиньте новый на его место и присоедините связи.
- Экспортируйте ваш файл .vix для измерения показания датчика в вашу папку PBR, чтобы сохранить изменения (у меня – это файл MySensorValue.vix).
- Щёлкните в проводнике правой кнопкой мышки по корневой папке вашего блока и выберите «7-Zip -> Добавить к архиву», в диалоге выберите формат архива zip и нажмите «ОК».
- Замените расширение .zip на .ev3b, которое является стандартом для EV3-блока.
-
- Прежде чем идти дальше вы можете отредактировать изображения для блока, чтобы отличать его от блока SampleSensor.
- После изменения изображения снова пересоздайте файл «ev3b». Перед тем как снова импортировать свой блок, удалите старую версию с помощью мастера «Block Import Wizard».
- Теперь вы можете продолжить редактировать свой «Core» файл .vix, чтобы научить его общаться с датчиком или продолжить реализовывать основные режимы блока.
- Обязательно удаляйте файлы блока SampleSensor по мере создания своих версий этих файлов для вашего блока. Удаление этих файлов не должно вызвать никаких проблем. И даже если какие-либо проблемы и появятся, лучше узнать о них в самом начале, нежели в конце разработки.
- Когда ваш блок будет готов, не забудьте позаботиться о справке для вашего блока.
Создание простого блока обработки данных
Создание блока обработки данных очень похоже на создание блока датчика. Чтобы не воспроизводить всю последовательность действий, я укажу лишь некоторые важные различия, которые вы обнаружите, когда будете выполнять те же шаги, но с блоком SampleDataOp.
-
- Выбор имён для модуля, блока и режимов так же остаётся первым шагом. Однако для блока обработки данных нет стандартов для измерений, сравнений или изменения режимов. Образец блока SampleDataOp просто даёт возможность использовать ещё две математические операции: Reciprocal (получение обратной величины для числа) и Cube (возведение числа в куб).
- Во многих случаях операции с данными не зависят от платформы, поэтому файлы .vix можно поместить в папку VIs, вместо размещения в папки PBR и NXT.
- Обратите внимание, что здесь нужно создавать меньше изображений, т.к. блоки обработки данных не отображаются на странице аппаратных средств.
- Главный файл blocks.xml немного проще, чем для датчика. Как правило, вы не найдёте таких элементов и атрибутов, как CompilerDirectives и ValueDisplay.
Основы использования среды разработки блоков
И напоследок – вот некоторые важные моменты, которые вам необходимо знать, чтобы использовать среду разработки блоков.
Среда разработки для EV3 основана на ПО WebUI Builder, продукта компании NI (National Instruments), используемой для создания тонких веб-клиентов через графическое программирование. Она имеет много схожего с LabVIEW, например, палитры, провода (связи), блок-схемы и т.п. Поэтому когда вы видите «WebUI Builder» можете в уме смело заменять этот текст на «LabVIEW». Но есть и одно существенное различие, которое состоит в том, что здесь используются файлы VIX, вместо VI, и нет никакого инструмента, чтобы преобразовать файлы VI в VIX.
Как уже было написано выше, среда разработки находится в архиве EV3BlockDev.zip, который вы можете найти в комплекте разработчика блоков в папке DevEnvironment\Windows. Если ранее вы устанавливали среду разработки LEGO Mindstorms EV3, то драйверы у вас уже установлены. Вам просто нужно распаковать все файлы из архива EV3BlockDev.zip в любую удобную папку и запускать файл MindstormsEV3.exe.
В самом начале работы со средой разработки вам нужно отобразить ленту с инструментами, для этого создайте новый проект-программу и выберите пункт меню «Developer -> Show Ribbon». Так у вас будет доступ ко всем инструментам среды разработки.
Чтобы открыть многие нужные панели вам нужно перейти на закладку «View» и щёлкнуть по кнопке «View Panes». Три панели, в появившемся меню, особенно полезны.
-
-
- Palette – это панель с палитрой WebUI Builder, см. рисунок ниже.
-
-
- Project – панель проекта, на которой есть всё, что включено в проект. Из этой панели можно перетаскивать на диаграмму объекты, которые не отображаются на палитре. Вы можете открыть любой VIX-файл, затем найти его на панели проекта и бросить на диаграмму.
- Errors and Warnings – панель ошибок и предупреждений. Если происходит сбой при загрузке, на этой панели будет содержаться информация, которая поможет вам с отладкой и устранением ошибок.
- Остальные панели могут работать, а могут и не работать вообще. Некоторые из них остались от более ранних версий и использовались для тестирования.
Наиболее важными пунктами меню в группе Developer при разработке блоков являются пункты New VI и Export.
-
-
- New VI – этот пункт меню создаёт новый пустой файл VIX.
- Export – эта функцию вы будут использовать, для сохранения проделанной работы. Пункт меню «File -> Save» и связанные с ним элементы, подавляются средой разработки EV3 и могут использоваться только для сохранения программ и проектов EV3. Поэтому вместо использования «File -> Save» или нажатия CTL+S для сохранения работы вам нужно использовать пункт меню «Developer -> Export».
- Другие пункты меню являются лишними и могут вызвать множество проблем, если вы будете ими пользоваться. Поэтому почаще сохраняйтесь с помощью «Developer -> Export».
Другие возможности среды разработки.
-
-
- Если вы дважды щёлкните на блок EV3, то откроется его VIX-реализация. Это полезно не только для работы с вашим блоком, но и для изучения сторонних блоков, чтобы посмотреть, как они реализованы.
- Вы можете удерживать клавишу CTRL и крутить колёсико мышки, чтобы менять масштаб диаграммы.
-
-
-
-
-
-
-
-
-
-
- Элемент PolyGroup содержит два новых атрибута DisplayName и DisplayNamePrefix.
-
- Следующими после элементов Parameter идут элементы Hardware. В них важными являются атрибуты EV3AutoID, Direction и DefaultPort.
-
-
-
-