Не компилируется программа для ЛИР 919

Модератор: Денис Кашин

Ответить
Ivan1970
Сообщения: 13
Зарегистрирован: 25 фев 2022, 04:13

Не компилируется программа для ЛИР 919

Сообщение Ivan1970 »

При попытке скомпоновать проекты из "Библиотека ULP_LIB" и запустить проект PositionerSample.vcxproj в Microsoft Visual Studio C++ 2022 для платформы Win32 вышло сообщение:
Не удается запустить программу ‘X:\Projects\CKB ИC\MS Visual Studio\Win32\Debug\ulp_lib.dll'.
X:\Projects\CKB ИC\MS Visual Studio\Win32\Debug\ulp_lib.dll не является допустимым приложением Win32.
Что это может значить?
Для справки: установлен Microsoft Visual Studio Community 2022 (64-разрядная версия) - Current Версия 17.3.5. Установленные продукты: Visual C++ 2022.
Windows 10:
Процессор Intel(R) Core(TM) i3-4330 CPU @ 3.50GHz 3.49 GHz
Тип системы 64-разрядная операционная система, процессор x64
Ivan1970
Сообщения: 13
Зарегистрирован: 25 фев 2022, 04:13

Re: Не компилируется программа для ЛИР 919

Сообщение Ivan1970 »

Судя по всему, требуется скачать и установить Microsoft Visual C++ 2013, под которым были собраны файлы проектов "Библиотека ULP_LIB", но с сайта Microsoft это сделать не удалось (то ли ошибки сайта, то ли запрет на скачивание в России). Нельзя ли пересобрать эти исходники и DLL под Microsoft Visual Studio 2022?
Михаил Поляков
СКБИС
СКБИС
Сообщения: 79
Зарегистрирован: 06 фев 2008, 16:10

Re: Не компилируется программа для ЛИР 919

Сообщение Михаил Поляков »

Пересобрал примеры на VS2022
https://disk.yandex.ru/d/r0995jPSBAeaxA
Ivan1970
Сообщения: 13
Зарегистрирован: 25 фев 2022, 04:13

Re: Не компилируется программа для ЛИР 919

Сообщение Ivan1970 »

Михаил Поляков писал(а): 12 дек 2022, 11:09 Пересобрал примеры на VS2022
https://disk.yandex.ru/d/r0995jPSBAeaxA
Я попробовал собрать проект Sample.zip в среде Microsoft Visual Studio 2022, но при этом вышли ошибки в файле \inc\ulp_tools.h.
Я использовал каталог \inc со старыми заголовочными файлами *.h. Видимо, в этом проблема. Вы не могли бы выложить весь проект со всеми каталогами
\inc
\Samples
\Win32
\x64
?
Михаил Поляков
СКБИС
СКБИС
Сообщения: 79
Зарегистрирован: 06 фев 2008, 16:10

Re: Не компилируется программа для ЛИР 919

Сообщение Михаил Поляков »

Выкладываю весь проект, проверил под VS2022

https://disk.yandex.ru/d/7zAk1tBMEdYGuQ
Ivan1970
Сообщения: 13
Зарегистрирован: 25 фев 2022, 04:13

Re: Не компилируется программа для ЛИР 919

Сообщение Ivan1970 »

Спасибо, пока все работает.
Ivan1970
Сообщения: 13
Зарегистрирован: 25 фев 2022, 04:13

Re: Не компилируется программа для ЛИР 919

Сообщение Ivan1970 »

Мы пытаемся собрать и запустить TimerSensor.exe для сбора данных с датчика, подключенному к ЛИР 919П. Программа ULP_Demo работает нормально и правильно показывает данные с линейки:

Изображение

Наша задача - организовать сбор данных аналогичным образом и записать в файл results.txt.
1. В тексте программы TimerSensor.cpp есть следующие строчки:
// Создаем структуру, содержащую 4 таймера, 8 виртуальных входов и 8 виртуальных выходов
__ulp_m_virtual_io::__SETTINGS_TYPEDEF<4, 8, 8> v_io_settings;
- почему 4? Можно ли задать только один таймер?
2.
uint32_t dfreq = 1000 / freq; // Определяем делитель частоты для записи в устройтсво
// Настраиваем таймер в режим меандра, период 10 мс
ulp_clear_last_command();
// Создаем структуру, содержащую 4 таймера, 8 виртуальных входов и 8 виртуальных выходов
__ulp_m_virtual_io::__SETTINGS_TYPEDEF<4, 8, 8> v_io_settings;
//Настраиваем 0-й таймер
v_io_settings.timers[0].pulse = false; // режим работы меандр
v_io_settings.timers[0].max_cntr = dfreq; // записываем делитель частоты
ulp_send_message(handle, virtual_io_module_num, __ulp_module::__SHARED_CMD::__SET_MODULE_SETTINGS, (uint8_t*)&v_io_settings, sizeof(__ulp_m_virtual_io::__SETTINGS_TYPEDEF<4, 8, 8>));
ulp_exchange(handle, ATIME, false);
if (lastCommand.ndata_bytes && (lastCommand.data_ptr[0] == ACK))
{
cout << "Таймер настроен." << endl;
}
Частоту задаем равной, к примеру, 100 Гц, время чтения значений из буфера в секундах = 0.01.
В данном куске кода программы TimerSensor.cpp переменная lastCommand.ndata_bytes становится равной 0. Из-за этого не выполняются куски кода при условии if (lastCommand.ndata_bytes). Возможно, это из-за того, что неправильно задана частота и/или время чтения значений из буфера в секундах? В каких пределах их нужно задавать? (В нашей 64-разрядной системе Windows 10 не получилось установить драйвера ЛИР. Это не может повлиять на работоспособность программы?)
Владимир Чухляев
СКБИС
СКБИС
Сообщения: 45
Зарегистрирован: 19 июл 2022, 09:35

Re: Не компилируется программа для ЛИР 919

Сообщение Владимир Чухляев »

Здравствуйте, Иван
Программа ULP_Demo работает нормально и правильно показывает данные с линейки

У Вас, видимо, старая версия ULP_Demo. Скачайте у нас с сайта новую. В логе сообщений не должно быть флуда сообщением "обновление настроек модуля".
почему 4? Можно ли задать только один таймер?
Все шаблонные параметры структуры должны соответствовать числу соответствующих узлов в устройстве.В противном случае у Вас не сойдется размер настроек и устройство их не примет.
В данном куске кода программы TimerSensor.cpp переменная lastCommand.ndata_bytes становится равной 0. Из-за этого не выполняются куски кода при условии if (lastCommand.ndata_bytes). Возможно, это из-за того, что неправильно задана частота и/или время чтения значений из буфера в секундах?
Это из-за того, что в вашем устройстве нет модуля виртуальных входов/выходов, который Вы пытаетесь настроить .
В каких пределах их нужно задавать?
Пределы значений настроек указаны в описании протокола ULP.
В нашей 64-разрядной системе Windows 10 не получилось установить драйвера ЛИР
Какой драйвер Вы пытаетесь установить? ЛИР-919* работает через стандартный hid драйвер, который уже есть в вашей системе.
Ivan1970
Сообщения: 13
Зарегистрирован: 25 фев 2022, 04:13

Re: Не компилируется программа для ЛИР 919

Сообщение Ivan1970 »

1.
Владимир Чухляев писал(а): 23 дек 2022, 10:08
В данном куске кода программы TimerSensor.cpp переменная lastCommand.ndata_bytes становится равной 0. Из-за этого не выполняются куски кода при условии if (lastCommand.ndata_bytes). Возможно, это из-за того, что неправильно задана частота и/или время чтения значений из буфера в секундах?
Это из-за того, что в вашем устройстве нет модуля виртуальных входов/выходов, который Вы пытаетесь настроить .
Простите, что подразумевается под "модулем виртуальных входов/выходов"? Виртуальный COM-порт?

2. Укажите, пожалуйста, ссылку на скачивание программы LIR-919 Demo с таким интерфейсом:

Изображение

(у нас сейчас есть только программа ULP_Demo.exe с указанным выше интерфейсом).
Владимир Чухляев
СКБИС
СКБИС
Сообщения: 45
Зарегистрирован: 19 июл 2022, 09:35

Re: Не компилируется программа для ЛИР 919

Сообщение Владимир Чухляев »

Здравствуйте, Иван
Простите, что подразумевается под "модулем виртуальных входов/выходов"? Виртуальный COM-порт?
Нет.
ulp_demo.png
ulp_demo.png (34.13 КБ) 10715 просмотров
стр.52 в описании протокола.
Укажите, пожалуйста, ссылку на скачивание программы LIR-919 Demo с таким интерфейсом
Самая последняя версия программы ULP_Demo расположена на нашем сайте по указанной выше мною ссылке. Вы привели скриншот очень старой версии программы. Количество и состав вкладок в программе строится в соответствии с функционалом подключаемого устройства (основано на возможностях ulp протокола). Список и версию модулей и подмодулей можно увидеть на вкладке "Системный".
Ivan1970
Сообщения: 13
Зарегистрирован: 25 фев 2022, 04:13

Re: Не компилируется программа для ЛИР 919

Сообщение Ivan1970 »

Здравствуйте, Владимир.
Владимир Чухляев писал(а): 23 дек 2022, 10:08
В каких пределах их нужно задавать?
Пределы значений настроек указаны в описании протокола ULP.
Вы имеете в виду это:
Пользователю доступно четыре таймера. Делитель частоты работы задается для
каждого таймера независимо в настройках. Итоговая частота работы получается по
формуле

