Сбор и просмотр данных от многих клиентов

Простейшие вопросы в области инженерной разработки
Ответить
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Сбор и просмотр данных от многих клиентов

Сообщение rushonda »

Добрый день!
Подскажите как реализовать: сервер асинхронно принимает данные от многих (50) клиентов (время и числовые данные) раз в секунду например.
Вопрос: где хранить данные и как в любой момент посмотреть данные от любого клиента?

Пока думаю так:
1) сделать subVI запустить ее 50 раз асинхронно и там в сдвиговом регистре хранить данные от клиентов.
2) сохранять в 50 файлов и оттуда если нужно подгружать.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: Сбор и просмотр данных от многих клиентов

Сообщение IvanLis »

rushonda писал(а): 06 май 2021, 16:18 Добрый день!
Подскажите как реализовать: сервер асинхронно принимает данные от многих (50) клиентов (время и числовые данные) раз в секунду например.
Вопрос: где хранить данные и как в любой момент посмотреть данные от любого клиента?

Пока думаю так:
1) сделать subVI запустить ее 50 раз асинхронно и там в сдвиговом регистре хранить данные от клиентов.
2) сохранять в 50 файлов и оттуда если нужно подгружать.
Зависит от объема хранимых данных, если Вы привысите допустимый объем ОЗУ, то программа зависнет.
Если подразумевается длительная работа, то лучше не хранить в памяти, а писать сразу в БД или TDMS, ну или отдельный файл на канал.
А уже от туда, дергать необходимые.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3402
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Сбор и просмотр данных от многих клиентов

Сообщение Artem.spb »

rushonda писал(а): 06 май 2021, 16:18 сервер асинхронно принимает данные от многих (50) клиентов (время и числовые данные) раз в секунду например.
1) сделать subVI запустить ее 50 раз асинхронно и там в сдвиговом регистре хранить данные от клиентов.
Как он их принимает? На каждого клиента своё соединение? Это обычная сеть Ethernet?
Возможно, и не придётся запускать 50 клонов.
В примерах есть TCP Multiple Connections.lvproj, там соединения хранятся в массиве и просто последовательно перебираются. Для скорости 1Гц вполне достаточно.
Вопрос: где хранить данные и как в любой момент посмотреть данные от любого клиента?
2) сохранять в 50 файлов и оттуда если нужно подгружать.
Как верно сказал Иван, зависит от объёмов и задачи. Если нужно иметь доступ асинхронный доступ к одному текущему значению, то проще кидать всё в глобальную переменную. тогда любое количество "клиентов" сможет в любой момент получить значение желаемого "канала".
Если же нужна история, то тут снова варианты. Как вы планируете дёргать данные из сдвиговых регистров ваших клонов? Или тех же файлов?
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: Сбор и просмотр данных от многих клиентов

Сообщение rushonda »

50-100 клиентов со скоростью 1Гц, именно через TCP Multiple Connections.lvproj - пока все в одном массиве крутится - т.е. массив каждый раз увеличивается. Данные соответственно из массива можно дергать. Данные только за день - хранить не обязательно. Данные, которые за секунду приходят: время, и еще пара числовых параметров.
Не сильно ли тут нагружается комп, как обычно такое организуется правильно?
И что будет, если частоту до 10 Гц увеличить?

p.s. Видимо пока можно обойтись без клонов.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: Сбор и просмотр данных от многих клиентов

Сообщение IvanLis »

rushonda писал(а): 08 май 2021, 14:38 Не сильно ли тут нагружается комп, как обычно такое организуется правильно?
И что будет, если частоту до 10 Гц увеличить?
Проведите форсированные испытания и посмотрите.
А так, арифметика простая
Каждая порция данных 2*DBL + TimeStamp = 2*8+16 = 32 Byte. Ecли время преобразовать в DBL, то 24 Byte.
От 100 клиентов в секунду (1Гц) 32000 Byte
Сутки 32*100*86400=276480000 Byte или примерно 264 MByte.
В этом случае, я думаю современный компьютер справится без проблем.
Если 10Гц, то это получится уже 2.6 GByte, это уже многовато.

Но тут вопрос в другом, готовы ли Вы потерять данные накопленные за 23.5 часа работы в результате сбоя OS или скачка электричества?
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: Сбор и просмотр данных от многих клиентов

Сообщение rushonda »

Но тут вопрос в другом, готовы ли Вы потерять данные накопленные за 23.5 часа работы в результате сбоя OS или скачка электричества?
Желательно в файл конечно писать, но 100 файлов плодить как-то не вариант. Если бы данные шли синхронно, можно было бы в двумерный массив добавлять на каждой итерации строку и писать в один файл...
Аватара пользователя
Kosist

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

Re: Сбор и просмотр данных от многих клиентов

Сообщение Kosist »

Записывайте данные в базу данных. Можно использовать SQLite даже. А если нужно их прочитать - то тоже без проблем. А держать в памяти, в массиве данные за сутки - это костыли. В памяти можно держать только лишь небольшой буффер данных (потому что, например, писать в базу/файл каждую секунду тоже так себе решение, нужно выгружать данные реже, напр., каждую минуту или больше).
Мы делили апельсин - много наших полегло...
ujin1
adviser
adviser
Сообщения: 231
Зарегистрирован: 06 ноя 2020, 15:37
Версия LabVIEW: 19
Благодарил (а): 18 раз
Поблагодарили: 37 раз
Контактная информация:

Re: Сбор и просмотр данных от многих клиентов

Сообщение ujin1 »

rushonda писал(а): 06 май 2021, 16:18 Добрый день!
Подскажите как реализовать: сервер асинхронно принимает данные от многих (50) клиентов (время и числовые данные) раз в секунду например.
Вопрос: где хранить данные и как в любой момент посмотреть данные от любого клиента?

Пока думаю так:
1) сделать subVI запустить ее 50 раз асинхронно и там в сдвиговом регистре хранить данные от клиентов.
2) сохранять в 50 файлов и оттуда если нужно подгружать.
Время в каком формате с какой точностью. Если с точностью до секунды, время можно принять одно для всех клиентов.
Если выборка 100 мс и точность фиксации времени 100 мс также можно сделать одно время на всех.
Если будут разные времена на графике разные значения еще будет видно, а выборка и другие операции уже становятся проблематичными.
А в остальном как уже было сказано возможны любые варианты на Ваш выбор.
Изображение
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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