Способы связи клиента с удаленным Sub VI сервером

Простейшие вопросы в области инженерной разработки
Ответить
dakishi
assistant
assistant
Сообщения: 120
Зарегистрирован: 05 сен 2019, 21:01
Версия LabVIEW: 2019
Контактная информация:

Способы связи клиента с удаленным Sub VI сервером

Сообщение dakishi »

Как, если не использовать облачную технологию (referenc'ы в application control) можно создавать жесткую связь (в том смысле, что вызываемый сервер и клиент находятся в режиме real time) ? Например, как грамотно и красиво это сделать с помощью очередей ? Какие еще способы есть ?
Аватара пользователя
Kosist

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

Re: Способы связи клиента с удаленным Sub VI сервером

Сообщение Kosist »

Попробуйте, пожалуйста, перефразировать вопрос - коротко, и по-сути. При чем "облачная технология" и referenc'ы в application control? Или "жесткая связь" и "real time"? Что такое "удаленный SubVI сервер"? Удаленный - значит где-то на локальной сети? Или Вы имеете ввиду паралельную виайку вызываемую асинхронно на одной машине?
Я честно говоря вообще не понял, о чем речь. :think:
На Stackoverflow Вам бы было тяжко :wink:
Мы делили апельсин - много наших полегло...
dakishi
assistant
assistant
Сообщения: 120
Зарегистрирован: 05 сен 2019, 21:01
Версия LabVIEW: 2019
Контактная информация:

Re: Способы связи клиента с удаленным Sub VI сервером

Сообщение dakishi »

Kosist писал(а):Попробуйте, пожалуйста, перефразировать вопрос - коротко, и по-сути. При чем "облачная технология" и referenc'ы в application control? Или "жесткая связь" и "real time"? Что такое "удаленный SubVI сервер"? Удаленный - значит где-то на локальной сети? Или Вы имеете ввиду паралельную виайку вызываемую асинхронно на одной машине?
Я честно говоря вообще не понял, о чем речь. :think:
На Stackoverflow Вам бы было тяжко :wink:
Хорошо. Смотрите, есть сервер - пусть он создает, например, график некой функции с помощью for loop, и пусть точки выводятся каждую миллисекунду на waveform chart. Этот подприбор-сервер, мы вызываем из прибора-клиента, и хотим, чтобы в то же время, как точки появляются на сервере, мы регистрировали их на графике клиента в "реальном времени".
Это можно сделать с помощью ссылки на сервер. Про облако я упомянул, поскольку такие ссылки технически реализуют такую технологию, позволяя разделять доступ к серверу между различными VI.

Я бы хотел сделать тоже самое грамотно и аккуратно с помощью очередей, и понять, можно ли это делать еще какими то способами.
Аватара пользователя
Kosist

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

Re: Способы связи клиента с удаленным Sub VI сервером

Сообщение Kosist »

Можете использовать очередь с одинаковым именем - https://forums.ni.com/t5/Example-Progra ... -p/3498177 - или в клиенте инициализируете очередь, и ее ссылку передаете "серверу", а сервер уже посылает данные клиенту.
Для :labview: > 2017 можно использовать даже каналы - Channels.
Мы делили апельсин - много наших полегло...
dakishi
assistant
assistant
Сообщения: 120
Зарегистрирован: 05 сен 2019, 21:01
Версия LabVIEW: 2019
Контактная информация:

Re: Способы связи клиента с удаленным Sub VI сервером

Сообщение dakishi »

Kosist писал(а):Можете использовать очередь с одинаковым именем - https://forums.ni.com/t5/Example-Progra ... -p/3498177 - или в клиенте инициализируете очередь, и ее ссылку передаете "серверу", а сервер уже посылает данные клиенту.
Для :labview: > 2017 можно использовать даже каналы - Channels.
Спасибо! Во втором способе с очередью, к сожалению, они почему то последовательно работают - как можно это исправить ?
По каналам можете ссылку какую нибудь дать ?
Аватара пользователя
Kosist

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

Re: Способы связи клиента с удаленным Sub VI сервером

Сообщение Kosist »

Каналы - http://www.ni.com/product-documentation/53423/en/.
А по поводу очередей - можете показать код? Они должны бы работать паралельно...
Мы делили апельсин - много наших полегло...
dakishi
assistant
assistant
Сообщения: 120
Зарегистрирован: 05 сен 2019, 21:01
Версия LabVIEW: 2019
Контактная информация:

Re: Способы связи клиента с удаленным Sub VI сервером

Сообщение dakishi »

12ce52c55a7352ee933f1a42a6a94bed-full.jpg
Появляется сначала то, что делает сервер, а потом вся очередь считывается в клиенте. Я надеялся на то, что в то время как на сервере будут генерироваться элементы, из очереди у клиента (с возвратом назад, конечно, чтобы это могли использовать другие) будут считываться данные - теперь же всё стало еще более непонятно, ведь возврат элемента назад есть, но при этом при "последовательной" работе приборов считывается не последний элемент очереди Sample-раз, а вся очередь от начала до конца почему то.

Попробовал перенести все на одну блок диаграмму - работает одновременно, но клиент снимает весьма искаженную синусоиду - почему, тоже не могу понять. Notifier - решает проблему,конечно, но от этого яснее не становится, ведь очереди, как я понимаю, должны давать синхронизацию и это работает, например, если делать машину состояний с event структурой.
Аватара пользователя
Kosist

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

Re: Способы связи клиента с удаленным Sub VI сервером

Сообщение Kosist »

А зачем Вы в клиенте записываете данные снова в очередь? Это неправильно. Вы получили данные, потом их снова записали в очередь; снова прочитали и снова записали, и т.д. и т.п. :nono:
Сервер отсылает данные при помощи Enqueue Element. В том цикле есть задержка, это хорошо. Принимающий цикл - клиент - должен иметь только Dequeue Element - задержка не нужна, т.к. он будет тактироваться высылающим циклом. Данные есть в очереди - Dequeue Element их считывает; данных нету - ждет (при условии что Timeout = -1).
А Notifier - у него нет буфера. Очередь тем и хороша, что данные не теряются, а записываются в FIFO (first input, first output) буфер.
Upd: а если Вы хотите высылать данные многим клиентам одновременно, то тогда нужно это делать при помощи User Events. Т.к. они имеют буфер, и multiple writers/multiple readers. Очередь же может иметь лишь одного получателя.
Мы делили апельсин - много наших полегло...
dakishi
assistant
assistant
Сообщения: 120
Зарегистрирован: 05 сен 2019, 21:01
Версия LabVIEW: 2019
Контактная информация:

Re: Способы связи клиента с удаленным Sub VI сервером

Сообщение dakishi »

Kosist писал(а):А зачем Вы в клиенте записываете данные снова в очередь? Это неправильно. Вы получили данные, потом их снова записали в очередь; снова прочитали и снова записали, и т.д. и т.п. :nono:
Сервер отсылает данные при помощи Enqueue Element. В том цикле есть задержка, это хорошо. Принимающий цикл - клиент - должен иметь только Dequeue Element - задержка не нужна, т.к. он будет тактироваться высылающим циклом. Данные есть в очереди - Dequeue Element их считывает; данных нету - ждет (при условии что Timeout = -1).
А Notifier - у него нет буфера. Очередь тем и хороша, что данные не теряются, а записываются в FIFO (first input, first output) буфер.
Всё равно последовательно работает...
Вложения
Problem 1.1.JPG
Последний раз редактировалось dakishi 02 ноя 2019, 14:03, всего редактировалось 1 раз.
Аватара пользователя
dadreamer

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

Re: Способы связи клиента с удаленным Sub VI сервером

Сообщение dadreamer »

dakishi писал(а):Всё равно последовательно работает...
Насколько я понимаю, требующееся вам поведение реализуется с помощью параллельных циклов. Шаблон "Производитель - Потребитель" хорошо сюда подойдёт. В одном цикле (While) крутится код т.н. сервера, в другом - код клиента. По какой-либо внешней команде (например, нажатие кнопки) сервер начинает писать в очередь, а клиент - читать оттуда (или же клиент может читать постоянно). Тогда будет одновременная параллельная работа.

На форуме много информации об этом, например см. мой пост: http://www.labviewportal.org/viewtopic. ... 992#p78992
dakishi
assistant
assistant
Сообщения: 120
Зарегистрирован: 05 сен 2019, 21:01
Версия LabVIEW: 2019
Контактная информация:

Re: Способы связи клиента с удаленным Sub VI сервером

Сообщение dakishi »

dadreamer писал(а):
dakishi писал(а):Всё равно последовательно работает...
Насколько я понимаю, требующееся вам поведение реализуется с помощью параллельных циклов. Шаблон "Производитель - Потребитель" хорошо сюда подойдёт. В одном цикле (While) крутится код т.н. сервера, в другом - код клиента. По какой-либо внешней команде (например, нажатие кнопки) сервер начинает писать в очередь, а клиент - читать оттуда (или же клиент может читать постоянно). Тогда будет одновременная параллельная работа.

На форуме много информации об этом, например см. мой пост: http://www.labviewportal.org/viewtopic. ... 992#p78992
В таком шаблоне, как я понял, у нас все находится на одной блок диаграмме - я же хочу сделать так, чтобы сервером был отдельно вызываемый подприбор.
Аватара пользователя
dadreamer

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

Re: Способы связи клиента с удаленным Sub VI сервером

Сообщение dadreamer »

А что мешает цикл поместить внутрь SubVI?
dakishi
assistant
assistant
Сообщения: 120
Зарегистрирован: 05 сен 2019, 21:01
Версия LabVIEW: 2019
Контактная информация:

Re: Способы связи клиента с удаленным Sub VI сервером

Сообщение dakishi »

dadreamer писал(а):А что мешает цикл поместить внутрь SubVI?
Так у меня он и сидит там - вывод очереди из subVI идет на параллельный цикл клиента, но, работа последовательная. Если перетащить из SubVI на блок диаграмму - все параллельно работает.
Аватара пользователя
dadreamer

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

Re: Способы связи клиента с удаленным Sub VI сервером

Сообщение dadreamer »

 
Вложения
Main.vi
lv2016
(12.98 КБ) 106 скачиваний
SubVI.vi
lv2016
(16.86 КБ) 101 скачивание
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»