Программируем осциллограф. Библиотека 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 и откомпилируем простой пример, идущий с библиотекой.

Для этого нам нужны: 

  1. Наш любимый Маст дай -  ОС Windows;
  2. Собственно сам анализатор сигналов LESO4.2;
  3. Архив с исходным кодом библиотеки (https://bitbucket.org/iRyaz/leso4_api/downloads);
  4. MinGW (http://www.mingw.org/) порт компилятора GNU под Windows, библиотека компилируется именно в нем. Никакой Visual Studio, только Хардкор!!!;
  5. 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.

 

28 августа 2015

Комментарии:



Аватар пользователя Аннушка

Как установить MinGW ? Перерешла насайт http://www.mingw.org/, зашла в Download. Чего качать-то? Сетуп, MinGW, или инсталл?

Аватар пользователя Аннушка

Скачала установщик, запустила, выбрала gcc, все долго устанавливалось. В результате установщик написал done, но стандартная консоль виндовс не знает ничего об mingw32-make. Нужно чего-то прописать Path. Как это сделать?

Лучше установить Qt Creator, он автоматом установит MinGW и потянет за собой все необходимые библиотеки. Что касается переменной Path - это хорошо знает гугл. Вот например https://msdn.microsoft.com/ru-ru/library/office/Ee537574%28v=office.14%29.aspx

Windows 7 Максимальная, SP1, 32-бит.
 Установлен только mingw32-make. Qt не ставил. Библиотеку собрал нормально, появилась libLESO4.dll. Собираю тестовый пример, появляется test.exe. Ok. Подключаю прибор, отображается в диспечере устройств как "USB Serial Converter". Ok. Запускаю программу:

C:\LESO\LESO4\leso4_api>test.exe
Error open device: LESO4.1_ER

angry

Вопрос, как узнать DEVICE_DESCRIPTOR? Всегда ли он будет  "LESO4.1_ER"? А можно ли как-нибудь, по другому открыть анализатор? Или вообще не туда копать?

DEVICE_DESCRIPTOR указан в файле leso4.h, только там он называется

 #define LESO4_DEVICE_NAME "LESO4.1_ER" 

Потом с появления других версий устройства, будут и другие дескрипторы. Все они будут находиться в файле leso4.h

По тестовой программе, тут драйвера установились, программа не может открыть устройство. Возможно просто устройство не успело зарегистрироваться в системе. Попробуй перезапустить компьютер

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

Если два устройства с одинаковыми дескрипторами, то будет восприниматься только последний подключенный девайс. Библиотека пока поддерживает только одно подсключенное устройство. Но можно добавить функцию сканирования устройств по серийному номеру

Вообще, у меня в программу выполняется поиск устройств следующим образом.

Функции leso4Open передается первый дескриптор. Если функция возвращает -1 , то этот девайс не подключен.

Дальше вызывается функция leso4Open с другим дескриптором и опять проверяется возавращающее значение. И так далее.

Как собрать скомпилировать тестовую программу  (test.c) в Ubuntu?

$  gcc -o test test.c -I. -lLESO4 -L .
./libLESO4.so: undefined reference to `dlsym'
./libLESO4.so: undefined reference to `dlopen'
./libLESO4.so: undefined reference to `dlclose'
collect2: error: ld returned 1 exit status

Если собираешь в линуксе, то надо добавить еще флаг -ldl

Аватар пользователя Александр

Приветствую!

Скачал архив с исходным кодом библиотеки, распоковал. Там скрипт на bash и два архива .tgz. У меня Windows7 64. Как распоковать эти архивы?

Аватар пользователя Александр

Распоковал с помощью 7-Zip. Там папочка release, Makefile нет. Как скомпилировать?

Сдается мне, что вы не то скачали. Если пройти по ссылке https://bitbucket.org/iRyaz/leso4_api/downloads ,то найдем два пункта для скачивания:

Download repository и libLESO4.zip . Видимо, вы скачали последний. Там лежит готовый, собранный для Linux модуль. Вам нужны исходники. Для этого скачиваем репозитоий.

Орфографическая ошибка в тексте:
Чтобы сообщить об ошибке автору, нажмите кнопку "Отправить сообщение об ошибке". Вы также можете отправить свой комментарий.