Работа с двумя платами PCI-1802LU (ICP-DAS)

Захват, обработка и генерирование сигнала
Ответить
Андрей78
freelance
freelance
Сообщения: 4
Зарегистрирован: 08 окт 2010, 11:32
Версия LabVIEW: 2012
Откуда: Санкт-Петербург
Контактная информация:

Работа с двумя платами PCI-1802LU (ICP-DAS)

Сообщение Андрей78 »

Уважаемые форумчане!

Кто-нибудь работал с платами PCI-1802LU фирмы ICP-DAS?
В частности, интересует параллельный опрос из пользовательской программы двух плат по 24 аналоговым и по 8 дискретным каналам.
Реализована ли такая возможность в драйвере и библиотеке под Windows 7 (64-bit)?

С опросом одной платы никаких проблем нет, а вот стоит подключить вторую, сразу же возникают коллизии.
Все прилагаемые на диске примеры под :labview: сделаны только для одной платы. Единственный пример, который для двух плат, опрашивает их последовательно, причём элементарным чтением дискретных каналов.

Я в своей программе пытался их опрашивать и в тредах (двух VI-клонах), и в параллельных потоках (два цикла в одном VI) - программа подвисает, а потом выдаёт ошибку тайм-аута драйвера и останавливается.
Тогда я упростил задачу и стал опрашивать платы в одном цикле следующим образом:
- запускаю чтение сигнала на плате 0 (вызов функции Ixud_StartAIScan.vi из библиотеки UniDAQ.llb, которая в свою очередь обращается через Call Library Function Node к функции Ixud_StartAIScan библиотеки UniDAQ.dll),
- запускаю чтение сигнала на плате 1,
- запускаю цикл ожидания, условием выхода из которого является либо истечение тайм-айта 5 сек., либо накопление в буфере одной из плат нужного количества данных (120000 значений типа SGL),
- в цикле ожидания проверяю количество накопленных данных для каждой платы (вызов функции Ixud_GetBufferStatus.vi из библиотеки UniDAQ.llb, которая в свою очередь обращается через Call Library Function Node к функции Ixud_GetBufferStatus библиотеки UniDAQ.dll),
-- в какой-то момент чтение на одной из плат обрывается (Ixud_GetBufferStatus возвращает постоянное значение, например, 3250 или 113 - в каждом цикле оно разное),
-- в то же время другая плата продолжает накапливать данные (значение на выходе Ixud_GetBufferStatus возрастает до 120000),
-- нет определённой зависимости в обрыве - он может произойти на любой плате в случайный момент,
-- Call Library Function Node я пробовал настраивать по-разному (Run in UI thread / Run in any thread) - программа вела себя одинаково),
- после этого происходит выход из цикла ожидания и запрос из буфера принятых данных (вызов функции Ixud_GetAIBuffer.vi из библиотеки UniDAQ.llb, которая в свою очередь обращается через Call Library Function Node к функции Ixud_GetAIBuffer библиотеки UniDAQ.dll),
-- при этом, если запросить данные от платы, у которой накопился полный буфер (ожидаемые 120000 значений), то массив будет нормально принят и обработан целиком,
-- если же запросить данные от платы, у которой был обрыв (пробовал разное количество - и последнее значение статуса, и полный ожидаемый размер), то происходит упомянутое выше подвисание с ошибкой тайм-аута и никаких данных не возвращается,
-- если же у проблемной платы данные не запрашивать, а перейти на начало цикла опроса (первый пункт - запуск чтения сигнала на плате 0), то программа продолжит работать...

Какие будут советы и предложения? :help:
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Работа с двумя платами PCI-1802LU (ICP-DAS)

Сообщение dadreamer »

Если разработчик библиотеки не предусмотрел реентерантность в своих функциях, то ничего с этим не сделать, только просить исходники и править вручную, после чего компилировать. В мануале про UniDAQ.dll что написано? Может, какие-то переменные/классы/структуры там общие. По идее, ещё на большинство плат должно быть описание подробное, где приведено назначение регистров и таблица допускаемых команд. По таким описаниям можно создать собственный драйвер на конкретную плату. Правда, мороки будет много.
Андрей78
freelance
freelance
Сообщения: 4
Зарегистрирован: 08 окт 2010, 11:32
Версия LabVIEW: 2012
Откуда: Санкт-Петербург
Контактная информация:

Re: Работа с двумя платами PCI-1802LU (ICP-DAS)

Сообщение Андрей78 »

Вот что ответила компания IPC2U(дистрибьютор):
Возможна ли одновременная работа с двумя одинаковыми платами PCI-1802LU фирмы ICP-DAS?
В частности, интересует параллельный опрос из пользовательской программы двух плат по 24 аналоговым и по 8 дискретным каналам.
Реализована ли такая возможность в драйвере устройства и его библиотеке под Windows 7 (64-bit)?
Получили ответ поставщика по Вашему вопросу.
Драйвер UniDAQ поддерживает работу с Windows 7 64.
Можете ознакомиться с примерами:
http://ftp.icpdas.com/pub/cd/iocard/pci ... en_v11.pdf
Драйвер поддерживает асинхронное чтение по нескольким каналам, однако PCI-1802 не поддерживает синхронную работу двух плат.
В то же время, другая фирма "Ниеншанц-Автоматика" (партнёр-поставщик) ответила:
Да, можно работать с несколькими платами, одинаковыми или разными, это предусмотрено библиотекой (она называется UniDAQ).
Библиотека поддерживает ОС до Windows 7 включительно, системы x86 и x64. Подробнее с библиотекой можете ознакомиться здесь:
http://www.icpdas.com/products/Software ... unidaq.htm
Второй ответ мне ничем не помог, а вот исходя из первого ответа, можно понять, почему у меня были сбои при одновременной чтении с двух плат...

Что же касается мануала по библиотеке UniDAQ.dll:
http://ftp.icpdas.com/pub/cd/iocard/pci ... 1_1220.pdf ,
то про режим "Multi-Board" там ничего не сказано :dntknw:
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Работа с двумя платами PCI-1802LU (ICP-DAS)

Сообщение dadreamer »

В инструкции на плату написано, что можно установить до 16 плат в компьютер и драйвер должен их поддерживать. Другое дело, можно ли их опрашивать одновременно. Вроде, есть какой-то пример:
Multiple-card solution -> group0 & group1 RUN at the same time, refer to DEMO14.C.
Я бы ещё попробовал на вашем месте разные варианты библиотеки (x86/x64), разные драйвера (пишут, что есть старый (classic) и есть новый), разные операционки (XP/7 x32/x64). Можно попробовать запустить пример на C, вдруг он заработает. А если нет, то значит саппорт прав.
Андрей78
freelance
freelance
Сообщения: 4
Зарегистрирован: 08 окт 2010, 11:32
Версия LabVIEW: 2012
Откуда: Санкт-Петербург
Контактная информация:

Re: Работа с двумя платами PCI-1802LU (ICP-DAS)

Сообщение Андрей78 »

Я смотрел пример №14 под :labview: (demo14.vi) - он "заточен" именно под классический драйвер P180x.sys, и в нём очень неудобно и неявно реализованы настройка, запуск измерений и последующее чтение из буфера по сравнению с новым драйвером UniDAQ64.sys.
К тому же старый драйвер точно не устанавливается в 64-битной Windows 7, а мне приходится работать именно в ней...
Ещё в ReadMe.txt написано, что старый драйвер - для Windows 2K/XP/2003/Vista.

Так что пока придётся работать только с одной картой и новым драйвером в "семёрке".
Будет время и возможность - поэкспериментирую со старым драйвером в XP. :think:
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Работа с двумя платами PCI-1802LU (ICP-DAS)

Сообщение dadreamer »

По идее, Виста и сёмерка довольно близки, и если драйвер ставится на Висту, то должен пойти под W7. При условии, что разрядность одна и та же. Естественно, драйвер под Vista x32 не пойдёт на W7 x64, а только на W7 x32. Кроме того, всё же советую посмотреть примеры на текстовых языках, точнее, перекомпилить и запустить, хотя бы в Microsoft Visual Studio. Насколько я понял из инструкции на плату и библиотеку, одновременная работа плат, если и возможна, то только через создание параллельных потоков. Может быть, в :labview: есть сложности с реализацией такого механизма, хотя вроде не должно их быть. Но если хоть один пример работоспособен, то всё хозяйство можно потом перенести в :labview: . Также вы можете попробовать старый драйвер на виртуалке, если у вас x64, то создайте пару гостевых систем (Vista и XP x32), накатите старый драйвер и :labview: x32.
Андрей78
freelance
freelance
Сообщения: 4
Зарегистрирован: 08 окт 2010, 11:32
Версия LabVIEW: 2012
Откуда: Санкт-Петербург
Контактная информация:

Re: Работа с двумя платами PCI-1802LU (ICP-DAS)

Сообщение Андрей78 »

dadreamer писал(а):По идее, Виста и сёмерка довольно близки, и если драйвер ставится на Висту, то должен пойти под W7. При условии, что разрядность одна и та же. Естественно, драйвер под Vista x32 не пойдёт на W7 x64, а только на W7 x32.
В том ReadMe-файле для старого драйвера имелась в виду VISTA 32-bit.
Кроме того, всё же советую посмотреть примеры на текстовых языках, точнее, перекомпилить и запустить, хотя бы в Microsoft Visual Studio. Насколько я понял из инструкции на плату и библиотеку, одновременная работа плат, если и возможна, то только через создание параллельных потоков. Может быть, в :labview: есть сложности с реализацией такого механизма, хотя вроде не должно их быть. Но если хоть один пример работоспособен, то всё хозяйство можно потом перенести в :labview: .
Как я уже писал, я пробовал работать с новым драйвером в 64-битной семёрке, реализуя разные механизмы: и трэды, и параллельные циклы...
Также вы можете попробовать старый драйвер на виртуалке, если у вас x64, то создайте пару гостевых систем (Vista и XP x32), накатите старый драйвер и :labview: x32.
Что-то у меня "виртуалка" VMware не видит плату...
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Работа с двумя платами PCI-1802LU (ICP-DAS)

Сообщение dadreamer »

Андрей78 писал(а):Что-то у меня "виртуалка" VMware не видит плату...
Похоже, эта идея не сработает, потому что под виртуалкой всё железо является симуляцией и фактически у виртуальной среды нет доступа к устройствам домашней системы. Есть редкие исключения, например, когда PCI-устройство поддерживает Passthrough режим, тогда можно попробовать вот это, но наверняка ваша плата не настолько популярна.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Обработка сигнала»