Вопрос, касающийся быстродействия RT процессора в myRIO 1900

Радиотехника, платы, схемы, оборудование, фото- видео- приборы, компьютеры
Ответить
Аватара пользователя
donetskant
beginner
beginner
Сообщения: 17
Зарегистрирован: 04 дек 2014, 23:12
Версия LabVIEW: 2019
Благодарил (а): 1 раз
Контактная информация:

Вопрос, касающийся быстродействия RT процессора в myRIO 1900

Сообщение donetskant »

Здравствуйте. У меня вопрос, касающийся быстродействия RT процессора в myRIO 1900. Мне необходимо просто снимать аналоговый сигнал с частотой 10кГц и получать его через USB. По причинам, от меня не зависящим, было решено не использовать FPGA, якобы «обработки нет, скорость небольшая, уж конечно real-time процессор с частотой аж в 667 МГц справится!».
Для работы я взял простейший пример, который просто считывал в цикле значение, докидывал его в заранее инициализированный массив, и по достижении конца массива отправлял его в очередь, из которой в другом цикле (не RT) отправлял его на глобальную переменную.
Как обычно, создаю проект для приема через USB, запускаю RT-программу, запускаю PC-программу.
И что в итоге получилось? А получилось, что на этапе скидывания массива в очередь, rt цикл сильно проседает по времени, вместо 200мкс – 600 и более (смотрю переменную 1 circle time). В результате теряется часть входного сигнала, а это критично.
Варианты:
1. Возможно, на самом деле rt-программа эмулируется на компе, а не кидается в RT процессор. Но я своими глазами вижу, как она deploy-ится.
2. Поскольку я не делаю disconnect устройства, а вижу содержимое его элементов управления, то на постоянный обмен с компом тратятся ресурсы. Но отмечу, что когда я работаю c compactRIO (используя FPGA и общаясь по ethernet), то я вижу быстродействие в наносекундах, причем обмениваясь информацией с компом через Ethernet, устройство вполне нормально показывает мне информацию, не затормаживая работу процесса. Так может дело в протоколе обмена? Usb sucks, Ethernet rules?
3. Я раньше не работал с myRIO 1900. Может есть особенности в создании проекта, не такие как в compactRIO?
4. Может RT процессор только и годен, что на передачу сигнала от fpga к usb (ethernet) и не способен в каждом такте цикла обращаться к аналоговому входу (да, я знаю что входы идут напрямую в fpga)?
Вложения
myRIO1900.jpg
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Вопрос, касающийся быстродействия RT процессора в myRIO

Сообщение Artem.spb »

Первое, что непонятно, зачем массив кидать в очередь а из очереди кидать в глобальную? У вас нет никакого контроля, что из глобальной уже прочитано, так что она спокойно перепишется с потерей данных. С таким же успехом можно в неё сразу писать в основном цикле.

USB потенциально шустрее сети, так что должно работать, даже 2.0 потенциально быстрее 100-мегабитной сетки.

А что мешает использовать FPGA? Даже если кто-то решил иначе. Не выпаяли же они плату?

Как вариант (на crio работает, с майрио не знаю), вызывать функцию чтения не на RT, а на самом компе. Опять же в этом варианте можно отправить в FPGA порграмму, которая будет только читать данные и кидать их в FIFO.

Ещё я бы попробовал вместо очереди+глобальная использовать FIFO, если она способна по сети работать.

Прорисовка данных точно жрёт ресурсы, как минимум для эксперимента стоит это дело скрыть. Фактически в примере идёт двойной трафик: отправить данные на чарт, и столько же данных через очередь переслать в глобальную.
Аватара пользователя
donetskant
beginner
beginner
Сообщения: 17
Зарегистрирован: 04 дек 2014, 23:12
Версия LabVIEW: 2019
Благодарил (а): 1 раз
Контактная информация:

Re: Вопрос, касающийся быстродействия RT процессора в myRIO

Сообщение donetskant »

зачем массив кидать в очередь а из очереди кидать в глобальную?
Согласен, но так было в классическом NI примере, поставляющемся с myRIO. и, кстати, так, как выпредлагаете, ТОЖЕ пробовали.
У вас нет никакого контроля, что из глобальной уже прочитано, так что она спокойно перепишется с потерей данных
согласен, но это проверено, потери нет. хватает привязки ко времени в 500мс на принимающем и передающем циклах - и на rt и на компе.
Прорисовка данных точно жрёт ресурсы, как минимум для эксперимента стоит это дело скрыть.
И так ТОЖЕ пробовали. Ответ один - проседает время в момент передачи информации и теряется чуть-чуть данных, снимающихся с ничтожной частотой 10кГц.

Спасибо за ответ, но честно говоря, я так ожидал услышать что-то типа: А вы в проекте в настройках deploy на воон-ту галочку не нажимали? А то в вашем случае у вас RT работает через "одно место". Или "нет, сбор данных ТОЛЬКО через fpga".
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Вопрос, касающийся быстродействия RT процессора в myRIO

