Создание проекта Интернета вещей. Методические указания. Часть Создаём проект Генерация ключа приложения (appKey)
Скачать 3.08 Mb.
|
Создание проекта «Интернета вещей». Методические указания. Часть 1. Создаём проект Генерация ключа приложения (appKey) При задании параметров ключа приложения нужно указать его имя (желательно близкое к названию проекта, чтобы упростить поиск), а также выбрать пользователя. Скопируйте значение ключа, он пригодится в дальнейшем. Создаём шаблон вещи 1. Придумайте, что вы собираетесь автоматизировать и какие данные вам понадобятся. Подготовьте схему данных и диаграммы потоков данных 2. Cоздаём шаблон Создаём на базе «пустого» шаблона Создаём свойства, которые будут заданы в шаблоне Нужно определить несколько свойств с указанием типов, которые были придуманы на этапе проектирования. Например, ComandCounter - целое – счётчик команд Temp – температура Humid - влажность Создаём сервис. Например, InputOutputService Имя должно быть уникальным в пределах вещи. На странице Input/Output задаем параметры ввода, вывод в формате JSON и вписываем скрипт трансляции Создаем вещь из подготовленного шаблона и не забываем сгенерировать домашний мешап Перетаскиваем несколько меток (Label), цифровых индикаторов (LEDDisplay) и кнопку (Button) И настраиваем по вкусу с использованием панели «свойства» внизу Не забываем задать имя!!!! Можно полюбоваться «окном в мир» нашего приложения через Preview Закрываем редактор мешапа и сохраняем нашу вещь. В редакторе мэшапов нужно добавить вещь и стандартный сервис GetProperties (в правой верхней части экрана нажать зеленый плюс, в появившемся окне выбрать вещь и сервис). Затем нужный параметр из этого сервиса нужно связать с виджетом LEDDisplay (перетащить его на виджет), выбрать Data. Затем, чтобы отображаемые данные постоянно обновлялись, нужно связать виджет AutoRefresh (поставить нужный интервал обновления), с сервисом GetProperties (перетащить Refresh из виджета AutoRefresh на этот сервис). Теперь можно попробовать протестировать свойства и выполнить запрос из браузера по отправке данных в облако ThingWorx http://tvsn.cloud.thingworx.com/Thingworx/Things/PolytechThing_0000/Services/InputOutputServiceLocal?method =post&appKey=6699f75d-b44e-4e0f-81c3-b96bd7e4db96&method=post&x-thingworx- session=true<&temp=20&humid=30 В тексте запроса нужно поменять имя вещи (на своё), имя сервиса, appKey и параметры в конце запроса Дополнительно Настройте мешап и виджеты в соответствии со своей индивидуальной задачей, дополните свойства и отредактируйте сервисы. Создание проекта «Интернета вещей». Методические указания. Часть 2. Обработка действий пользователя Добавим в проект возможность интерактивного взаимодействия с приложением через действия и ввод данных. Откроем Mashup в режиме редактирования и разместим на нем кнопку (button) и текстовое поле (textbox) для ввода текста Измените в панели свойств (слева внизу) идентификаторы на те, которые будут удобны для программирования Реализуем запись данных желаемой скорости помпы в нашу вещь управления теплицей. Для этого добавим в неё данное свойство. Не забываем сохраниться Возвращаемся к мэшапу, выделяем кнопку, а затем и добавляем новый сервис данных SetProperties из PolytechThing_0000 В свойствах кнопки ищем событие Clicked И связываем событие и сервис перетаскиванием После разворачиваем сервис SetProperties Затем выбираем текстовый бокс (PompSpeed), находим его свойство Text и перетаскиваем на свойство PompSpeed Сохраняем изменения, открываем исходную вещь и заходим в домашний мэшап Вводим значение и кликаем на кнопке: Теперь можно просмотреть изменения в разделе «Свойства» (Properties), не забыв обновить значения. Теперь нужно вернуться в редактор свойств и задать диапазоны возможных значений скорости помпы Для удобства восприятия режима работы теплицы желательно добавить индикатор скорости работы помпы на мэшап и настроить его обновление добавив связь с виджетом AutoRefresh, перетаскивая свойство Refresh поочерёдно на каждый сервис. Помимо стандартных сервисов GetProperties и SetProperties для целей автоматизации могут быть созданы дополнительные сервисы. Их также можно будет назначить на различные события. Этим мы займёмся позднее. Создание проекта «Интернета вещей». Методические указания. Часть 3. Графический интерфейс пользователя Добавим в проект медийные составляющие – графические элементы (изображения). Выберем объект визуализации (Media) Укажем уникальное имя и выберем (Change) файл с изображением на локальном компьютере Сохраняем и переходим к редактированию мэшапа Выбираем базовую панель (щелчок на пустом месте мешапа) и в свойстве Style удаляем стандартные настройки Получаем возможность определить новые свойства Выбираем возможность создать пользовательские свойства Задаём подходящее имя и выбираем изображение из загруженных ранее Сохраняем и смотрим на изменения Теперь добавим изображения по той же схеме. Сначала загружаем изображение в медиатеку (лучше выбирать файлы PNG с прозрачным фоном) и даём им понятные имена. Но теперь поместим на мэшап виджет «Изображение» ( Image ) и настроим его свойство SourceURL И смотрим на полученный результат: Дополнительно Выполните оформление мэшапа в соответствии с индивидуальным проектом. Обратите внимание, что дизайн кнопок также настраивается. Создание проекта «Интернета вещей». Методические указания. Часть 4. Сложная обработка данных Пользовательские методы обработки событий виджетов На данный момент структура обработки данных в проекте довольно примитивна, а самое главное – неуправляема. Пользователь и конечное устройство могут задавать любые значения. ThingWorx позволяет задавать пользовательские методы обработки событий виджетов, связывая их в редакторе мэшапов по аналогии со стандартными методами (сервисами) GetProperties и SetProperties. Создадим в нашей вещи новый сервис IncComandCounter, который будет наращивать счётчик команд. Эта операция пригодится для корректного управления конечным устройством, при реализации процедуры забора им команд из облака. Сохраняем изменения в вещи. Открываем мэшап и добавляем сервис IncComandCounter из нашей вещи на правую панель. Затем выделяем кнопку, находим событие Click в панели свойств (слева-снизу) и перетаскиваем её на сервис. Если всё сделано правильно, то вид связей для сервиса и кнопки должны выглядеть примерно так: Обратите внимание, что в данном примере сервис наращивания индекса команды будет вызываться также при загрузке мэшапа. Если данное поведение нежелательно, то связь нужно удалить. В завершение модифицируем сервис получения-отправки данных для конечного устройства так, чтобы выполнялся вывод скорости помпы в формате JSON-ответа. Запустим мэшап в режим просмотра можно несколько раз понажимать кнопку, а затем в адресной строке браузера выполнить запрос отправки данных с конечного устройства (см. ранее). Ответ сервера должен содержать значение счётчика команд и скорости помпы. Пояснение: Использование счётчика команд помогает конечному устройству понять, что пришедшие данные – это новая команда, поскольку «старое» значение счётчика будет иным. Фактически – это упрощённая версия «отсечки времени» (TimeStamp) в системах распределенного управления. Подписка на события вещей Технология интеграции виджетов в мэшапы для конструирования интерфейса оператора позволяет создавать графический интерфейс пользователя, реагирующий на его действия. А при использовании виджета AutoRefresh – имитировать непрерывную обработку данных и выполнение последовательных операций, а также выполнять контроль значений свойств с целью их коррекции (перевод в допустимый диапазон). Однако использование регулярного опроса через события AutoRefresh будет работать, только если мэшап будет загружен (открыт) и, к тому же, значения между моментами обновления будут неконтролируемы. Платформа ThingWorx предоставляет специальный инструмент для реакции на события, происходящие с вещами и данными в них – подписки (Subscriptions). Код, внедрённый в подписку, выполняется сразу по факту генерации системой соответствующего события. Создадим подписку на событие изменения значений скорости помпы, чтобы контролировать выход значения за обозначенный диапазон. Нас будет интересовать событие DataChange. Создаём новую подписку Интересующее нас событие - DataChange у свойства PumpSpeed . Записываем простой скрипт контроля диапазонов значения. Не забываем галочку Enabled для того, чтобы подписка обрабатывалась. Модернизировав мэшап для просмотра текущего значения скорости помпы, получаем желаемый контроль диапазона значений скорости помпы от 0 до 100. Кроме «стандартных» событий, свойства вещи могут определять собственные события, например, контроль выхода за диапазон. Для этого в редакторе свойства доступна опция «Управление оповещениями». А затем создаём новую подписку В данном случае на мэшапе размещено текстовое поле для нового свойства MiskText, которое используется для «технических» сообщений для отладки проекта. Облачная платформа ThingWorx строится на принципе мультиагентной системы в рамках которой отдельные приложения представляются набором взаимодействующих объектов – агентов, настроенных на решение собственных задач. При этом агенты обмениваются информацией и взаимодействуют друг с другом при выполнении тех или иных действий в облаке. ThingWorx предлагает использовать для взаимодействия между агентами прямую запись-чтение свойств («грязный» подход), вызов сервисов и подписку на события других вещей. В рамках скрипта подписки можно как читать, так и записывать свойства других вещей. Используя подписки можно создавать распределенные системы управления. Разработка такой системы посвящена лабораторно-практическая работа № 1 «Проектирование системы удалённого управления промышленным роботом-манипулятором паллетайзером». Московский политехнический университет Современные интернет технологии Лабораторно-практическая работа № 1 Проектирование системы удалённого управления промышленным роботом-манипулятором паллетайзером Задание Разработать систему управления промышленным роботом-манипулятором, настроенным для выполнения задачи паллетирования – переноса и укладки объектов на платформу системы хранения (паллету). Описание работы Для операции паллетирования шестиосевой роботизированный манипулятор настраивается для выполнения операции перекладки без изменения ориентации объектов. Фактически, работа сервомоторов манипулятора синхронизирована таким образом, чтобы схват был всегда ориентирован в вертикальной плоскости, перпендикулярной осевой линии манипулятора. Кроме того, паллетирование ведётся на одной высоте, поэтому функция управления высотой подъема схвата реализована в виде команд к выполнению операций захвата-подъема, удержания-перемещения и отпускания-отпускания объектов двух заданных размеров. Стартовые положения изделий (рабочих объектов) на исходной паллете фиксированы. Итоговые положения задаются упаковочной коробкой и также фиксированы. Для выполнения задания разработчику приложения «интернета вещей» необходимо разработать приложение, содержащее форму, с которой будет отдаваться программа выполнения действий – шести операций перекладки и команды управления светофором. Индивидуализация задания будет заключаться в указании последовательности перекладки изделий в виде таблицы. Правильное выполнение задания предполагает последовательную передачу следующей команды перекладки после завершения предыдущей операции, а также использование индикации режимов функционирования робота светофорными сигналами. Порядок взаимодействия с оборудованием Получение информации от оборудования и управлением им осуществляется через виртуальные объекты, созданные на платформе ThingWorx. Параметры объектов и порядок их работы с реальным оборудованием праведен ниже. Светофор Светофор (светосигнальная лампа) является визуальным индикаторным устройством, подключенным к системе управления роботом, однако разработчик имеет полный контроль над его сигналами через вещь, связанную с мобильным роботом. Свойства для управления: Color – цвет сигнала,целое, ключ в ответе сервера в формате JSON – T (TrafficLights) Значения: 0- красный (аварийная ситуация), 1 – синий (выполнение команды), 2 – зелёный (ожидание команды). Робот-манипулятор Робот-манипулятор предназначен для выполнения производственных операций путём захвата, перемещения и опускания изделий в указанных позициях в цилиндрической системе координат. Свойства для мониторинга: Status – статус системы управления, целое, 1 – выполняет команду, 0 – ожидание команды, ключ - s Control – статус робота, целое, 1 – движется, 0 – ожидание, ключ - c Motor1 – Motor 6 – позиции сервомоторов, целые, ключи – m1, m2, m3, m4, m5, m6 Last command number – номер выполненной команды, целое, ключ - n Свойства для управления: Position X – угол поворота робота вокруг вертикальной оси, целое, ключ в ответе сервера – X Position Y – удаленность схвата от вертикальной оси робота, целое, ключ в ответе сервера – Y Gripper – режим положения схвата, целое, 1- захватить объект, 0 – отпустить объект, ключ – G Product type – тип изделия, целое, 1 – большой объект, 0 – малый объект, ключ – P Current command number – номер текущей команды, целое, ключ – N Модули задания Работа выполняется индивидуально или в парах. Примерный вид заготовки интерфейса создаваемого приложения: 1. Организация мониторинга оборудования Разработать приложение (вещь и мэшап) для мониторинга состояния промышленного робота с графической индикацией статуса системы управления и статуса робота, а также с текстовой индикацией позиций сервомоторов. Получение данных осуществить чтением значений из вещи FactoryRoboticArm1. Наименование вещи: Polytech_i00000_FactoryRobot, где «0000» нужно заменить на индивидуальный номер. 2. Организация системы управления роботом манипулятором Доработать приложение, добавив сервис управления роботом путём ввода координат, режима положения схвата, типа изделия и номера текущей команды, а также реализовать перекладку одного изделия между указанными кнопками позиций. Наименование сервиса: InputOutputService 3. Организация системы паллетирования Доработать приложение, добавив возможность автоматизации перекладки всех изделий согласно индивидуальному заданию. Реализовать функцию светофорной индикацией работы робота. Создание проекта «Интернета вещей». Методические указания. Часть 6. Работа с таблицами и массивами данных Пользовательские шаблоны данных Создание приложений для сбора данных и мониторинга большого числа конечных устройств невозможно без использования каких-либо агрегирующих способов хранения наборов однотипных данных – массивов, списков, таблиц баз данных или прочего. Кроме того, применение только базовых «простых» типов данных для передачи структурированной информации тоже не является приемлемым подходом, так как провоцирует ошибки потери фрагментов данных. Для решения этих задач ThingWorx предлагает использовать шаблоны данных (Data Shapes) и хранилище данных на базе таблиц данных (Data Tables). Организуем хранилище для программы робота-паллетайзера Создаем новый шаблон данных (Data Shape) Задаем имя, описание И водим структуру данных, обращая внимание на тип каждого поля. Необходимо также помнить, что для доступа к отдельным записям необходимо будет где-то хранить уникальное значение – «первичный ключ». В указанном примере специально одно поле (N) отведено для данной цели. Сохраняем шаблон данных и убеждаемся, что он доступен для использования (есть в общей таблице). Информационная таблица как аналог массива (списка) данных Создадим в нашей вещи новое свойство, имеющее тип информационной таблицы (INFOTABLE), с использованием подготовленного шаблона данных. Сохранимся и создадим сервис загрузки (создания) программы робота в информационную таблицу. Самое важное, правильно указывать в коде имена полей шаблона данных, поскольку подсветка синтаксиса не предоставляет нужной информации. Сохраняем и проверяем скрипт (кнопка Test) Команда успешно добавлена! Теперь можно добавить загрузку ещё нескольких строк. А затем попробовать отобразить наше свойство на мэшапе. В редакторе мэшапов вытаскиваем на форму виджет Grid Далее «как обычно» используем стандартный сервис GetProperties как источник данных и перетаскиваем нужное свойство (RobotComandList) на свойство Data созданного виджета Grid Сохраняемся и запускаем просмотр. Если ошибок не было, то наша программа для робота отображается на мэшапе в виде таблицы Конечно, в реальном проекте такой вариант отображения данных малоприемлем. Ведь это «сырые» данные. Мы решим эту проблему чуть позднее, а пока реализуем ещё одну приятную функцию виджета Grid – редактирование данных. Для этого нужно перетащить свойство EditedTable на параметр RobotComandList сервиса SetProperties. Таблица соединений виджета Grid приобретет следующий вид Для того, чтобы заработало редактирование необходимо настроить разрешение на редактирование, установив явно свойство isEditable виджета, а также настроить само отображение столбцов данных. Ключевой момент настройки, указать тип данных для рендерера, поскольку только тогда станет доступен встраиваемый редактор значений для ячеек таблицы (грида). После окончания нажимаем Done и сохраняем мэшап. Теперь у нас появится возможность редактирования (коррекции) программы робота. Правда, необходимо обратить внимание, что при включённом виджете AutoRefresh редактировать данные очень сложно, так как происходит перезагрузка старых значений из информационной таблицы. Если есть необходимость оставить приложение в таком виде, то при редактировании автообновление нужно будет отключать. А также необходимо будет для отправки данных после редактирования нажимать кнопку «Установить», которую мы ранее связали с сервисом SetProperties, поскольку сам грид не знает об окончании редактирования. Традиционным «обходным» способом решения данной проблемы является использование события DoubleClicked виджета Grid. Если его связать (перетянуть) на сервис SetProperties то значения будут вноситься в свойство по двойному щелчку. Правда, это вноситься будут данные вообще со всех связанных с SetProperties виджетов. Решение этой проблемы заключается в создании отдельных сервисов для обмена данными с мешапом. Этот вопрос мы разберем позднее. Использование массивов Поскольку у нас есть массив данных записей пользовательского типа в виде информационной таблицы, то его можно использовать, к примеру, для хранения и выборки следующей команды для робота. Для этого можно придерживаться следующей стратегии: Создать отдельное свойство-счётчик ProgramCurrentLine и установить в нем значение -1 , означающее, что программа не активна Модифицировать сервисы взаимодействия с роботом таким образом, чтобы они загружали в свойства X, Y, Gripper, ProductType новые значения из следующей строки массива, попутно увеличивая Current command number и счётчик строки программы ProgramCurrentLine. Сделать это можно в подписке на статус робота, либо в сервисе обмена данных с роботом InputOutputService. Теперь для старта программы робота необходимо будет установить свойство ProgramCurrentLine в ноль и дождаться вызова сервиса. В случае использования подписок на статус робота, нужно будет реализовать отдельный «стартовый» сервис, который запишет в свойства данные из первой строки программы робота, а затем установит счётчик ProgramCurrentLine в единицу (т.к. стартовая «нулевая» команда уже будет выполнена). |