14 апреля 2014

Данная статья демонстрирует, как использовать MATLAB и Instrument Control Toolbox для работы с различными внешними устройствами на примере переносного приемника GPS компании Garmin с последовательным интерфейсом RS-232.

Trent Jarvi, MathWorks

Многие пользователи MATLAB, которые анализируют данные, разрабатывают и проверяют алгоритмы или создают приложения, покидают среду MATLAB для импорта данных с внешнего оборудования. Этот дополнительный шаг снижает эффективность работы, вынуждая пользователей вручную переносить данные из одной среды в другую, а также обучаться работе в нескольких средствах программного обеспечения.

Данная статья демонстрирует, как использовать MATLAB и Instrument Control Toolbox для работы с различными внешними устройствами на примере переносного приемника GPS компании Garmin с последовательным интерфейсом RS-232. Здесь объясняется, как наладить обмен данными и взаимодействовать с последовательными устройствами, а также сгенерировать скрипт MATLAB, который может быть передан другим пользователям, повторно использован или добавлен в приложения, разработанные в MATLAB.

Используемый в этой статье код MATLAB доступен для загрузки.

 
 GPS приемник компании Garmin.

Устройства с последовательным интерфейсом RS-232, такие как приемники GPS и инструменты, такие как осциллографы и генераторы сигналов, могут быть настроены и управляться из MATLAB с Instrument Control Toolbox (рис. 1). Наш пример использует 12-канальное устройство GPS потребительского класса серии ETrex обычно используемое при пешем туризме и плавании на малых судах. В примере используется протокол обмена данными Национальной Ассоциации Морской Электроники (NMEA) 183, который должен работать с любым GPS устройством, поддерживающим последовательное соединение. Вы можете использовать другие протоколы, в том числе и запатентованный протокол компании Garmin, если имеете доступ к спецификациям.


34.jpg

 Рис. 1. Устройство GPS, подключенное к MATLAB.


Обнаружение и подключение к оборудованию.

Чтобы найти последовательные устройства и инструменты, доступные для связи, можно использовать следующие команды MATLAB: instrhwinfo, instrfind и serial. В качестве альтернативы можно воспользоваться интерактивным графическим инструментом TMTool, поставляемым с Instrument Control Toolbox, который позволяет находить, настраивать и управлять устройствами и инструментами без написания скриптов в MATLAB (рис. 2). Сначала мы посмотрим на доступное оборудование с помощью иерархического древа.


2.jpg

Рис. 2. Запуск TMTool из MATLAB.


Захват данных с устройства обычно требует установить соединение с ним по поддерживаемому интерфейсу связи. С помощью TMTool мы можем настраивать, управлять и собирать данные с устройств по устоявшимся интерфейсам, включая последовательный, GPIB, TCP/IP и UDP (рис. 3). TMTool также пригоден для связи с инструментами с помощью драйверов VISA, LXI, IVI и VXIplug&play.


3.jpg

Рис 3. Интерфейс TMTool.


Настройка последовательных устройств в MATLAB.

На рис. 4 раскрыта ветвь с последовательными портами, доступными для связи. GPS приемник настроен на передачу данных в формате NMEA – стандартную опцию для потребительского GPS оборудования.

После подключения приемника к порту COM1 выбираем окно с настройками (Configure) и устанавливаем их в соответствии с параметрами последовательного порта. NMEA определяет три параметра: скорость передачи 4800 б/с, 8 бит данных, 1 стоп бит и отсутствие бита четности.


4.jpg

Рис. 4. Настройка параметров последовательного порта.


Открываем соединение по последовательному порту после настройки его параметров. Статус соединения изменяется на «Подключено» (Connected), извещая нас о том, что теперь возможно взаимодействие с устройством GPS с помощью диалогового окна Communicate. Стандарт NMEA определяет передачу данных в виде строк, состоящих из символов ASCII и символа перехода на новую строку. С помощью раскрывающегося меню настраиваем параметры приема данных (Receiving data) в соответствии с этими требованиями.


5.jpg

Рис. 5. Сбор последовательных данных в TMTool.


