Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
|
||||
|
|
LTR-41 ошибки данных в потоковом чтенииДобрый день, уважаемые! |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииЗдравствуйте. |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииГарманов Александр пишет:
Датчики разные, но все они управляют реле, а вот контакты реле уже коммутируют входа 41 модуля, с 5в. |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииЗавтра я попробую написать пример и проверить у себя работу данного режима. |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииЯ попробовал данный режим и честно говоря не нашел проблем с данными. Выложил сюда пример https://bitbucket.org/lcard/ltr_cross_s … m_recv.zip. В bin - собранная версия. Можно изменить в ltr41_slot.txt номер слота, куда вставлен интересующий модуль и запустить ltr41_stream_recv_start.bat. Программа будет выводить значения входов и меток при изменении какого-либо из этих значений (метки или входов). В src лежат исходники примера. Тогда попробуйте проверить на этой тестовой программе, как ведет себя модуль в Вашем случае... |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииА может быть какая-то аппаратная проблема? Сам модуль больной? Или крейт? Смотрю собираемые логи и в модулях ltr11 и ltr212 часто TimeMark метки чередуются с 0. Бывает даже долго границу прихода новой метки (новой секунды) трудно найти. |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииЗапустил пример. после нескольких информационных строк вышла одна строка блок,позиция,биты,старт и секунда. |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииAlexZ пишет:
Сообщите название крейта и его серийный номер. |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииАлексей L Card пишет:
Алексей, а пробовали брать этот поток и выводить в файл? Допустим как в нашем случае 10кгц и с временными метками (я так понимаю на каждый сэмпл идет метка. но она меяется при новой секунде и можно отлавливать лишь это измненение, а потом отсчитывать такты от этого изменения до нужного места в пределах секунды). У нас метки "бьются" чередуются с 0 причем и более секунды и часто затирая границыв прихода новой секунды (. Может модуль битый? Но заменить и проверить не чем ( ил крейт так может себя вести? ил всеж программно это? |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииГарманов Александр пишет:
21.07.15 18:13:06.937] (0) SERVER: Starting up LTR-Server v1.5.4.1 (L-CARD) Вот пока писал на форуме, оставил включнной тестовую программу. Добавились 4 строчки вывода(это примерно минут 10 после старта проги) c:\Spring\bin>set ltr41_slot=8 c:\Spring\bin>ltr41_stream_recv.exe 8 |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииAlexZ пишет:
Как описано тут, то это не может объясняться проблемами крейта (или модуля LTR41, если метки от него). Крейт высылает только слово метки раз в секунду и вставляет в поток. А массив tmark реально формируется при вызове LTRXXX_Recv() - из потока выкидываются найденные метки и увеличивается tmark для последующих отсчетов. Описанное поведение могу объяснить только какими-то проблемами в программе, если Вы обрабатываете часть массива tmark в который реально не были сохранены отсчеты. Я бы проверил везде ли Вы проверяете значение, которое возвращает LTRXXX_Recv() и обрабатываете только эту часть массива и связанные с этим действия. Корректность работы меток вообще можно проверить в статистике в LtrManager или LtrServer - если они увеличиваются при запуске секундных меток на 1 раз в секунду, то все реботает нормально и по-видимому ошибка при обработке массивов tmark при приеме |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииAlexZ пишет:
Данная программа сама не запускает секундные метки, а только запускает сбор и выводит данные при изменении. Так что если не запущены метки от другого источника, то вывод будет только при изменении входов (т.к. как я понял первичная проблема это некорректное значение входов). Соответственно если ничего не выводит значит на входах одни нули и ничего не меняется. В последнем выводе у Вас изначально были 1 на 1-м, 6-м и 8-м входах, это сохранялось довольно долго, а потом было одно изменение в 10-ой линии (на 1 измерение была 1, потом снова 0), а потом еще через некоторое время время на 6-ой линии стал 0 на одно измерение, а потом снова вернулась 1. |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииА метки Вы вообще от чего используете - от крейта или от этого же LTR41? Если последнее могу включить и метки в программу (сам я тестировал на метках от крейта, которые запускал отдельной). Правда мне кажется что логичнее сперва посмотреть, нормально ли работают входы и есть ли описываемый Вами изначально эффект при изменении значений на входах |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииИ да, если у Вас к 6-му входу и 10-му входу что-то реально подключено, то вопрос откуда были эти одиночные выбросы, вопрос скорее к подключению... |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииАлексей L Card пишет:
Алексей, все из-за того, что не совсем понятно было как эту программу использовать. Мы не думали, что ее можно запускать параллельно нашей программе. Мы её запускали при выключенном оборудовании. Увидели, что вместо ожидаемого потока значений очень долго висит одна строчка, вот и подумалось, что точно с оборудованием проблема |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииАлексей L Card пишет:
И еще уточнить по меткам. |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииAlexZ пишет:
Не совсем. Метки привязываются к словам в LTR-овском изначальном формате (одинаково для совершенно любого модуля) - к тем, которые возвращаются после Recv(). И их количество равно возвращенному Recv() значению. Соответственно, если у модуля 2 слова на семпл, то по сути каждому семплу соответствуют две метки, т.е. при сопоставлении меток и уже конечных семплов вам нужно брать значение из массива tmrak через одно. По поводу описываемого Вами способа, то если процесс склейки этих массивов сделан аккуратно без ошибок, то все должно быть номрально при таком подходе. Главное всегда смотреть, какое значение вернул Recv и использовать только заданное кол-во элементов (Recv принимает параметром и возвращает размеры в количестве сырых слов, а потом уже при передачи в LTR212_ProcessData() она обновит значение на кол-во семплов - в два раза меньше). Так же следует обратить внимание на то, что в ProcessData() допустимо передавать только размеры кратные кадру, что требует особого внимания, если Вы работаете по принципу запросить больше, чем может будет принято за таймаут, т.к. в таком случае Recv() может вернуть произвольное значение, не кратное кадру. Т.е. если например у Вас LTR212 с 4-мя разрешенными каналами, то в ProcessData() необходимо передавать блоки данных, кратных 8. Т.е. перед ProcessData() нужно сырые данные корректно склеивать (если Recv() например вернул 7, то нужно дождаться следующего Recv(), если он вернул например 15, то склеить их, получить 22 отсчета, передать в ProcessData() первые 16, а последние 6 оставить для склейки со следующими результатами Recv()). Кстати Вы результат ProcessData() всегда проверяете? Он у Вас всегда без ошибок выполняется? |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииАлексей L Card пишет:
Ясно. Было сомнение в этом и изначально предполагал, что так. Но потом переубедил себя. Хорошо, если я в том же 212 собираю не правильно метки, это Алексей L Card пишет:
Да про склейку и кратность кадров это следим. возвращаемые значения отслеживаем и информирую, сбрасываю в логи. результаты процессдаты тоже смотрю и сравниваю вход/выход. |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииAlexZ пишет:
если это разные программы, то нет. в одной программе, только если вы уже у себя используете какие-то общие ресурсы для разных модулей, в плане библиотеки для каждого модуля tmark заполняется независимо. |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииАлексей L Card пишет:
Ясно. Спасибо, успокоили. |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииПри нормальной работе ошибок ProcessData() быть не должно. Так что надо искать проблему. Сейчас LTR11_ProcessData при нахождении ошибки не откидывает все данные после ошибки, а выкидывает ошибочный кадр и дальше после нахождения нового продолжает обработку. Точную информацию где произошла ошибка она не дает и вообще говоря при ошибке ProcessData() уже однозначно сопоставить семплы с метками становится проблематично. Да, и получается что у Вас 2-3% кадров в потоке ошибки... В общем скорее всего это проблема склейки все же.... На всякий случай еще можно проверить, что макс. скорость крейта не превышается (5 млн. слов в сек по USB и около 2-х млн по Ethernet). |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииАлексей L Card пишет:
Да я особо и не утверждаю, что у меня идеально и проблемы железа. ;-) И хочу найти причину. Но, допускаем не правильную склейку: Получив новую порцию данных (около 5000-7000 слов) мы в самом начале неправильно приклеили огрызок от предыдущего неполного кадра предыдущей порции. И что тогда имеем? Если функция не умеет находить начало кадра, то должна вся порция данных быть потеряна, т.е. все 100% |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииНу во первый функция умеет находить начало кадра, поэтому да, если бы проблема была в одном разрыве, то выкинут был бы только один кадр. Ну а что у Вас может быть в коде мне сложно сказать) |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииВ принципе для отладки первое место ошибки можно получить идя по массиву с шагом в размер кадра и вызывая ProcessData() только на этот кадр и когда первый раз ProcessData() вернет ошибку, то значит в этом кадре и есть первая ошибка и можно посмотреть что это за место (является ли это местом склейки) и вывести, что там за данные, может что из этого Вам тогда будет понятно.... |
|||
|
||||
|
|
Re: LTR-41 ошибки данных в потоковом чтенииАлексей L Card пишет:
Значит склейка не может быть причиной этих проблем!
Да, именно так- много нулевых меток и во всех потоках (лтр11,лтр212, лтр41) |
|||
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4
Многоканальный телефон:+7 (495) 785-95-25
Письма и запросы: lcard@lcard.ru
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск