Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года

Форум

Вы не вошли.

 Поиск | Регистрация | Вход 

#1 Re: Техническая поддержка » Межмодульная синхронизация L502 » 08.05.2024 15:53:18

Алексей, Благодарю за ответ!
Теперь стало понятно. Попробую на днях переделать настройку с учетом 1.5 МГц, правда, как Вы и сказали, ощутимой разницы в получаемых данных может и не быть (видимо отклонения по частотам крайне малы).
В принципе, т.к. частота сбора с плат у меня сейчас 4029 в сек, а макс частота внешнего сигнала (по которому забираются данные с потоков сбора) не более 1500, то как мне кажется, явно видимого "рассинхрона" скорей всего не будет. Но все равно есть желание сделать "по правильному", с синхронизацией.

#2 Re: Техническая поддержка » Межмодульная синхронизация L502 » 08.05.2024 12:40:50

Переходить нужно на обоих платах на 1.5 МГц или только перенастроить на ведущей? Само собой читал про это в документации, но когда запустил, то все заработало, поэтому опорные частоты оставил дефолтные (видимо как раз 2 МГц). Возможно в этом и есть моя ошибка (если так - то Вы наверное меня и поправите).
Нулевые значения появляются на ведомой плате и на всех каналах (32). Сбор идет постоянно, без задержек. В программе под каждую плату работает отдельно свой поток (никаких задержек во время считывания (sleep и прочее) нет).
При старте сначала все работает как надо, затем через 3-5 мин (но может и значительно больше), с ведомой платы не идут данные. Помогает только перезапуск всей программы (при старте однократно выполняется настройка плат, затем полученные дескрипторы передаются в потоки, дальше в X502_Recv).
Опять же повторюсь - почти месяц все работало хорошо, проблемы начались пару дней назад.
Режим работы программы - два раза в день по 8-10 часов непрерывный сбор, в остальное время остановка через X502_StreamsStop. При остановленном сборе мои потоки крутятся в холостую со Sleep - ом в 15 мс. По команде из интерфейса вызывается X502_StreamsStart и в работу.

#3 Техническая поддержка » Межмодульная синхронизация L502 » 06.05.2024 16:43:02

moto31121
Ответов: 4

Добрый день
Имеются две платы L502, соединенные кабелем межмодульной синхронизации. При запуске программы настраиваю режим генерации частоты синхронизации через X502_SetSyncMode (одна плата ведущая (X502_SYNC_INTERNAL), вторая ведомая(X502_SYNC_EXTERNAL_MASTER)). Около месяца все работало без нареканий, но пару дней назад начались странности: на одной из плат периодически нет сигнала (значения с аналоговых входов по нулям). При переводе обоих плат на режим X502_SYNC_INTERNAL проблема ушла. Т.к. частота считывания данных достаточно высокая (4000 в сек), то разницы с/без синхронизации не увидел, но, наверное, правильней бы было все таки с ней.
Проблема возникала непостоянно: может через пару мин после старта программы, а может и через день.
Подскажите, с чем может быть связана такая ситуация?

#4 Re: Техническая поддержка » Вопрос по L502 » 09.09.2023 04:19:20

Реализовал синхронный сбор данных с каждой платы отдельным потоком. Настроил шаг прерывания равный кол-ву считываемых отсчетов - импульсы с цифровых данных теперь всегда соответствуют исходному (импульсы выдает промышленный контроллер). Но появилась другая проблема: периодически появляется ошибка -11 (X502_ERR_STREAM_OVERFLOW). При чем ошибка может появится как через 5-10 мин после запуска, так и через несколько часов. Пока что сделал перезапуск потоков сбора при ее появлении. В потоках программы, которые вызывают X502_Recv() / X502_ProcessData() никаких остановок нет (Sleep и прочие функции). Нагрузка на ПК минимальна (программа сбора забирает 1-2% ЦП, ничего остальное не включено, ОС Windows, ЦП i5).

#5 Re: Техническая поддержка » Вопрос по L502 » 02.09.2023 06:41:38

