Меню

+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаЯ дополнил своё сообщение выше. Теория и практика показывает, что Ethernet будет иметь минимальную задержку при идеальных условиях физической среды: связь должна быть не через общую сеть, а от сетевой карты напрямую к LTR (от точки к точке), качественным кабелем. Но гарантий максимальных задержек TCP/IP Вам никто не даст - только опытным путём, в вероятностном смысле, при данных физических условиях, в данном комплекте реализации сетевого оборудования, в данной реализации программных стеков TCP/IP с обеих сторон.
- Поскольку речь шла о LTR-модуле, то надеюсь, что Вы поняли, что ориентировочно 1 мс занимает время передачи сырого отсчета LTR27 в интерфейс между LTR-модулем и LTR-крейтом, т.е. ещё до постановки в очередь на передачу в Ethernet. Замечу, что физический уровень Ethernet имеет достаточно малый разброс задержек, а вышеупомянутые задержки вносят транспортный и интернет уровни протоколов. Но поверх Ethernet даже в купленном оборудовании LTR-EU можно в Blackfin реализовать и протокол с гарантированном временем доставки, например, поверх UDP (только я сомневаюсь, что это будет проще, чем просто перейти на USB под QNX). |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаCпасибо за поддержку и разъяснения. Вы правы в том, что потребуются эксперименты и что отдельным кабелем через выделенный интерфейс лучше, чем через общий коммутатор. Работа с LTR-крейтом через USB в QNX - тоже интересная тема, наверное нужно выделить ее в отдельное обсуждение? В каком разделе: "Техническая поддержка" или "Подбор оборудования"? |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейта"Не к ночи упомянутый" коммутатор ведь и в составе материнских плат встречается... - это к вопросу о сетевом оборудовании. |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаВообще обычно задачи, с real-time ставятся примерно так: "при таком-то событие (изменении сигнала на входе АЦП ) нужно выполнить такое-то действие с задержкой не менее такой-то от самого события". Если у Вас модуль уже работает с частотой 50 Гц (т.е. усредняет за 20 мс!) не очень понятно зачем требование к времени передачи в 1 мс. И Ваш метод с засечкой времени за n-ое кол-во операций скорее больше оценивает равномерность этой задержки, чем саму задержку (все же это несколько разные вещи и вопрос что именно нужно). А так, если оборудование у Вас все равно уже есть, то нужно проводить испытания исходя из конечной задачи и требований и исходить из полученных результатов. С 16-местным скорее всего разницы быть не должно, если только не попадете на влияние на эту задержку алгоритмов управления потоком в TCP-стеке, но предсказать это несколько сложно... |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаLTR27 - это модуль, предназначенный для измерения статических физических величин (температура, давление, напряжение постоянного тока, величина постоянного тока и т.п...). Основной режим работы - с частотой сбора данных 5 Гц! Именно на 5 Гц этот модуль поверяется как Средство Измерения. Это означает, что LTR27 целесообразно использовать в контурах управления с временем реакции порядка 1 с и более. - Это всё к вопросу противоречивости постановки рассматриваемой задачи... |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаСпасибо за поддержку. Пожалуйста подскажите: какой другой LTR-модуль Вы рекомендуете для измерения сигнала с датчика давления 4-20мА с частотой опроса 50Гц? |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейта
LTR11 или LTR114 с резистором-шунтом 100 Ом, запаянным на кабельной части разъёма модуля. LTR114 дороже, но достижимая точность измерений и разрешение будет больше, чем в случае LTR11. |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаCпасибо за поддержку. Все параметры смогу привести, если удасться прийти к согласию и |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаТакие задачи решают в обратной последовательности: чтобы прийти к новому решению, нужно новое решение хотя бы рассмотреть. А чтобы рассмотреть, нужны ответы на вопросы выше. Например, если датчиков несколько и их цепи измерения заземлены на разные (далёкие) точки заземления, то предложенное решение (с одним LTR11 или с одним LTR114), возможно, не годится - потребуются другие уточнения. |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаПоскольку Вы упомянули о том, что будете мигрировать на LTR-EU-16, то ответы на вышезаданные вопросы сразу формулируйте для LTR-EU-16 с описанием физической задачи измерения и описанием характера входящей аппаратуры в Вашу установку, от чего будут питаться эти устройства, как заземляться. Эти вопросы относятся к электросовместимости устройств . Общие вопросы электросовместимости рассмотрены в статье: |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаМы пришли к варианту дополнительного заказа LTR11. Ответы на Ваши вопросы от нашего специалиста-электронщика: 1. Тип датчика и источника питания с ссылками на документацию? Датчик давления ADZ-SML-10.0 2. Требуемое максимальное количество каналов измерения? Три 3. Максимальная длина кабеля от датчиков до LTR? Требует измерения по планировке. Не более 50-ти метров. Если требуется более точное значение - уточним. 4. Цепи датчика и источника питания изолированные? Если нет, то какая цепь с чем контактирует? К датчику могут быть подключены цепь +24 В или цепь 0 В источника питания в зависимости от схемы подключения к модулю АЦП, соответственно вторая цепь источника питания подключается через нагрузочное сопротивление для организации токовой петли. 5. Какие параметры точности хотите достичь, в каком температурном диапазоне LTR-EU? ±1.0 % от ВПНЗ LTR-EU будет размещен в кабине наблюдения с перепадами температур 10-30 градС максимум. Буду признателен за рекомендуемую схему подключения. |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаПридётся уточнить задачу. По поводу источника питания |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаИзвините, я понял что плохо описал временнЫе проблемы приема данных из LTR, позвольте это сделать снова: У нас производятся испытания авиадвигателей. Измеряемые параметры разделяются на параметры установившихся режимов ( примерно 300 параметров, частота опроса обычно 10Гц ) и параметры Мне нужно с данной частотой получать из LTR-сервера результаты преобразований, отправлять их в свой программный В действующих у нас сегодня системах на каждую плату универсального AЦП напущена своя программа, которая по таймеру ОС реального времени При применении LTR-крейта вместо прямого управления АЦП я могу только вычитывать готовые данные из ltr-сервера ( программы ltrd ). Для этого для каждой платы в LTR-крейте я запускаю прикладную программу, в которой с той же частотой, на которую запрограммирована Мне важно, чтобы ltrd-сервер мне отдавал результат преобразования именно с этой частотой, а не порциями по несколько преобразований в порции. Данная проблема сейчас наиболее актуальна, если не удастся получать данные преобразований К сож. пока мне не удается найти ответ на этот вопрос. |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаЛеонид, из LTR-cервера можно считать данные всех модулей и, например, секундные метки, вставленные в этот поток. Эта информация даёт возможность программно восстановить относительное положение по времени всех отсчётов данных LTR c точностью до 1-го периода преобразования самого скоростного LTR-модуля, участвующего в этом процессе сбора данных. Но после такого программного восстановления Вы будете иметь задержанный поток данных, (относительно их физического рождения на входах АЦП) на некое (не нулевое!) время буферизации в системе, с нужной Вам частотой следования (50 Гц), привязанной к частоте LTR (но не к частоте 50 Гц по системным часам Вашего компьютера!) . Задачу выравнивания (по времени физического рождения) отсчётов данных от разных источников (не только от LTR), решают с помощью системы единого времени (СЕВ) (на которую я ссылался выше), или с помощью внешнего блока синхронизации, заменяющего СЕВ, раздающего всем устройствам в системе сигналы синхронизации. Можете, например, взять секундный синхросигнал с выхода LTR (порождённый от секундной метки LTR) и его использовать для синхронизации всего остального... |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаЕстественно, максимальное время буферизации LTR нужно задать с запасом, экспериментально, поскольку, как мы уже выяснили ваше, "точных гарантий никто не даст". |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаНу в том, что Вы описываете больше идет речь о равномерности приема данных. И насколько я понимаю, полученные на 2-х местном крейте результаты Вас устраивают (?). В случае если в вашей системе (у Вас я так понимаю как бы система под ключ, полностью поставляется Вами?) известно, что интерфейс не может быть загружен чем-либо другим, и потери пакетов в рабочих условиях не возникают и такая ситуация считается нарушением работы системы (ну или есть предел на кол-во потерь), то наверно можно положиться на измеренные Вами значения времен с некоторым запасом... Не очень понятно как работает это "универсальное АЦП" , Вы получается считываете по таймеру, а не по факту завершения преобразования самим АЦП? И если задача стоит в привязке отчетов разных АЦП (времен на входе АЦП, которому соответствуют эти отсчеты, а не времен получения их в ПК), то это уже другой вопрос и нужно знать какие тут Вам нужны точности... |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаВы правы, Алексей! Моя задача - обеспечить равномерный и максимально быстрый прием преобразований от LTR-модулей по мере их "рождения". Подмешивать секундную метку и постфактум привызывать отсчеты ко времени - это не мой случай. Идея другая: данные нужно поставить в прикладной сервер данных, который затем разбирают другие прикладные программы. Прикладные программы не знают: каким образом порождены данные, от LTR-крейта, других устройств или от датчиков с цифровым выходом. Прикладные программы считают, что данные в сервере данных "свежие" и порождены в момент обращения за ними или пренебрежимо малое время назад. Возможную погрешность запаздывания от "порожденя" данных я бы оценил в 1...5 мсек. Тестирую прием одновременно от 2-х LTR-27 c частотой преобразования 1000Гц в 2-х ОС : QNX4 и QNX6. В QNX4 результаты удовлетворительные. Разброс в последовательном получении данных преобразований не превышает 1-1.5 мс. В QNX6 результаты не удовлетворительные. По вызову LTR27_Recv() в непрерывном цикле подряд приходит много пакетов с 0-й задержкой между ними, потом значительная пауза, и потом опять много пакетов подряд. Собираю ltrd из одних и тех же исходников ( апрель 2014) . Могут ли к-то параметры config.h влиять на подобное поведение ltrd или причины в разных реализациях стека TCP/IP? На какие параметры настройки стека Вы посоветуете обратить внимание? Внутри LTR-крейта используется TCP/IP стек версии 4 или 6? P.S. В действующей системе по таймеру ОС реального времени я стартую работу по обслуживанию АЦП ( через каждые 20 мсек). На каждом цикле программа уже знает : какие каналы и сколько раз нужно опросить, как отбросить первое преобразование и осреднить полученные коды АЦП. Т.о. запускается серия преобразований АЦП, с использованием аппаратного прерывания по завершению преобразования АЦП. Таймер ОС реального времени обеспечивает запуск каждого цикла обслуживания АЦП с точностью до 0.5мсек. |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаС большой вероятностью можно сказать, что разница в самом стеке TCP/ОС в этих ОС, а не в ltrd. Можно попробовать либо отключить delayed ack в QNX6 (тут есть например обсуждение http://community.qnx.com/sf/discussion/ … _pagenum=1, правда там с какой-то версии только есть возможность). |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаЧтобы не отвлекаться от "Задержек" вопрос о правилах подключения датчиков давления к LTR11 перенес в форум " Подбор оборудования " |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаЛеонид, проверьте, что физическое соединение по Ethernet возникает - 100 Mb/s - full duplex. Если, например, по какой-то причине устанавливается half-duplex, то это может быть причиной дополнительной неравномерности и дополнительных задержек. |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаСпасибо Алексею за указание правильного направления. После команды в QNX6 cитуация выправилась и стала сопоставима с результатами в QNX4: при приеме пакетов преобразований от двух плат с частотой преобразования 1000Гц каждая неравномерность прихода пакетов не превышает 3мс. Такой результат приемлемый. Просьба пояснить: каким образом работает ltrd в Linux с USB-портом ( если переключить LTR-крейт на работу по USB)? Сейчас при сборке ltrd я исключаю из плана сборки файлы ltrsrv_usb_lcomp.c, ltrsrv_usb_libusb.c, ltrsrv_usb.c, но проблем при сборке не возникает. |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаДля работы с USB под linux используется библиотека libusb-1.0 (http://www.libusb.org/) В ltrsrv_usb.c содержится общий код для работы, который используется и в windows, и в linux. ltrsrv_usb_libusb - реализация через libusb под linux, ltrsrv_usb_lcomp - реализация через драйвер lcomp под Windows. Если совсем кратко, то сначала вызывается ltrsrv_usb_init() для соответствующей реализации, в ней запускается в частности проверка наличия новых устройств. При их нахождении вызывается общая функция p_usb_add_new_dev в которую в частности передается структура t_usb_port_intf с указателями на функции, специфичные для данной реализации. В начале инициализация крейта идет через управляющие запросы по control-pipe, а затем работа с модулями идет через конечную точку типа bulk. Что касается QNX, то для него насколько я знаю нет порта libusb, соответственно нужно делать свою специфичную реализацию, что конечно может быть не так просто. В linux-версии также используется факт, что в linux все представляется в виде файлов для которых можно использовать в частности общий системный вызов select (чтобы не создавать отдельно потоки). В QNX вроде тоже все представляется в виде файлов, но про USB-устройства я не в курсе, можно ли получить дескрипторы файлов этих устройств. Ну и априори очень сложно сказать даст ли (и если даст, то какой) выигрыш использование USB в Вашем вопросе. В самом крейте к слову насколько я знаю, программа blackfin опрашивает раз в n-мс, сколько данных пришло из модулей и передает их либо по TCP, либо по USB. Возможно уменьшение этого времени может дать уменьшение задержки, но я сам с исходными кодами самой штатной прошивки не работал. |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаСпасибо за разъяснения. Ранее в этой теме звучало:
Кажется Александр Е знает через сколько n-мс программа blackfin передает данные по TCP. Мне кажется что n не более 1 мс. |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаПопытался что-то понять по исходным кодам прошивки из доступного на сайте L-Card архива ltr_source_1_0_0_1.zip 4 065 566 28.12.10 Исходные тексты для Blackfin крейт-контроллера. Вроде на blackfin работает FreeRtos, и в нем - нить ethernet_datarecv_task(), которая занимается чтением команд и отправкой данных из/в ethernet-порт в непрерывном цикле без явных задержек, но с заложенным временем ожидания готовности порта на чтение или запись в 2 миллисекунды в select()-вызове. Т.е. задержек более 2 мс быть не должно? Остается только надеяться на FreeRtos: как быстро будет передаваться управление на данную нить, если назначен приоритет 8. правильно ли я понял, что данные передаются в Ethernet-порт сразу, без накапливания буфера данных для каждого LTR-модуля? Где можно посмотреть "рабочий" файл datahook.c, прошитый в LTR-крейт? В приведенном в архиве datahook.c ожидается MAX_DATA_SIZE накопление данных в буферы LTR-слотов, которое имеет большую величину Это не понятно. |
|||
|
||||
|
Re: Задержки при чтении данных из LTR-крейтаОбщая логика потока ethernet_datarecv_task следующая. Как следует из вышенаписанного передача данных в TCP происходит сразу при их обнаружении. Разбор по модулям внутри крейта не производится - это делается в ltrd или ltrserver. |