Теперь можно передавать данные оборудованию и получать ответы. Все что нужно для нашего примера – считывать данные, поступающие от GPS. Можно проверить, верность установленного соединения и доступность интересующих нас данных, нажав несколько раз кнопку Read и наблюдая в журнале сообщений, что верно отформатированные строки были захвачены. После нескольких попыток координаты GPS появляются в результатах вместе с несколькими другими типами данных NMEA. В завершение мы закроем соединение с устройством GPS, чтобы это также отразилось в скрипте MATLAB, записывающем все наши действия в TMTool. Этот скрипт мы будем использовать в дальнейшем.


Повторное использование сессии.

Единожды настроив порт и чтение данных из устройства, мы можем повторить все эти действия, просто сохранив автоматически сгенерированный скрипт из TMTool в m-файл под названием get_gps_location.m (рис. 6).


6.jpg

Рис. 6. Автоматически сгенерированный из TMTool скрипт MATLAB.


Обработка данных GPS.

Мы настроили оборудование и записали данные, однако в них есть много лишней, не относящейся к местоположению информации, такой как путевые отметки и время снятия отсчетов. Мы можем добавить функции, выполняющие фильтрацию потока данных, в автоматически сгенерированный скрипт для работы с оборудованием.


% Create a serial port object.

obj1 = instrfind('Type','serial','Port','COM4','Tag','');


% Create the serial port object if it does not exist

% otherwise use the object that was found.

if isempty(obj1)

obj1 = serial('COM4');

else

fclose(obj1);

obj1 = obj1(1);

end


% Set BaudRate at 4800.

obj.BaudRate = 4800;


% Connect to instrument object, obj1.

fopen(obj1);


% We only want the strings with $GPGLL…


data='';

while isempty(strmatch('$GPGLL',data))

data = fscanf(obj1);

end


% Parse the string to obtain coordinates

[lat,data] = strtok(data,',');

[lat,data] = strtok(data,',');

[nsCardinal,data] = strtok(data,',');

[long,data] = strtok(data,',');

[ewCardinal,data] = strtok(data,',');

lat = str2double(lat);

long = str2double(long);


% Display the results

disp({lat,nsCardinal,long,ewCardinal});


% Free the serial port

fclose(obj1);


Для захвата и обработки данных GPS достаточно просто запустить скрипт MATLAB_GPS_example.m из командной строки.


Создание универсального драйвера.

Только что рассмотренный подход будет достаточным для некоторых приложений, однако можно добиться еще большей автоматизации процесса обработки, добавив скрипт MATLAB к драйверу многократного использования. Это можно сделать с помощью инструмента для создания драйверов MIDEdit, входящего в состав Instrument Control Toolbox (рис. 7). Данный инструмент позволяет включить низкоуровневые команды в команды более высокого уровня, с которыми проще и удобнее работать. После запуска MIDEdit из командной строки, создадим новый драйвер с помощью контекстного меню FileNew.


7.jpg

Рис. 7. Создание драйвера с функцией getLocation с помощью MIDEdit.


В демонстрационных целях мы создадим драйвер в MATLAB, имеющий всего две функции: настройку устройства GPS и получение расположения. Однако MIDEdit позволяет создавать и более продвинутые драйверы, состоящие из сотен строк кода.

Для настройки устройства мы воспользуемся уже рассмотренным скриптом, который устанавливает скорость передачи данных и открывает порт. В MIDEdit выберем окно Connect в разделе Initialization and Cleanup и установим опцию Function style в значение M-code. Теперь скопируем скрипт из TMTool в функцию, созданную в редакторе драйверов. Отметим, что последовательный интерфейс может быть получен из переменной obj подаваемой в эту функцию. Скрипт MATLAB настроен на использование последовательного порта.

Чтобы считать GPS координаты, выберем раздел Function в MIDEdit и добавим новую функцию getLocation(). Эта функция будет получать широту, долготу и сторону света. В панели редактора MATLAB кода вставим скрипт, считывающий строки NMEA. Как и в первом примере, изменим функцию getLocation() так, чтобы она находила в потоке данных только GPS координаты и возвращала их в виде массива. Мы могли бы добавить больше функций для нахождения каждого типа информации NMEA. В завершение сохраним драйвер в workspace как nmeareveiver.mdd.