F = 1 / (2 * Tsys * DIV) , где Tsys – время системного цикла управления (в секундах),
DIV – делитель частоты для каждого таймера. Максимальная возможная частота – 500 Гц.

Таймеры имеют два режима работы:
импульсный – через заданный интервал времени таймер выдает импульс
длительностью от 1 мс,
меандр – через заданный интервал времени выходной логический уровень таймера
инвертируется.
?
Какие значения Tsys и DIV по умолчанию нужно задавать?
Владимир Чухляев писал(а): 23 дек 2022, 10:08 Это из-за того, что в вашем устройстве нет модуля виртуальных входов/выходов, который Вы пытаетесь настроить .
Тогда такой вопрос. Как установить в системе модуль виртуальных входов/выходов? Есть ли более подробное описание этого модуля и инструкция по его установке?
P. S. Нам на данный момент нужно попробовать запустить тестовую программу TimerSensor, чтобы определить, возможно ли нам будет освоить Ваше оборудование с целью дальнейшего заказа его у Вас в дальнейшем. У нас есть демо-версия вашей платы LIR 919, с которой мы пытаемся научиться работать. В случае неудачи мы будем вынуждены оформить возврат платы и возврат средств за нее.
Владимир Чухляев
СКБИС
СКБИС
Сообщения: 45
Зарегистрирован: 19 июл 2022, 09:35

Re: Не компилируется программа для ЛИР 919

Сообщение Владимир Чухляев »

Здравствуйте, Иван
Вы имеете в виду это:
Нет, вот это
settings.PNG
settings.PNG (70.51 КБ) 10676 просмотров
Какие значения Tsys и DIV по умолчанию нужно задавать?
Все зависит от того, какую частоту Вы хотите получить на выходе. Tsys задается в настройках системного модуля и по умолчанию равно 1 мс. DIV равный 0 выключает таймер.
Тогда такой вопрос. Как установить в системе модуль виртуальных входов/выходов?
Никак, устройство включает в себя неизменяемое количество поставляемых модулей.
Есть ли более подробное описание этого модуля
Более полного, чем есть в описании протокола ulp - нету.
У нас есть демо-версия вашей платы LIR 919
ЛИР-919П не является демо версией. Это полноценное устройство в планарном исполнении.

Но учитывая проявляемый вами интерес к нашему устройству, мы выслали вам на почту новую прошивку, включающую модули виртуальных входов/выходов и функциональных сигналов.
Ivan1970
Сообщения: 13
Зарегистрирован: 25 фев 2022, 04:13

Re: Не компилируется программа для ЛИР 919

Сообщение Ivan1970 »

Здравствуйте.
1.
Владимир Чухляев писал(а): 28 дек 2022, 14:32 Но учитывая проявляемый вами интерес к нашему устройству, мы выслали вам на почту новую прошивку, включающую модули виртуальных входов/выходов и функциональных сигналов.
Спасибо, устройство перепрошилось нормально, вкладка модуля виртуальных входов/выходов появилась в ULP_Demo. Теперь у нас проблема – в куске программы TimerSensor:
if (lastCommand.ndata_bytes && (lastCommand.data_ptr[0] == ACK))
{
cout << "Таймер настроен." << endl;
}
переменная lastCommand.data_ptr[0] равна 15 = ‘/xf’, из-за чего не выполняется этот кусок кода. В куске кода
// Запрос списка входных сигналов и определение порядкового номера сигнала записи в буфер
ulp_clear_last_command();
ulp_send_message(handle, module_func_remap_num, 0x17, NULL, 0);
ulp_exchange(handle, ATIME, false);
uint8_t commands_num ; // Количество сигналов
uint8_t write_buffer_command_num; // Порядковый номер сигнала записи в буфер

uint8_t buff_overflow_command_num; // Порядковый номер сигнала переполнения буфера
переменная lastCommand.ndata_bytes равна 0, из-за чего не выполняется кусок кода
if (lastCommand.ndata_bytes)
{
commands_num = lastCommand.ndata_bytes;
cout << "Модуль поддерживает " << (int)commands_num<<" входных сигналов."<< endl;
for (int i = 0; i < lastCommand.ndata_bytes; i++)
{
if (lastCommand.data_ptr == __ulp_m_func_remap::__IN_FUNCTION_ID::__LOG_WRITE)
{
write_buffer_command_num = i;
}
if (lastCommand.data_ptr == __ulp_m_func_remap::__OUT_FUNCTION_ID::__LOG_OVERFLOW)
{
buff_overflow_command_num = i;
}
}

cout << "Порядковый номер сигнала записи в буфер:" << (int)write_buffer_command_num<<endl;
cout << "Порядковый номер сигнала переполнения буфера:" << (int)buff_overflow_command_num << endl;
}

В чем может быть причина?

2. Подскажите, пожалуйста, какое время по умолчанию нужно задавать в строке ввода в программе TimerSensor:
"Введите время чтения значений из буфера в секундах:".
Владимир Чухляев
СКБИС
СКБИС
Сообщения: 45
Зарегистрирован: 19 июл 2022, 09:35

Re: Не компилируется программа для ЛИР 919

Сообщение Владимир Чухляев »

переменная lastCommand.data_ptr[0] равна 15 = ‘/xf’, из-за чего не выполняется этот кусок кода. В куске кода
Проверьте, что переменная virtual_io_module_num соответствует действительному порядковому номеру модуля виртуальных входов/выходов.
В чем может быть причина?
Аналогично с значением порядкового номера module_func_remap_num.
2. Подскажите, пожалуйста, какое время по умолчанию нужно задавать в строке ввода в программе TimerSensor:
"Введите время чтения значений из буфера в секундах:".
Это интервал времени, в течении которого приложение будет опрашивать буфер устройства и записывать показания в файл. То есть, если вы поставите 10 сек, то по истечении 10 секунд приложение завершиться.
Ivan1970
Сообщения: 13
Зарегистрирован: 25 фев 2022, 04:13

Re: Не компилируется программа для ЛИР 919

Сообщение Ivan1970 »

Здравствуйте. У нас следующий код выполняется так:
// Выбираем подмодуль инкрементных датчиков
uint8_t submodule = __ulp_m_sensor::__SUB_MODULE_TYPES::__INCREMENTAL;
ulp_clear_last_command();
ulp_send_message(handle, sensor_module_num, __ulp_module::__SHARED_CMD::__SET_MODULE_MODE, &submodule, sizeof(submodule));
ulp_exchange(handle, ATIME, false);
if (lastCommand.ndata_bytes && (lastCommand.data_ptr[0] == ACK))
cout << "Режим работы модуля: Инкрементный" << endl; // Здесь работает

ulp_clear_last_command();
ulp_send_message(handle, sensor_module_num, __ulp_sm_sensor_inc::__CMD::__CLEAR_POSITION, NULL, 0);
ulp_exchange(handle, ATIME, false);
if (lastCommand.ndata_bytes && (lastCommand.data_ptr[0] == ACK))
cout << "Координата обнулена" << endl; // Здесь работает

// Включаем модуль виртуальных входов/выходов
uint8_t virtual_io_module_num = 4; // Порядковый номер модуля виртуальных входов/выходов
ulp_clear_last_command();
uint8_t data = 0;
ulp_send_message(handle, virtual_io_module_num, __ulp_module::__SHARED_CMD::__SET_MODULE_STATE, &data, sizeof(data));
ulp_exchange(handle, ATIME, false);
if (lastCommand.ndata_bytes && (lastCommand.data_ptr[0] == ACK))
{
cout << "Модуль виртуальных входов/выходов включен." << endl; // Здесь работает, virtual_io_module_num == 4, lastCommand.ndata_bytes == 1
}

int freq;
cout << "Введите частоту таймера в Гц:";
cin >> freq;
uint32_t dfreq = 1000 / freq; // Определяем делитель частоты для записи в устройтсво
// Настраиваем таймер в режим меандра, период 10 мс
ulp_clear_last_command();
// Создаем структуру, содержащую 4 таймера, 8 виртуальных входов и 8 виртуальных выходов
__ulp_m_virtual_io::__SETTINGS_TYPEDEF<4, 8, 8> v_io_settings;
//Настраиваем 0-й таймер
v_io_settings.timers[0].pulse = false; // режим работы меандр
v_io_settings.timers[0].max_cntr = dfreq; // записываем делитель частоты
ulp_send_message(handle, virtual_io_module_num, __ulp_module::__SHARED_CMD::__SET_MODULE_SETTINGS, (uint8_t*)&v_io_settings, sizeof(__ulp_m_virtual_io::__SETTINGS_TYPEDEF<4, 8, 8>));
ulp_exchange(handle, ATIME, false);
if (lastCommand.ndata_bytes && (lastCommand.data_ptr[0] == ACK))
{
cout << "Таймер настроен." << endl; // Здесь не работает, virtual_io_module_num == 4, lastCommand.ndata_bytes == 1, lastCommand.data_ptr[0] == 0, при этом частоту задавали равной 500, 100, 10.
}
В окне результатов выдается следующее:
Создание и подключение:OK !
Тип модуля 1: Датчик
Модуль датчика включен !
Режим работы модуля: Инкрементный
Координата обнулена
Модуль виртуальных входов/выходов включен.
Введите частоту таймера в Гц:100
Введите время чтения значений из буфера в секундах:0.1
Напрашивается вывод, что мы неправильно задаем частоту или другие параметры, раз после ее задания дальнейшая часть программы не работает.
Ответить