Параллельный опрос приборов

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
temples
assistant
assistant
Сообщения: 103
Зарегистрирован: 25 фев 2015, 10:00
Версия LabVIEW: 14.0f1
Контактная информация:

Параллельный опрос приборов

Сообщение temples »

Добрый вечер!

Требуется помощь. Имеются два мультиметра, подключённых к одному компьютеру по LAN. На прилагаемой картинке изображена простенькая программа для их опроса. В каждом приборе задействовано по паре сотен каналов, т.е. опрос одного прибора при нужных настройках занимает заметное время в несколько сек. В моём понимании, поскольку отсылка команд и получение ответа проходят практически мгновенно (объём ответа всего - 4 Кб), то приборы должны, получив запрос, производить измерения в параллель (в это время компьютер им не нужен). Однако, сначала измерения проводит один, и только после их окончания - второй. Почему так странно? Мне принципиально нужно повысить скорость работы.

Спасибо!
Вложения
two_devices.png
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Параллельный опрос приборов

Сообщение Kosist »

Это может быть из-за того, что функции у Вас не выполняются в параллели так, как нужно. Да, они не соединены между собой - но в таком случае :labview: будет само решать, в каком порядке (относительно псевдо-паралельных функций в цикле) будут выполняться функции. Разнесите коммуникацию с приборами в два цикла, а еще лучше - в два Timed Loop, и задайте даже разные ядра процессора для каждого цикла - может, поможет это немного.
Запустите код "под лампочкой", и посмотрите, в каком порядке выполняются функции сейчас.
Мы делили апельсин - много наших полегло...
temples
assistant
assistant
Сообщения: 103
Зарегистрирован: 25 фев 2015, 10:00
Версия LabVIEW: 14.0f1
Контактная информация:

Re: Параллельный опрос приборов

Сообщение temples »

А как можно разные ядра задавать? Я без понятия, к сожалению.
Ну и потом, время тратится _внутри_ приборов. Операции LabVIEW мгновенны - зачем она стоит, ожидая ответа от прибора?
Измерения должны проходить максимально синхронно, если разделю на разные циклы, как синхронизировать?

Железо на работе, сейчас проверить порядок не смогу.
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Параллельный опрос приборов

Сообщение Kosist »

С Timed Loop все просто - как только Вы его кинете на блок-диаграмму, дважды кликнете - и там будет поле типа Process Assignment.
Все верно, операции проходят внутри приборов. Но Вы сами написали, что приборы не меряют мнговенно. Вот и происходит что-то типа этого - LV отправила комманду мерять одному прибору, затем второму. А дальше хочет считать, но данные еще "не намерялись". А у функции есть таймаут - вот она стоит и ждет данных. Данные пришли на одну, и на вторую, и опять по кругу.
А по синхронизации я не эксперт, это пусть более опытные коллеги форума Вам подскажут...
Мы делили апельсин - много наших полегло...
Аватара пользователя
dadreamer

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

Re: Параллельный опрос приборов

Сообщение dadreamer »

temples писал(а):Операции LabVIEW мгновенны - зачем она стоит, ожидая ответа от прибора?
Цикл не перейдёт на следующую итерацию, пока не будут выполнены все :vi: внутри него. Поскольку у вас два потока никак не связаны, то порядок их выполнения может меняться на каждой итерации: первый - второй, второй - первый, оба сразу. Как уже писали, нужно разнести потоки получения данных в разные циклы.
temples писал(а):если разделю на разные циклы, как синхронизировать?
Очереди, рандеву, семафоры - вариантов масса.
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1334
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 41 раз
Контактная информация:

Re: Параллельный опрос приборов

Сообщение AndreyDmitriev »

temples писал(а): Однако, сначала измерения проводит один, и только после их окончания - второй. Почему так странно?
Потому что приборы, которые у вас в цикле не реентерантные. Попробуйте изменить их (а также все подприборы, которые там используются) свойства на reenterant (там могут быть подводные камни, но возможно это поможет).
temples
assistant
assistant
Сообщения: 103
Зарегистрирован: 25 фев 2015, 10:00
Версия LabVIEW: 14.0f1
Контактная информация:

Re: Параллельный опрос приборов

Сообщение temples »

