Способы связи клиента с удаленным Sub VI сервером
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Способы связи клиента с удаленным Sub VI сервером
Как, если не использовать облачную технологию (referenc'ы в application control) можно создавать жесткую связь (в том смысле, что вызываемый сервер и клиент находятся в режиме real time) ? Например, как грамотно и красиво это сделать с помощью очередей ? Какие еще способы есть ?
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Способы связи клиента с удаленным Sub VI сервером
Попробуйте, пожалуйста, перефразировать вопрос - коротко, и по-сути. При чем "облачная технология" и referenc'ы в application control? Или "жесткая связь" и "real time"? Что такое "удаленный SubVI сервер"? Удаленный - значит где-то на локальной сети? Или Вы имеете ввиду паралельную виайку вызываемую асинхронно на одной машине?
Я честно говоря вообще не понял, о чем речь.
На Stackoverflow Вам бы было тяжко
Я честно говоря вообще не понял, о чем речь.
На Stackoverflow Вам бы было тяжко
Мы делили апельсин - много наших полегло...
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Re: Способы связи клиента с удаленным Sub VI сервером
Хорошо. Смотрите, есть сервер - пусть он создает, например, график некой функции с помощью for loop, и пусть точки выводятся каждую миллисекунду на waveform chart. Этот подприбор-сервер, мы вызываем из прибора-клиента, и хотим, чтобы в то же время, как точки появляются на сервере, мы регистрировали их на графике клиента в "реальном времени".Kosist писал(а):Попробуйте, пожалуйста, перефразировать вопрос - коротко, и по-сути. При чем "облачная технология" и referenc'ы в application control? Или "жесткая связь" и "real time"? Что такое "удаленный SubVI сервер"? Удаленный - значит где-то на локальной сети? Или Вы имеете ввиду паралельную виайку вызываемую асинхронно на одной машине?
Я честно говоря вообще не понял, о чем речь.
На Stackoverflow Вам бы было тяжко
Это можно сделать с помощью ссылки на сервер. Про облако я упомянул, поскольку такие ссылки технически реализуют такую технологию, позволяя разделять доступ к серверу между различными VI.
Я бы хотел сделать тоже самое грамотно и аккуратно с помощью очередей, и понять, можно ли это делать еще какими то способами.
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Способы связи клиента с удаленным Sub VI сервером
Можете использовать очередь с одинаковым именем - https://forums.ni.com/t5/Example-Progra ... -p/3498177 - или в клиенте инициализируете очередь, и ее ссылку передаете "серверу", а сервер уже посылает данные клиенту.
Для > 2017 можно использовать даже каналы - Channels.
Для > 2017 можно использовать даже каналы - Channels.
Мы делили апельсин - много наших полегло...
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Re: Способы связи клиента с удаленным Sub VI сервером
Спасибо! Во втором способе с очередью, к сожалению, они почему то последовательно работают - как можно это исправить ?Kosist писал(а):Можете использовать очередь с одинаковым именем - https://forums.ni.com/t5/Example-Progra ... -p/3498177 - или в клиенте инициализируете очередь, и ее ссылку передаете "серверу", а сервер уже посылает данные клиенту.
Для > 2017 можно использовать даже каналы - Channels.
По каналам можете ссылку какую нибудь дать ?
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Способы связи клиента с удаленным Sub VI сервером
Каналы - http://www.ni.com/product-documentation/53423/en/.
А по поводу очередей - можете показать код? Они должны бы работать паралельно...
А по поводу очередей - можете показать код? Они должны бы работать паралельно...
Мы делили апельсин - много наших полегло...
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Re: Способы связи клиента с удаленным Sub VI сервером
Попробовал перенести все на одну блок диаграмму - работает одновременно, но клиент снимает весьма искаженную синусоиду - почему, тоже не могу понять. Notifier - решает проблему,конечно, но от этого яснее не становится, ведь очереди, как я понимаю, должны давать синхронизацию и это работает, например, если делать машину состояний с event структурой.
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Способы связи клиента с удаленным Sub VI сервером
А зачем Вы в клиенте записываете данные снова в очередь? Это неправильно. Вы получили данные, потом их снова записали в очередь; снова прочитали и снова записали, и т.д. и т.п.
Сервер отсылает данные при помощи Enqueue Element. В том цикле есть задержка, это хорошо. Принимающий цикл - клиент - должен иметь только Dequeue Element - задержка не нужна, т.к. он будет тактироваться высылающим циклом. Данные есть в очереди - Dequeue Element их считывает; данных нету - ждет (при условии что Timeout = -1).
А Notifier - у него нет буфера. Очередь тем и хороша, что данные не теряются, а записываются в FIFO (first input, first output) буфер.
Upd: а если Вы хотите высылать данные многим клиентам одновременно, то тогда нужно это делать при помощи User Events. Т.к. они имеют буфер, и multiple writers/multiple readers. Очередь же может иметь лишь одного получателя.
Сервер отсылает данные при помощи Enqueue Element. В том цикле есть задержка, это хорошо. Принимающий цикл - клиент - должен иметь только Dequeue Element - задержка не нужна, т.к. он будет тактироваться высылающим циклом. Данные есть в очереди - Dequeue Element их считывает; данных нету - ждет (при условии что Timeout = -1).
А Notifier - у него нет буфера. Очередь тем и хороша, что данные не теряются, а записываются в FIFO (first input, first output) буфер.
Upd: а если Вы хотите высылать данные многим клиентам одновременно, то тогда нужно это делать при помощи User Events. Т.к. они имеют буфер, и multiple writers/multiple readers. Очередь же может иметь лишь одного получателя.
Мы делили апельсин - много наших полегло...
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Re: Способы связи клиента с удаленным Sub VI сервером
Всё равно последовательно работает...Kosist писал(а):А зачем Вы в клиенте записываете данные снова в очередь? Это неправильно. Вы получили данные, потом их снова записали в очередь; снова прочитали и снова записали, и т.д. и т.п.
Сервер отсылает данные при помощи Enqueue Element. В том цикле есть задержка, это хорошо. Принимающий цикл - клиент - должен иметь только Dequeue Element - задержка не нужна, т.к. он будет тактироваться высылающим циклом. Данные есть в очереди - Dequeue Element их считывает; данных нету - ждет (при условии что Timeout = -1).
А Notifier - у него нет буфера. Очередь тем и хороша, что данные не теряются, а записываются в FIFO (first input, first output) буфер.
Последний раз редактировалось dakishi 02 ноя 2019, 14:03, всего редактировалось 1 раз.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Способы связи клиента с удаленным Sub VI сервером
Насколько я понимаю, требующееся вам поведение реализуется с помощью параллельных циклов. Шаблон "Производитель - Потребитель" хорошо сюда подойдёт. В одном цикле (While) крутится код т.н. сервера, в другом - код клиента. По какой-либо внешней команде (например, нажатие кнопки) сервер начинает писать в очередь, а клиент - читать оттуда (или же клиент может читать постоянно). Тогда будет одновременная параллельная работа.dakishi писал(а):Всё равно последовательно работает...
На форуме много информации об этом, например см. мой пост: http://www.labviewportal.org/viewtopic. ... 992#p78992
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Re: Способы связи клиента с удаленным Sub VI сервером
В таком шаблоне, как я понял, у нас все находится на одной блок диаграмме - я же хочу сделать так, чтобы сервером был отдельно вызываемый подприбор.dadreamer писал(а):Насколько я понимаю, требующееся вам поведение реализуется с помощью параллельных циклов. Шаблон "Производитель - Потребитель" хорошо сюда подойдёт. В одном цикле (While) крутится код т.н. сервера, в другом - код клиента. По какой-либо внешней команде (например, нажатие кнопки) сервер начинает писать в очередь, а клиент - читать оттуда (или же клиент может читать постоянно). Тогда будет одновременная параллельная работа.dakishi писал(а):Всё равно последовательно работает...
На форуме много информации об этом, например см. мой пост: http://www.labviewportal.org/viewtopic. ... 992#p78992
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Re: Способы связи клиента с удаленным Sub VI сервером
Так у меня он и сидит там - вывод очереди из subVI идет на параллельный цикл клиента, но, работа последовательная. Если перетащить из SubVI на блок диаграмму - все параллельно работает.dadreamer писал(а):А что мешает цикл поместить внутрь SubVI?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 9 Ответы
- 1824 Просмотры
-
Последнее сообщение BARD