Сообщение Borjomy_1 »

У вас в цикле две операции - операция чтения из АЦП и операция записи в очередь. Поставьте Flat Secuence со следующими фреймами: Get TickCount, Read From ADC, Get TickCount, Write to Queue, Get Tick Count. И смотрите, какая из операций занимает больше времени.
Вам следует также учесть, что в отличие от Desktop Labview, RealTime Labview КАТАСТРОФИЧЕСКИ медленно работает с любыми массивами, это связано в первую очередь с выделением памяти под них. Операция записи в буфер(очередь) числа в цикле производится значительно быстрее, чем формирование массива и закидывание его в буфер одним разом. Тоже самое относится к любым операциям с массивами.
В вашем случае считываете число из АЦП и без всякой промежуточной буферизации скидываете его в очередь (очередь под вещественные типы данных работает, в отличие от операций с массивами, достаточно оптимально). У вас очень много лишнего.
Аватара пользователя
donetskant
beginner
beginner
Сообщения: 17
Зарегистрирован: 04 дек 2014, 23:12
Версия LabVIEW: 2019
Благодарил (а): 1 раз
Контактная информация:

Re: Вопрос, касающийся быстродействия RT процессора в myRIO

Сообщение donetskant »

Поставьте Flat Secuence со следующими фреймами: Get TickCount, Read From ADC, Get TickCount, Write to Queue, Get Tick Count. И смотрите, какая из операций занимает больше времени.
Очень хороший совет, спасибо. Интересно будет посмотреть.
это связано в первую очередь с выделением памяти под них.
поэтому я и заранее его инициализирую.
Операция записи в буфер(очередь) числа в цикле производится значительно быстрее, чем формирование массива и закидывание его в буфер одним разом. Тоже самое относится к любым операциям с массивами.
Спасибо. Попробую обязательно.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Вопрос, касающийся быстродействия RT процессора в myRIO

Сообщение Borjomy_1 »

поэтому я и заранее его инициализирую.
не факт, что поможет. При выполнении записи в очередь создается копия массива.
Аватара пользователя
donetskant
beginner
beginner
Сообщения: 17
Зарегистрирован: 04 дек 2014, 23:12
Версия LabVIEW: 2019
Благодарил (а): 1 раз
Контактная информация:

Re: Вопрос, касающийся быстродействия RT процессора в myRIO

Сообщение donetskant »

Я вернусь к заголовку темы.На картинке простейший код, частота работы RTцикла10кГц.

Вот код просто чтения входных данных и чарт времени работы его цикла
потом просто чистый код, в котором всего-лишь измерение работы цикла, и его чарт.
последний чарт - это время работы того цикла, который в первом сообщении.
видно, что работа с массивом, посылка в fifo - это все "до лампочки".
главный тормоз из-за чтения входных данных.
Я правильно понимаю?
Вложения
потом код  просто чтения входных данных
потом код просто чтения входных данных
и чарт времени работы его цикла
и чарт времени работы его цикла
потом просто чистый код, в котором всего-лишь измерение работы цикла
потом просто чистый код, в котором всего-лишь измерение работы цикла
и его чарт.
и его чарт.
последний чарт - это время работы того цикла, который в первом сообщении.
последний чарт - это время работы того цикла, который в первом сообщении.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Вопрос, касающийся быстродействия RT процессора в myRIO

Сообщение Borjomy_1 »

В этом цикле функция ожидает прихода значениия из АЦП? Или вычитывает текущее значение? Таймаут у этой функции есть?
Если есть, то нет никакого смысла, по здравому размышлению, создавать жестко заданный временной цикл. Все равно его синхронизирует чтение из АЦП. Внешняя временная синхронизация будет только мешать - таймеры АЦП и цикла конкурируют друг с другом.
И почему на выходе функции массив, если используется только один элемент?
Аватара пользователя
donetskant
beginner
beginner
Сообщения: 17
Зарегистрирован: 04 дек 2014, 23:12
Версия LabVIEW: 2019
Благодарил (а): 1 раз
Контактная информация:

Re: Вопрос, касающийся быстродействия RT процессора в myRIO

Сообщение donetskant »

В этом цикле функция ожидает прихода значениия из АЦП? Или вычитывает текущее значение? Таймаут у этой функции есть?
Таймаута нет в редакции этой функции. Судя по графику - вычитывает, иначе в графике бы не было задержек менее 200.
Если есть, то нет никакого смысла, по здравому размышлению, создавать жестко заданный временной цикл. Все равно его синхронизирует чтение из АЦП.
Совершенно верно. Вот только судя по графику, эта синхронизация "хромает" :D.
И почему на выходе функции массив, если используется только один элемент?
Там функция забирает данные сразу с нескольких аналоговых каналов, а значит, выводит в виде массива. Каждый раз берем один канал.

В любом случае, огромное спасибо за советы, работа закончена. Тему, в существующем названии, можно считать закрытой.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Железо»