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

Доступ к одному E502 нескольким процессам.

Вы не вошли.

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

15.01.2020 15:52:07
#1

Участник
Откуда: Мурманск
Здесь с 24.11.2018
Сообщений: 59

Доступ к одному E502 нескольким процессам.

Добрый день!

Сейчас нет под рукой Е502, поэтому экспериментально не могу ответить на возникший вопрос. Но нужно уже сейчас принимать решение об архитектуре проекта.
Нужно нескольким процессам работать с одним Е502. Один процесс будет получать данные от АЦП, другой отдавать на ЦАП. Возможно процессы будут разнесены на разные ПК. Возможно будет задействован и цифровой ввод/вывод в еще одном процессе. Доступ к Е502 по сети.
Возможна ли такая схема работы?
Ответа в документации не нашел.

16.01.2020 01:13:54
#2

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,292

Re: Доступ к одному E502 нескольким процессам.

Добрый день.

Нет, к сожалению, управление всем вводом-выводом модуля может выполняться одновременно только по одному соединению из одного процесса (программы). Такое разнесение возможно только если делать отдельно процесс управления модулем, который единственный работает с модулем напрямую, при этом предоставляющий какой-то интерфейс для других программ для управления ввода-выводом. Соответственно, все остальные программы будут обращаться к этому процессу.

В качестве примера такой организации работы может служить OPC-сервер (правда в нашем E-502  только в планах включения), который напрямую работает с устройствами и уже через переменные OPC-интерфейса предоставляет доступ к прочитанным данным или к управлению выводом другим программам, которых может быть произвольное количество.

21.01.2020 12:22:50
#3

Участник
Откуда: Мурманск
Здесь с 24.11.2018
Сообщений: 59

Re: Доступ к одному E502 нескольким процессам.

Спасибо!

23.01.2020 18:08:57
#4

Участник
Откуда: Мурманск
Здесь с 24.11.2018
Сообщений: 59

Re: Доступ к одному E502 нескольким процессам.

Еще вопрос по теме созрел:
Описатель устройства (Е502) потокобезопасный?
Взаимодействие с одним Е502 в рамках одного процесса и одного описателя устройства можно разнести по разным потокам?
Т.е. чтение с АЦП в одном потоке, запись в ЦАП в другом. В еще одном потоке цифровой ввод/вывод.

23.01.2020 18:56:31
#5

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,292

Re: Доступ к одному E502 нескольким процессам.

Да, обращения потокобезопасные и можно разносить разные операции по разным потокам, но нужно учитывать, что обращения из разных потоков должны быть огранизованы определенным образом в соответствии API, чтобы функции не возвращали ошибок.
1. Запуск/останов синхронного ввода-вывода выполняется общей функцией (StreamsStart, StreamsStop) и изменение конфигурации (Configure) возможно только при остановленном вводе-выводе, переход между этими двумя состояниями нужно синхронизовать между потоками, если используется синхронный ввод и синхронный вывод из разных потоков. Но при необходимости можно разрешать и запрещать сами потоки через StreamsEnable/Disable независимо из разных потоков в том числе и при запущенном вводе-выводе (в общем поэтому были введены отдельно Enable/Disable, а не Set).
2. Цифровой ввод-вывод можно вынести отдельно, только если он асинхронный, просто потому, что функция чтения синхронных данных с цифровых линий совмещена с чтением АЦП (т.к. это один поток ввода), а функция вывода синхронных цифровых линий - с ЦАП (т.к. один синхронный поток вывода).

Отредактировано Алексей L Card (23.01.2020 19:00:48)

24.01.2020 13:43:00
#6

Участник
Откуда: Мурманск
Здесь с 24.11.2018
Сообщений: 59

Re: Доступ к одному E502 нескольким процессам.

У меня такая задача - сбор данных с АЦП идет постоянный, запись в ЦАП (буду использовать 2 канала ЦАП) - кратковременный вывод в ЦАП как реакция на настпуление событя.
Планирую использовать синхронный режим для АЦП и ЦАП.
Таким образом надо в самом начале включить все используемые потоки для АЦП и ЦАП (StreamsEnable), затем вызвать StreamsStart, после чего потоки на ЦАПы выключить (StreamsDisable).
После наступления событий включаю потоки ЦАПов, X502_Send, при достижении конца данных выключаю потоки ЦАПов.
Правильно ли я представляю себе последовательность действий?

