Система мониторинга и записи сигналов для Arduino и не только

Всем привет. Еще одна попытка сделать нормальную систему для отображения графика значений данных.  

Представляю свою разработку — ПО «SVisual» — мониторинг сигналов онлайн и запись архива на диск. Смотреть/записывать можно любые сигналы, не только с ардуино.

Сразу ролик для затравки


Идея начала витать лет 7 назад, когда еще занимался автоматизацией. Силы появились как в разработку на высоком ушел.

Проекту год с лишним. Писалось все по ходу дела и наличию времени, сначала монолит — сервер и только просмотр, потом архив, монитор… Так до ардуинки добрался.

Хотел копейку с этого дела поиметь сначала, но продвижение другая тема совсем, да и до продукта, за который не стыдно что-то брать, далеко. Поэтому решил сделать вклад в opensrc, чуть-чуть хотя бы рассчитаться.

ПО частично кросплатформенное — Windows и Linux (CentOS). Написано все на С++, визуализация на Qt. Интерфейс и мануал на русском. На английский начал переводить, да…

Система SVisual состоит из трех частей:

  • SVMonitor — графическое приложение для онлайн просмотра и записи архива;
  • SVViewer — графическое приложение для просмотра архива записей;
  • SVClient — пользовательская библиотека для отправки данных. Для ардуино скетч.

Немного сухого описания возможностей.

Возможности SVMonitor:


— подключение к МК по COM порту (usb для arduino), по сети Ethernet или Wi-Fi протокол TCP;
— опрос значений сигналов в реальном времени с частотой от 100 Гц (вниз, те 100 Гц — максимум, по умолчанию 10Гц), количество устройств и сигналов выбирается пользователем;
— допустимое количество сигналов для записи 2048, кол-во модулей 8 (при превышении ничего страшного не произойдет, будет только предупреждение, запас предусмотрен);
— вывод значений выбранных сигналов на экран монитора в реальном времени;
— запись архива сигналов на жесткий диск ПК;
— просмотр архива с помощью дополнительного ПО SVViewer;
— возможность установки оповещений о возникшем событии (триггеров), запуск пользовательского процесса при срабатывании триггера;
— добавление сигнала для просмотра/записи только клиентом, никаких дополнительные движений не требуются.

Архитектура ПО




Здесь в принципе думаю все понятно. Пару слов скажу.

Клиенты передают данные на монитор, монитор передает в сервер обработки данных (SVServer.dll). Сервер занимается буферизацией, записью на диск, обработкой триггеров — пользовательских меток. Внутри все асинхронно.

Данные на диск попадают каждые 10 минут, сжимаются с помощью zlib. Архивные файлы получаются в часах, по умолчанию 2 часа файл.

Сервер обработки данных может использоваться независимо от монитора, например, чисто как сервис для записи архива.

Пример для ардуино



#include <SVClient.h>
void setup() {

	bool ok = svisual::connectOfCOM("test");

}
int cnt = 0;
void loop() {

	svisual::addIntValue("dfv", cnt);

	++cnt;
	if (cnt > 10) cnt = 0;

	bool odd_cnt = cnt % 2;

        svisual::addBoolValue("bFW", odd_cnt );

        svisual::addBoolValue("bBW", !odd_cnt );

	delay(200);
}



В результате вы увидите:



ПО распространяется свободно, лицензия MIT.

Спасибо.

Комментарии 9

    0
    Как вариант: ставим в LabView дополнительные пакеты для Arduino и используем тогда стандартный и хороший набор инструментов для разного рода графиков на LW.
      +1
      Ну LabView как бы от 400$ в год и выше, а тут opensource и все такое…
        0
        Никто не спорит. Почему еще LW вспомнил — получаете готовую среду не только для графиков, но написания функционала. Пускай даже кодить без кода приходится :)
      0
      «Опрос значений сигналов в реальном времени с частотой от 100 Гц» и до сколько? Например, для той же Ардуино, если вы на ней демонстрируете.
      Я не понял зачем функции отдельные addIntValue и addBoolValue, когда можно использовать одно имя addValue, а аргументы будут int, bool, string и т.д.
        0
        От 100 Гц вниз имеется ввиду.
        То есть 100 Гц (цикл 10мс ) это максимум, на котором тестировалось.
        Тестировалось на сокетe Arduino atmega 2560, то есть ардуинка с модулем Ethernet.

        Какой максимум (мин цикл отправки) конкретная ардуинка потянет не скажу. При передаче по COM все хуже значительно (со стороны ардуино хуже, имеется ввиду).

        когда можно использовать одно имя

        C интерфейс.
        0
        if (cnt % 2) svisual::addBoolValue("bFW", true);     else svisual::addBoolValue("bFW ", false);
        
        if (!(cnt % 2)) svisual::addBoolValue("bBW", true);     else svisual::addBoolValue("bBW ", false);

        Условие у вас какое-то сложное…
        Не прощще так:
        ```bool odd_cnt = cnt % 2;
        svisual::addBoolValue("bFW", odd_cnt );
        svisual::addBoolValue("bBW", !odd_cnt );


          0
          добавил возможность экспорта данных в xlsx, json и txt
            0

            Рассматривали ли в качестве основы системы InfluxData? Мне кажется, что там есть всё, что Вам нужно, кроме сервиса для коммуникации с устройствами для получения с них измерений.

              +1
              Нет, на тот момент когда возникла потребность, выбор был между забиксом и прометеем. Но писать надо было не статистику по серверам, а программные параметры с высокой частотой,
              в итоге накидал решение за неделю свое, и оно выросло в то что сейчас перед вами.
              Сейчас сам им не пользуюсь, остался как пет-проект, который позволяет в форме оставаться.
              На нынешней работе забикс крутится, админ им рулит, пару раз просили записать кое-что… Вот так.
              Почитал про InfluxData, пишут что до наносекунд позволяет регистрировать, хранит не долго правда. Интересно, да.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое