Мы пытаемся собрать и запустить 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 не получилось установить драйвера ЛИР. Это не может повлиять на работоспособность программы?)