Вопросы:
1.После выдачи StreamsDisable для ЦАП будут ли реально выведены на ЦАП данные, которые еще остались в промежуточном буфере вывода?
2.После выдачи StreamsDisable какой сигнал будет установлен на выходе ЦАП?
3.Нужно ли вызывать PreloadStart перед каждым вызовом StreamsEnable или только один раз перед StreamsStart?
4.Если у меня данные для обоих каналов ЦАП уже изначально разложены по фреймам (например фреймы прочитаны из звукового файла) могу ли я обойтись без вызова PrepareData? Чтоб не перекладывать по 2 раза выводимые данные.

24.01.2020 14:12:35
#7

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,292

Re: Доступ к одному E502 нескольким процессам.

Для Вашего случая лучше вообще не делать StreamsEnable/StreamsDisable, а воспользоваться тем, что когда нет данных, то ЦАП повторяет последнее выведенное значение. PreloadStart тоже особо не нужен, он нужен, чтобы вывод начался одновременно с вводом АЦП по StreamsStart() (а для этого нужно загрузить данные до запуска ввода-вывода).

Т.е. разрешаете все потоки, делаете StreamsStart, затем по нужному событию выводите пачку нужных данных из другого потока, последний семпл в пачке для каждого канала должен соответствовать уровню "выключенного" ЦАП.

Вы можете не использовать PrepareData, но тогда Вы должны сами обеспечить, чтобы отсчеты ЦАП были  в виде 32-битных слов в формате, описанном в пункте 5.12 документа https://www.lcard.ru/download/x502_low_level.pdf. Модуль определяет, к какому каналу относятся данные, не по позиции, а по старшим битам слова, где это закодировано. Также PrepareData делает перевод из Вольт в коды и применение калибровки, что Вам тогда тоже нужно делать самостоятельно.

Отредактировано Алексей L Card (24.01.2020 14:16:12)

24.01.2020 14:51:53
#8

Участник
Откуда: Мурманск
Здесь с 24.11.2018
Сообщений: 59

Re: Доступ к одному E502 нескольким процессам.

Отличная мысль! Спасибо!
Уровень выключенного ЦАП это сколько? Думал это 0.

24.01.2020 15:14:27
#9

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,292

Re: Доступ к одному E502 нескольким процессам.

Я имел ввиду, уровень, которой для Вашей задачи управления соответствует отсутствию событий, т.е. который Вам нужен между этими кратковременными выводами по событию, вдруг Вам нужен не нулевой уровень. А так после сброса модуля до первого вывода на ЦАП на нем будет действительно нулевой уровень. После первого вывода ЦАП сохраняет последнее выведенное значение до сброса модуля (StreamsStop явно не переводит выходы ЦАП в нулевое состояние, а останавливает вывод).

В любом случае, последняя точка Вашего сигнала (переданная в том же Send или сделать сразу второй Send) должна соответствовать этому уровню, чтобы ЦАП ее повторял, пока не придут новые данные следующего вывода.

06.03.2020 18:57:12
#10

Участник
Откуда: Мурманск
Здесь с 24.11.2018
Сообщений: 59

Re: Доступ к одному E502 нескольким процессам.

Наконец то получил для тестов E-502.
Сделал вывод 0 на ЦАП, после вывода сигнала.
Почему то если вывести один нулевой отсчет, то сигнал в ноль не сбрасывается. Методом тыка выяснилось, что 2 нулевых отсчета сбрасывают сигнал.
Интересно, почему так происходит?

06.03.2020 19:09:19
#11

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,292

Re: Доступ к одному E502 нескольким процессам.

А версия прошивки ПЛИС у Вас какая у модуля?

10.03.2020 11:13:55
#12

Участник
Откуда: Мурманск
Здесь с 24.11.2018
Сообщений: 59

Re: Доступ к одному E502 нескольким процессам.

Плис: 0.3
ARM: 1.0.19

10.03.2020 12:39:16
#13

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,292

Re: Доступ к одному E502 нескольким процессам.

Да, Вам нужно будет обновить прошивку ПЛИС с помощью утилиты lxfw-update из последнего SDK для Windows или из одноименного пакета с этой утилитой под Linux (поставил сейчас на сборку версию пакета с самой последней прошивкой).

Контакты

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

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

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

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