Параллельный опрос приборов
-
- assistant
- Сообщения: 103
- Зарегистрирован: 25 фев 2015, 10:00
- Версия LabVIEW: 14.0f1
- Контактная информация:
Параллельный опрос приборов
Добрый вечер!
Требуется помощь. Имеются два мультиметра, подключённых к одному компьютеру по LAN. На прилагаемой картинке изображена простенькая программа для их опроса. В каждом приборе задействовано по паре сотен каналов, т.е. опрос одного прибора при нужных настройках занимает заметное время в несколько сек. В моём понимании, поскольку отсылка команд и получение ответа проходят практически мгновенно (объём ответа всего - 4 Кб), то приборы должны, получив запрос, производить измерения в параллель (в это время компьютер им не нужен). Однако, сначала измерения проводит один, и только после их окончания - второй. Почему так странно? Мне принципиально нужно повысить скорость работы.
Спасибо!
Требуется помощь. Имеются два мультиметра, подключённых к одному компьютеру по LAN. На прилагаемой картинке изображена простенькая программа для их опроса. В каждом приборе задействовано по паре сотен каналов, т.е. опрос одного прибора при нужных настройках занимает заметное время в несколько сек. В моём понимании, поскольку отсылка команд и получение ответа проходят практически мгновенно (объём ответа всего - 4 Кб), то приборы должны, получив запрос, производить измерения в параллель (в это время компьютер им не нужен). Однако, сначала измерения проводит один, и только после их окончания - второй. Почему так странно? Мне принципиально нужно повысить скорость работы.
Спасибо!
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Параллельный опрос приборов
Это может быть из-за того, что функции у Вас не выполняются в параллели так, как нужно. Да, они не соединены между собой - но в таком случае будет само решать, в каком порядке (относительно псевдо-паралельных функций в цикле) будут выполняться функции. Разнесите коммуникацию с приборами в два цикла, а еще лучше - в два Timed Loop, и задайте даже разные ядра процессора для каждого цикла - может, поможет это немного.
Запустите код "под лампочкой", и посмотрите, в каком порядке выполняются функции сейчас.
Запустите код "под лампочкой", и посмотрите, в каком порядке выполняются функции сейчас.
Мы делили апельсин - много наших полегло...
-
- assistant
- Сообщения: 103
- Зарегистрирован: 25 фев 2015, 10:00
- Версия LabVIEW: 14.0f1
- Контактная информация:
Re: Параллельный опрос приборов
А как можно разные ядра задавать? Я без понятия, к сожалению.
Ну и потом, время тратится _внутри_ приборов. Операции LabVIEW мгновенны - зачем она стоит, ожидая ответа от прибора?
Измерения должны проходить максимально синхронно, если разделю на разные циклы, как синхронизировать?
Железо на работе, сейчас проверить порядок не смогу.
Ну и потом, время тратится _внутри_ приборов. Операции LabVIEW мгновенны - зачем она стоит, ожидая ответа от прибора?
Измерения должны проходить максимально синхронно, если разделю на разные циклы, как синхронизировать?
Железо на работе, сейчас проверить порядок не смогу.
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Параллельный опрос приборов
С Timed Loop все просто - как только Вы его кинете на блок-диаграмму, дважды кликнете - и там будет поле типа Process Assignment.
Все верно, операции проходят внутри приборов. Но Вы сами написали, что приборы не меряют мнговенно. Вот и происходит что-то типа этого - LV отправила комманду мерять одному прибору, затем второму. А дальше хочет считать, но данные еще "не намерялись". А у функции есть таймаут - вот она стоит и ждет данных. Данные пришли на одну, и на вторую, и опять по кругу.
А по синхронизации я не эксперт, это пусть более опытные коллеги форума Вам подскажут...
Все верно, операции проходят внутри приборов. Но Вы сами написали, что приборы не меряют мнговенно. Вот и происходит что-то типа этого - LV отправила комманду мерять одному прибору, затем второму. А дальше хочет считать, но данные еще "не намерялись". А у функции есть таймаут - вот она стоит и ждет данных. Данные пришли на одну, и на вторую, и опять по кругу.
А по синхронизации я не эксперт, это пусть более опытные коллеги форума Вам подскажут...
Мы делили апельсин - много наших полегло...
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Параллельный опрос приборов
Цикл не перейдёт на следующую итерацию, пока не будут выполнены все внутри него. Поскольку у вас два потока никак не связаны, то порядок их выполнения может меняться на каждой итерации: первый - второй, второй - первый, оба сразу. Как уже писали, нужно разнести потоки получения данных в разные циклы.temples писал(а):Операции LabVIEW мгновенны - зачем она стоит, ожидая ответа от прибора?
Очереди, рандеву, семафоры - вариантов масса.temples писал(а):если разделю на разные циклы, как синхронизировать?
-
- VIP
- Сообщения: 1334
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 6
- Версия LabVIEW: 6.1 - 2024
- Откуда: Германия
- Благодарил (а): 1 раз
- Поблагодарили: 41 раз
- Контактная информация:
Re: Параллельный опрос приборов
Потому что приборы, которые у вас в цикле не реентерантные. Попробуйте изменить их (а также все подприборы, которые там используются) свойства на reenterant (там могут быть подводные камни, но возможно это поможет).temples писал(а): Однако, сначала измерения проводит один, и только после их окончания - второй. Почему так странно?
-
- assistant
- Сообщения: 103
- Зарегистрирован: 25 фев 2015, 10:00
- Версия LabVIEW: 14.0f1
- Контактная информация:
Re: Параллельный опрос приборов
Сначала хочу ещё пояснить, что у девайса есть дисплейчик и момент измерения мне однозначно виден: текущая операция отображается. Ну и релюшки хорошо щёлкают :)Kosist писал(а):Все верно, операции проходят внутри приборов. Но Вы сами написали, что приборы не меряют мнговенно. Вот и происходит что-то типа этого - LV отправила комманду мерять одному прибору, затем второму. А дальше хочет считать, но данные еще "не намерялись".
Операции "измерение" и "чтение измеренного из буфера" разнесены и представляют две отдельные иконки внутри цикла. Я сегодня ради интереса вообще убрал чтение из буфера и разложил остальное в Flat Sequence Structure. Что вижу: посылается команда на первый прибор, он начинает щёлкать. Вместо того, чтобы сразу посылать на второй, комп ждёт. Чего ждёт и как определяет время ожидания - неясно, т.к. вообще ему вроде никакого ответа приходить не должно.
Я с этим не спорю. Но, как написал выше, убрав чтение из буфера я вроде должен был бы автоматически убрать и ожидание готовности к этой операции.dadreamer писал(а):Цикл не перейдёт на следующую итерацию, пока не будут выполнены все внутри него.
А можно примерчик?dadreamer писал(а):Очереди, рандеву, семафоры - вариантов масса.
-
- assistant
- Сообщения: 103
- Зарегистрирован: 25 фев 2015, 10:00
- Версия LabVIEW: 14.0f1
- Контактная информация:
Re: Параллельный опрос приборов
А где это можно сделать? У меня версия неанглийская, не могу найти.AndreyDmitriev писал(а):Потому что приборы, которые у вас в цикле не реентерантные. Попробуйте изменить их (а также все подприборы, которые там используются) свойства на reenterant (там могут быть подводные камни, но возможно это поможет).
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Параллельный опрос приборов
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
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Параллельный опрос приборов
Может, функция ждет ответа от прибора, что измерения завершены? Или что буфер полностью наполнен?temples писал(а): Операции "измерение" и "чтение измеренного из буфера" разнесены и представляют две отдельные иконки внутри цикла. Я сегодня ради интереса вообще убрал чтение из буфера и разложил остальное в Flat Sequence Structure. Что вижу: посылается команда на первый прибор, он начинает щёлкать. Вместо того, чтобы сразу посылать на второй, комп ждёт. Чего ждёт и как определяет время ожидания - неясно, т.к. вообще ему вроде никакого ответа приходить не должно.
Мы делили апельсин - много наших полегло...
-
- assistant
- Сообщения: 103
- Зарегистрирован: 25 фев 2015, 10:00
- Версия LabVIEW: 14.0f1
- Контактная информация:
Re: Параллельный опрос приборов
В общем, зря я суетился раньше времени. Внутри этого ВП оказалась не только низкоуровневая операция записи команд, но и операция чтения ошибок. Вот вторая-то и ждала, когда прибор освободится. Всё стало отлично работать параллельно, когда я их вытащил наружу.Kosist писал(а):Может, функция ждет ответа от прибора, что измерения завершены? Или что буфер полностью наполнен?