Программируем осциллограф. Библиотека libLESO4. Шаг 0x01
Рязанов Илья А., Весельчак И., ryasanov@gmail.com
Для анализатора сигналов LESO4.2 разработана библиотека libLESO4, реализующая прикладной программный интерфейс (API). Благодаря которому можно управлять прибором и читать с него данные для последующей обработки. Это может служить основой для разных виртуальных приборов. Сама библиотека написана на языке C++ и является динамической, но функции экспортируются в стиле обычного Си, поэтому теоретически библиотеку можно использовать в любой среде программирования, например Delphi, LabView. Подробности можно почитать на https://bitbucket.org/iRyaz/leso4_api. Все экспортируемые функции есть в файле leso4.h. Библиотека для своей работы требует установленный официальный драйвер D2XX, так как прибор LESO4.2 использует USB контроллер FTDI.
В этой статье мы соберем драйвер из исходников в операционной системе Windows и откомпилируем простой пример, идущий с библиотекой.
Для этого нам нужны:
- Наш любимый Маст дай - ОС Windows;
- Собственно сам анализатор сигналов LESO4.2;
- Архив с исходным кодом библиотеки (https://bitbucket.org/iRyaz/leso4_api/downloads);
- MinGW (http://www.mingw.org/) порт компилятора GNU под Windows, библиотека компилируется именно в нем. Никакой Visual Studio, только Хардкор!!!;
- Qt framework (http://www.qt.io/download-open-source/) - нужен только для компиляции нашего осциллографа, он уже содержит в своем составе MinGW, так что если планируется установить Qt, то предыдущий пункт можно не устанавливать.
Для того используемые утилиты были доступны в командной строке Windows, пути к ним необходимо добавить в системную переменную Path. Например сборка MinGW, идущая вместе с Qt, по умолчанию обычно находится в C:\Qt\Tools\mingw491_32\bin.
Когда все настроили, открываем стандартную консоль (В Windows 7 – набрать cmd в меню пуск. В консоли переходим в директорию, где будет собираться проект. Я для примера создал директорию с названием "leso4_api" в корне диска C.
cd c:\\leso4_api
Далее распаковываем содержимое архива с исходным кодом библиотеки в созданную директорию.
Теперь соберем библиотеку командой mingw32-make. Это MinGW аналог команды make.
mingw32-make
Если команда не найдена, значит в системной переменной Path неправильно указан путь к MinGW.
Если ошибок нет, то в директории появится файл библиотеки libLESO4.dll.
Напишем тестовую программу, которая устанавливает связь с LESO4.2, включает измерительный канал D, читает отсчеты и выводит среднее значение в вольтах.
#include < stdio.h> #include < leso4.h> #define DEVICE_DESCRIPTOR "LESO4.1_ER" int main() { int i = 0; if(leso4Open(DEVICE_DESCRIPTOR) == LESO4_STATUS_OK) { leso4EnableChannel(CHANNEL_D);// Включить канал D printf("Device %s open\n", DEVICE_DESCRIPTOR); printf("Version: %d\n", leso4Version());// Вывести версию прибора printf("Read %d bytes\n", leso4ReadFIFO());// Прочитать данные с каналов int bufferSize = leso4GetChannelFIFOSize();// Получить размер буфера для одного канала double *buffer = leso4GetChannelD();// Получить указатель на буфер с отсчетами канала D double resultValue = 0;// Среднее напряжение for(i = 0; i < bufferSize; i++) { resultValue += buffer[i]; } resultValue /= bufferSize; printf("Middle Amplitude %f\n", resultValue); } else { if(leso4GetLastErrorCode() == ERROR_CODE_FTDI_LIB_NOT_LOADED) printf("D2XX not install\n");// Драйвер не установлен else printf("Error open device: %s\n", DEVICE_DESCRIPTOR); } return 0; }
Компилируем программу gcc -o test test.c -I. -lLESO4 -L.
Библиотека libLESO.dll и заголовочный файл leso4.h должны лежать в той же директории, где компилируется программа. Местоположение библиотеки и заголовочного файла указывается ключами -L и -I. Результат выполнения программы при подключенном приборе показан на ниже.
Теперь, после того как убедились в работоспособности прибора, можно откомпилировать демку.
Демка написана с использованием среды Qt Creator. Но собирать будем из консоли.
Запускаем консоль сборки Qt (меню Пуск - Все программы - Qt - 5.4 - MinGW 4.9(32-bit) - Qt 5.4 for Desktop MinGW 4.9(32-bit)) и в этой консоли переходим в папку с библиотекой.
cd C:\\leso4_api
Примеры лежат в папке examples. Нас интересует SignalPlotWidget
cd ./examples/SignalPlotWidget
В папке проекта запускаем утилиту qmake, которая на основе файла проекта SignalPlotWidget.pro, сгенерирует нам Makefile проекта qmake
Далее выполняем сборку mingw32-make.
Если сборка прошла успешно, то будет создана поддиректоия "release", где находится SignalPlotWidget.exe. Переходим в нее и запускаем программу cd ./release
SignalPlot.exe.
И получаем ошибку
Исполняемый файл использует функции из библиотеки libLESO4.dll, поэтому она должна находится в каталоге с исполняемым файлом. Просто скопируем библиотеку из корневого каталога и вновь запустим.
cp ../../../libLESO4.dll ./libLESO4.dll
SignalPlotWidget.exe
И увидим такой вот приборчик. Этот пример строит осциллограммы входного сигнала и демонстрирует использования всех функций библиотеки libLESO4.
Библиотека также поддерживает Linux, только требует установленный официальный драйвер D2XX под эту ОС. Сборка под Linux практически ничем не отличается от сборки под Window, только нужно использовать просто make, а не mingw32-make.
В следующей статье кратко рассмотрим основные функции этой библиотеки и использование вместе с LabView.
Комментарии:
пн, 08/31/2015 - 10:51
Постоянная ссылка (Permalink)
Как установить MinGW ? Перерешла насайт http://www.mingw.org/, зашла в Download. Чего качать-то? Сетуп, MinGW, или инсталл?
пн, 08/31/2015 - 12:04
Постоянная ссылка (Permalink)
Скачала установщик, запустила, выбрала gcc, все долго устанавливалось. В результате установщик написал done, но стандартная консоль виндовс не знает ничего об mingw32-make. Нужно чего-то прописать Path. Как это сделать?
пн, 08/31/2015 - 23:01
Постоянная ссылка (Permalink)
Лучше установить Qt Creator, он автоматом установит MinGW и потянет за собой все необходимые библиотеки. Что касается переменной Path - это хорошо знает гугл. Вот например https://msdn.microsoft.com/ru-ru/library/office/Ee537574%28v=office.14%29.aspx
вт, 09/01/2015 - 14:24
Постоянная ссылка (Permalink)
Windows 7 Максимальная, SP1, 32-бит.
Установлен только mingw32-make. Qt не ставил. Библиотеку собрал нормально, появилась libLESO4.dll. Собираю тестовый пример, появляется test.exe. Ok. Подключаю прибор, отображается в диспечере устройств как "USB Serial Converter". Ok. Запускаю программу:
Вопрос, как узнать DEVICE_DESCRIPTOR? Всегда ли он будет "LESO4.1_ER"? А можно ли как-нибудь, по другому открыть анализатор? Или вообще не туда копать?
вт, 09/01/2015 - 14:39
Постоянная ссылка (Permalink)
DEVICE_DESCRIPTOR указан в файле leso4.h, только там он называется
Потом с появления других версий устройства, будут и другие дескрипторы. Все они будут находиться в файле leso4.h
По тестовой программе, тут драйвера установились, программа не может открыть устройство. Возможно просто устройство не успело зарегистрироваться в системе. Попробуй перезапустить компьютер
вт, 09/01/2015 - 14:48
Постоянная ссылка (Permalink)
А как будет производиться выбор нужного? Может быть добавить еще функцию, которая возвращает список устройств, подключенных к системе и их дескрипторы? А еще и номера, чтоб можно было разрулить ситуацию, если подключено несколько приборов одного типа, например, в какой-нибудь технологической линии на производстве.
вт, 09/01/2015 - 14:55
Постоянная ссылка (Permalink)
Если два устройства с одинаковыми дескрипторами, то будет восприниматься только последний подключенный девайс. Библиотека пока поддерживает только одно подсключенное устройство. Но можно добавить функцию сканирования устройств по серийному номеру
вт, 09/01/2015 - 22:47
Постоянная ссылка (Permalink)
Вообще, у меня в программу выполняется поиск устройств следующим образом.
Функции leso4Open передается первый дескриптор. Если функция возвращает -1 , то этот девайс не подключен.
Дальше вызывается функция leso4Open с другим дескриптором и опять проверяется возавращающее значение. И так далее.
вс, 09/13/2015 - 21:03
Постоянная ссылка (Permalink)
Как собрать скомпилировать тестовую программу (test.c) в Ubuntu?
вс, 09/13/2015 - 19:56
Постоянная ссылка (Permalink)
Если собираешь в линуксе, то надо добавить еще флаг -ldl
вт, 12/01/2015 - 23:48
Постоянная ссылка (Permalink)
Приветствую!
Скачал архив с исходным кодом библиотеки, распоковал. Там скрипт на bash и два архива .tgz. У меня Windows7 64. Как распоковать эти архивы?
ср, 12/02/2015 - 11:11
Постоянная ссылка (Permalink)
Распоковал с помощью 7-Zip. Там папочка release, Makefile нет. Как скомпилировать?
ср, 12/02/2015 - 14:51
Постоянная ссылка (Permalink)
Сдается мне, что вы не то скачали. Если пройти по ссылке https://bitbucket.org/iRyaz/leso4_api/downloads ,то найдем два пункта для скачивания:
Download repository и libLESO4.zip . Видимо, вы скачали последний. Там лежит готовый, собранный для Linux модуль. Вам нужны исходники. Для этого скачиваем репозитоий.