Использование универсального драйвера.

Драйвер готов к использованию с GPS устройством. В TMTool раскроем вкладку Instrument Drivers и создадим новый объект интерфейса (interface object) щелкнув правой кнопкой по вкладке interface object. Выбираем последовательный порт в раскрывающемся меню Interface object type и выбираем порт, к которому подключено устройство. Объект интерфейса будет настроен, открыт и считан согласно процессу, описанному в предыдущих секциях, но в этот раз мы будем использовать драйвер инструмента для задач захвата и анализа данных.

Теперь создадим новый объект устройства (device object) во вкладке Device Object и выберем драйвер nmeareceiver.mdd. Затем мы подключим GPS устройство к последовательному порту через интерфейс объекта. Интерфейс можно изменить, если устройство и драйвер поддерживают больше одного интерфейса. После завершения этих операций nmeareceiver появится под вкладкой Device Object.

Теперь мы можем подключиться к GPS с помощью кнопки Connect. В окне функций запустим функцию getLocation(), в результате чего будет считано текущее расположение. Результаты могут быть экспортированы в workspace для дальнейшего анализа.

Когда вы выполняете действия с драйвером в TMTool, автоматически генерируется cкрипт MATLAB. Как и в прошлом примере при работе с GPS устройством без драйвера, этот сгенерированный скрипт позволяет повторно использовать проделанную работу для связи с устройством.


% Create a SERIAL object.

interfaceObj = serial('COM4');


% Create a device object.

deviceObj = icdevice('nmeareceiver.mdd', interfaceObj);


% Connect device object to hardware.

connect(deviceObj);


% Call the getLocation function.

invoke(deviceObj, 'getLocation');


%...


% Disconnect device object from hardware.


disconnect(deviceObj);


Можно повысить пригодность драйвера к повторному использованию, добавив функции для отметки высот, даты, времени и точек маршрута. Драйвер может быть передан пользователям, которым не нужно разбираться в деталях как взаимодействовать с их устройствами.


Итоги.

Для демонстрации настройки и захвата данных с внешних устройств из среды MATLAB, было выбрано устройство GPS. Мы использовали графические инструменты из Instrument Control Toolbox и не писали скриптов вручную. Затем мы показали, как повторно использовать проделанную работу по настройке оборудования с помощью автоматически сгенерированных скриптов и как добавить дополнительный функционал через драйверы. Использование MATLAB повышает эффективность работы, исключая необходимость изучения и ручного переноса данных из других видов программного обеспечения.


Загрузить скрипты, используемые в этой статье

Поддерживаемое оборудование для Instrument Control Toolbox

История успеха
Разработка электронного блока управления электрооборудованием электробуса с помощью модельно-ориентированного проектирования
20.07.2022
Новость
Путеводитель по созданию стендов полунатурного моделирования (HIL) оборудования самолётов
28.12.2020
Новость
Новые онлайн курсы ЦИТМ "Экспонента"
29.05.2020
Новость
Сборник материалов VI всероссийской научно-практической конференции "Технологии разработки и отладки сложных технических систем"
03.04.2020
Новость
Онлайн сессия "Автомобильные системы". В рамках конференции "Технологии разработки и отладки сложных технических систем"
19.03.2020
Новость
Внимание! Изменение формата конференции “Технологии разработки и отладки сложных технических систем” на online
18.03.2020
Новость
VII всероссийская конференция «Технологии разработки и отладки сложных технических систем» - авиационная и аэрокосмическая промышленность
10.03.2020
Видео
Интервью с руководителем отдела Arrival
21.02.2020
Новость
Системы управления на конференции в МГТУ
18.02.2020
Видео
Введение в обучение с подкреплением в MATLAB (reinforcement learning)
31.01.2020
Видео
Основы цифровой схемотехники. 15. Счётчики
22.01.2020
Видео
Основы цифровой схемотехники. 14. Регистры
21.01.2020