Kosist писал(а):Все верно, операции проходят внутри приборов. Но Вы сами написали, что приборы не меряют мнговенно. Вот и происходит что-то типа этого - LV отправила комманду мерять одному прибору, затем второму. А дальше хочет считать, но данные еще "не намерялись".
Сначала хочу ещё пояснить, что у девайса есть дисплейчик и момент измерения мне однозначно виден: текущая операция отображается. Ну и релюшки хорошо щёлкают :)
Операции "измерение" и "чтение измеренного из буфера" разнесены и представляют две отдельные иконки внутри цикла. Я сегодня ради интереса вообще убрал чтение из буфера и разложил остальное в Flat Sequence Structure. Что вижу: посылается команда на первый прибор, он начинает щёлкать. Вместо того, чтобы сразу посылать на второй, комп ждёт. Чего ждёт и как определяет время ожидания - неясно, т.к. вообще ему вроде никакого ответа приходить не должно.
dadreamer писал(а):Цикл не перейдёт на следующую итерацию, пока не будут выполнены все :vi: внутри него.
Я с этим не спорю. Но, как написал выше, убрав чтение из буфера я вроде должен был бы автоматически убрать и ожидание готовности к этой операции.
dadreamer писал(а):Очереди, рандеву, семафоры - вариантов масса.
А можно примерчик?
temples
assistant
assistant
Сообщения: 103
Зарегистрирован: 25 фев 2015, 10:00
Версия LabVIEW: 14.0f1
Контактная информация:

Re: Параллельный опрос приборов

Сообщение temples »

AndreyDmitriev писал(а):Потому что приборы, которые у вас в цикле не реентерантные. Попробуйте изменить их (а также все подприборы, которые там используются) свойства на reenterant (там могут быть подводные камни, но возможно это поможет).
А где это можно сделать? У меня версия неанглийская, не могу найти.
Аватара пользователя
dadreamer

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

Re: Параллельный опрос приборов

Сообщение dadreamer »

temples писал(а):А можно примерчик?
[b][color=#FF9900]dadreamer[/color][/b] писал(а):Для лучшего понимания инструментов синхронизации посмотрите примеры в папке C:\Program Files (x86)\National Instruments\LabVIEW 2014\examples\Synchronization. Папка Notifier - примеры с уведомителями, папка Queue - примеры с очередями. Также рекомендую почитать книгу Питера Блюма "LabVIEW: стиль программирования", в частности главу 8 "Шаблоны" и раздел 8.3.1 "Параллельные циклы". Очень хорошо написано про инструменты синхронизации в издании "LabVIEW Основы II: Разработка". Обратите внимание на шаблон «Производитель-потребитель» и посмотрите материал в главе 2 "Передача данных между несколькими циклами". Ссылки на литературу по понятным причинам не даю.
temples писал(а):А где это можно сделать? У меня версия неанглийская, не могу найти.
Изображение
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Параллельный опрос приборов

Сообщение Kosist »

temples писал(а): Операции "измерение" и "чтение измеренного из буфера" разнесены и представляют две отдельные иконки внутри цикла. Я сегодня ради интереса вообще убрал чтение из буфера и разложил остальное в Flat Sequence Structure. Что вижу: посылается команда на первый прибор, он начинает щёлкать. Вместо того, чтобы сразу посылать на второй, комп ждёт. Чего ждёт и как определяет время ожидания - неясно, т.к. вообще ему вроде никакого ответа приходить не должно.
Может, функция ждет ответа от прибора, что измерения завершены? Или что буфер полностью наполнен?
Мы делили апельсин - много наших полегло...
temples
assistant
assistant
Сообщения: 103
Зарегистрирован: 25 фев 2015, 10:00
Версия LabVIEW: 14.0f1
Контактная информация:

Re: Параллельный опрос приборов

Сообщение temples »

Kosist писал(а):Может, функция ждет ответа от прибора, что измерения завершены? Или что буфер полностью наполнен?
В общем, зря я суетился раньше времени. Внутри этого ВП оказалась не только низкоуровневая операция записи команд, но и операция чтения ошибок. Вот вторая-то и ждала, когда прибор освободится. Всё стало отлично работать параллельно, когда я их вытащил наружу.
Ответить

Вернуться в «Коммуникация с приборами»