А какое значение шага прерывания стоит изначально с завода? Если я буду менять через X502_SetStreamStep(), то потом чтоб при проблемах вернуть назад

#6 Re: Техническая поддержка » Вопрос по L502 » 01.09.2023 16:49:03

Дополню свой вопрос - может по факту цифровые входа и правильно считываются, но я не совсем правильно их принимаю в своей программе. Если мне при синхронном вводе с плат нужно получить текущее значение цифровых входов, то мне необходимо брать последнее слово из массива, который передается для заполнения в X502_ProcessData? И если так, то и с аналоговыми данными так же (и если одна из плат считывает еще и цифровые входа, то как мне получить все последние данные с 32 каналов (у второй платы просто считываю с начала массива и все корректно, как в примере))? Ради эксперимента сделал следующий пример - два потока постоянно выкачиваю через X502_Recv / X502_ProcessData данные в свои буферы (частоты и значение READ_BLOCK_SIZE подобрал так, чтоб стабильно было в районе 3000 считываний в секунду). Третий поток по сигналу с цифрового входа (с одной из плат) собирает данные в общий буфер (т.е. есть жесткая привязка данных с двух плат на входной цифровой сигнал). При такой работе мое значение кол-ва импульсов цифрового входа как раз и скачет, при том что на вход подается ровно 1000. И ладно бы, если входное кол-во всегда постоянно, но в моей текущей задаче оно может меняться от 50 до 2000 в секунду, и нельзя их пропустить

#7 Re: Техническая поддержка » Вопрос по L502 » 01.09.2023 07:47:04

Добрый день. На синхронном режиме почему то начинают не всегда корректно считываться импульсы цифровых входов (кол-во плавает: на вход подается 1000, в программе у себя считываю от 950 до 1020), поэтому пришлось вернуть работу на асинхронный режим (с ним проблем нет).
Так же вопрос - почему периодические при подключенных платах комп начинает грузить процесс "Системные прерывания"? При этом нагрузка от этого процесса на проц приличная (до 10%). Если платы снять - все проходит. Когда первый раз такое заметил - убрал кабель межмодульной синхронизации и проблема ушла. Через неделю появились снова те же симптомы. Пока что решается перезагрузкой ПК несколько раз.

#8 Техническая поддержка » Вопрос по L502 » 10.08.2023 17:09:48

moto31121
Ответов: 6

Добрый день.
Есть текущая задача для которой необходимо получать как можно с меньшим интервалом цифровые + аналоговые данные. Для этой цели были закуплены две платы L502 + кабель для цифровых входов. Время между чтением данных порядка 1 мс и меньше.
В текущих реалиях сделал вариант через X502_AsyncInDig / X502_AsyncGetAdcFrame. Настройки плат: частота сбора с АЦП 2 МГц, частота ввода с цифровых входов 2 МГц, кол-во логических каналов - 32, режим - измерения напряжения относительно общей земли.
Периодически выпадают ошибки X502_ERR_RECV_INSUFFICIENT_WORDS (Принято недостаточно слов от модуля).
Функции постоянно дергаются фоновым потоком, в котором нет остановок (sleep и прочее), но при этом могут быть задержки (1-5 мс) для обработки принятых данных (когда поступают определенные события с цифрового входа).
Собственно, вопрос - может быть есть какой-то другой вариант наладить прием данных в реальном времени, без чтения буфера с таймаутом и прочего?
Сейчас в X502_AsyncGetAdcFrame стоит таймаут в 2 мс.

Пробовал через X502_Recv (с меньшей частотой сбора ), но  при любой задержке в потоке (1 мс и более, когда нужно обработать принятые данные) функции сразу выпадают в ошибку X502_ERR_PROC_INVALID_CH_NUM (Неверный номер канала в обрабатываемом потоке синхронного ввода).
События для обработки принятых данных могут происходить с разными интервалами. Копить данные, пока идет обработка не нужно, т.к. вся необходимая информация перекладывается в буферы в программе. Т.е. нужные данные накопили, по сигналу с цифрового входа обработали их и снова вернулись к мониторингу текущей информации в реальном времени.

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск