Уважаемые форумчане!
Кто-нибудь работал с платами PCI-1802LU фирмы ICP-DAS?
В частности, интересует параллельный опрос из пользовательской программы двух плат по 24 аналоговым и по 8 дискретным каналам.
Реализована ли такая возможность в драйвере и библиотеке под Windows 7 (64-bit)?
С опросом одной платы никаких проблем нет, а вот стоит подключить вторую, сразу же возникают коллизии.
Все прилагаемые на диске примеры под сделаны только для одной платы. Единственный пример, который для двух плат, опрашивает их последовательно, причём элементарным чтением дискретных каналов.
Я в своей программе пытался их опрашивать и в тредах (двух 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), то программа продолжит работать...
Какие будут советы и предложения?
Работа с двумя платами PCI-1802LU (ICP-DAS)
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Работа с двумя платами PCI-1802LU (ICP-DAS)
Если разработчик библиотеки не предусмотрел реентерантность в своих функциях, то ничего с этим не сделать, только просить исходники и править вручную, после чего компилировать. В мануале про UniDAQ.dll что написано? Может, какие-то переменные/классы/структуры там общие. По идее, ещё на большинство плат должно быть описание подробное, где приведено назначение регистров и таблица допускаемых команд. По таким описаниям можно создать собственный драйвер на конкретную плату. Правда, мороки будет много.
-
- freelance
- Сообщения: 4
- Зарегистрирован: 08 окт 2010, 11:32
- Версия LabVIEW: 2012
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Работа с двумя платами PCI-1802LU (ICP-DAS)
Вот что ответила компания IPC2U(дистрибьютор):
Что же касается мануала по библиотеке UniDAQ.dll:
http://ftp.icpdas.com/pub/cd/iocard/pci ... 1_1220.pdf ,
то про режим "Multi-Board" там ничего не сказано
В то же время, другая фирма "Ниеншанц-Автоматика" (партнёр-поставщик) ответила:Получили ответ поставщика по Вашему вопросу.Возможна ли одновременная работа с двумя одинаковыми платами 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" там ничего не сказано
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Работа с двумя платами PCI-1802LU (ICP-DAS)
В инструкции на плату написано, что можно установить до 16 плат в компьютер и драйвер должен их поддерживать. Другое дело, можно ли их опрашивать одновременно. Вроде, есть какой-то пример:
Я бы ещё попробовал на вашем месте разные варианты библиотеки (x86/x64), разные драйвера (пишут, что есть старый (classic) и есть новый), разные операционки (XP/7 x32/x64). Можно попробовать запустить пример на C, вдруг он заработает. А если нет, то значит саппорт прав.Multiple-card solution -> group0 & group1 RUN at the same time, refer to DEMO14.C.
-
- freelance
- Сообщения: 4
- Зарегистрирован: 08 окт 2010, 11:32
- Версия LabVIEW: 2012
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Работа с двумя платами PCI-1802LU (ICP-DAS)
Я смотрел пример №14 под (demo14.vi) - он "заточен" именно под классический драйвер P180x.sys, и в нём очень неудобно и неявно реализованы настройка, запуск измерений и последующее чтение из буфера по сравнению с новым драйвером UniDAQ64.sys.
К тому же старый драйвер точно не устанавливается в 64-битной Windows 7, а мне приходится работать именно в ней...
Ещё в ReadMe.txt написано, что старый драйвер - для Windows 2K/XP/2003/Vista.
Так что пока придётся работать только с одной картой и новым драйвером в "семёрке".
Будет время и возможность - поэкспериментирую со старым драйвером в XP.
К тому же старый драйвер точно не устанавливается в 64-битной Windows 7, а мне приходится работать именно в ней...
Ещё в ReadMe.txt написано, что старый драйвер - для Windows 2K/XP/2003/Vista.
Так что пока придётся работать только с одной картой и новым драйвером в "семёрке".
Будет время и возможность - поэкспериментирую со старым драйвером в XP.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Работа с двумя платами PCI-1802LU (ICP-DAS)
По идее, Виста и сёмерка довольно близки, и если драйвер ставится на Висту, то должен пойти под W7. При условии, что разрядность одна и та же. Естественно, драйвер под Vista x32 не пойдёт на W7 x64, а только на W7 x32. Кроме того, всё же советую посмотреть примеры на текстовых языках, точнее, перекомпилить и запустить, хотя бы в Microsoft Visual Studio. Насколько я понял из инструкции на плату и библиотеку, одновременная работа плат, если и возможна, то только через создание параллельных потоков. Может быть, в есть сложности с реализацией такого механизма, хотя вроде не должно их быть. Но если хоть один пример работоспособен, то всё хозяйство можно потом перенести в . Также вы можете попробовать старый драйвер на виртуалке, если у вас x64, то создайте пару гостевых систем (Vista и XP x32), накатите старый драйвер и x32.
-
- freelance
- Сообщения: 4
- Зарегистрирован: 08 окт 2010, 11:32
- Версия LabVIEW: 2012
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Работа с двумя платами PCI-1802LU (ICP-DAS)
В том ReadMe-файле для старого драйвера имелась в виду VISTA 32-bit.dadreamer писал(а):По идее, Виста и сёмерка довольно близки, и если драйвер ставится на Висту, то должен пойти под W7. При условии, что разрядность одна и та же. Естественно, драйвер под Vista x32 не пойдёт на W7 x64, а только на W7 x32.
Как я уже писал, я пробовал работать с новым драйвером в 64-битной семёрке, реализуя разные механизмы: и трэды, и параллельные циклы...Кроме того, всё же советую посмотреть примеры на текстовых языках, точнее, перекомпилить и запустить, хотя бы в Microsoft Visual Studio. Насколько я понял из инструкции на плату и библиотеку, одновременная работа плат, если и возможна, то только через создание параллельных потоков. Может быть, в есть сложности с реализацией такого механизма, хотя вроде не должно их быть. Но если хоть один пример работоспособен, то всё хозяйство можно потом перенести в .
Что-то у меня "виртуалка" VMware не видит плату...Также вы можете попробовать старый драйвер на виртуалке, если у вас x64, то создайте пару гостевых систем (Vista и XP x32), накатите старый драйвер и x32.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Работа с двумя платами PCI-1802LU (ICP-DAS)
Похоже, эта идея не сработает, потому что под виртуалкой всё железо является симуляцией и фактически у виртуальной среды нет доступа к устройствам домашней системы. Есть редкие исключения, например, когда PCI-устройство поддерживает Passthrough режим, тогда можно попробовать вот это, но наверняка ваша плата не настолько популярна.Андрей78 писал(а):Что-то у меня "виртуалка" VMware не видит плату...
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 10 Ответы
- 774 Просмотры
-
Последнее сообщение Zloydj
-
- 16 Ответы
- 3263 Просмотры
-
Последнее сообщение Artem.spb
-
- 4 Ответы
- 220 Просмотры
-
Последнее сообщение Andrew Lunev