Погрешность измерения времени появления дискретных сигналов

Добрый день! Имеется контроллер Wiren board 6 (м6.7.2E), к которому подключены боковые модули ввода дискретных сигналов WBIO-DI-HVD-16 и WBIO-DI-WD-14. Требуется измерять длительность сигнала на одном из входов и время между появлениями сигналов на двух входах. Подскажите с какой погрешностью можно проводить такие измерения использую MQTT/Python?

Добрый день.
Довольно интересный вопрос. Тут, пожалуй даже не в погрешности измерения дело а втом что эта погрешность будет плавать, от нагрузки на CPU процессора, например. Какая точность нужна?

Нужна точность +/- 0,01 с. Предполагается, что на контроллере будет крутиться небольшой скрипт, который будет измерять это время и отправлять эти данные и показания электросчетчика на сервер (период опроса WB-MAP3E 1 секунда)

Подписываюсь.
Реалтайма на WB мне здорово не хватает! Если архитектурно это возможно (сомневаюсь), то можно избежать толики зоопарка, не покупая дополнительное железо.

В этой теме коллеги писали про похожую задачу.
Актуальные версии wb-mqtt-gpio получают события от портов с высокой точностью по времени, но в MQTT оно не пересылается. Ориентироваться на время публикации в MQTT не стоит, т.к. там непредсказуемые задержки.
С боковыми модулями на текущем ядре есть баг c получением событий, не во всех сценариях использования можно получить адекватное время. Мы планируем переход на новое ядро, где этот баг исправлен.
Чтобы полностью решить вашу задачу сейчас, можно:

  1. Использовать A1-A4 и самостоятельно модифицировать wb-mqtt-gpio, код открыт.
  2. Использовать внешнее устройство, которое будет измерять времена и передавать в WB.

Кстати - да. Та же ардуинка воткнутая своим штатным USB в порт контроллера и присылающая строку с количеством тиков таймера между “Появился уровень на входе - начало отсчета” и “появился на втором входе - конец отсчета” будет отличным решением. а в контроллере - bash скрипт который при получении строки - публикует в топик. Пимеров много.

Городьба. Ну, в смысле, корпусню под нее искать, входы дуракоустойчивые приделывать.
Может, в стандартном пристяжном модуле, вместо тупого мультиплексора, какую недорогую stm32 растащить, да и выпустить реалтаймовую надстройку к системе? Было бы, наверное, круто.

А так-то приколхозить много чего можно, можно вообще нанопi нео трехбаксовый вместо wb6 заюзать, пользуясь вашей добротой в плане открытости софта. :slight_smile:

Именно для измерения? Ну, в общем сделать-можно. Выходов на 8, каждый выход сделать настраиваемым либо PWM выходом либо входом… Вот будет ли пользоваться спросом?

То же самое: добавить трансиверы, плату, клеммники, корпус, контроль и преобразователи питания, RTC. Получится WB :slight_smile:

https://aliexpress.ru/item/4000909410480.html
Они где-то есть задешево? Себе бы купил.

Я бы рискнул, затраты с моей кочки зрения невелики. Зато сразу можно будет делать мгновенные/текущие значения с расходомеров, тикеры/таймеры/ШИМ без запарки для ЦП, запиливать местные реалтаймовые стейт-машинки, мням. :slight_smile:

Фигасе они подорожали. Брал коробку по 3.50уе прямо на friendlyarm, доедаю уже. Одолжить экземплярчик?

Хм. Так можно пойти дальше - добавить, например, bootloader в STM с возможностью прошивки по i2c, библиотеку “связи” (i2c конфигурация плюс кольцевой буфер или два) выложить… Хм, пишу и вижу что аудитория с каждым словом уменьшается и желающих вникать в make "LDFLAGS=$(MCU) -specs=rdimon.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections" "LIBS=-lc -lm -lrdimon" "OPT=-Og -DDEBUG" all практически нету.

1 лайк

Ну в mwac нечто отдаленно похожее есть же уже.

А вообще реалтайм могучая конкуретная фича, убедился на себе.

Честно говоря - вот так навскидку, не могу себе представить где надо…

Котельную давно заводили? :stuck_out_tongue_winking_eye:

Сам, настоящую, большую - практически никогда…
Ага. То есть - ниша есть. Значит добавлю в планы.

1 лайк

Спасибо!
Т.е., например, можно модифицировать модуль wb-mqtt-gpio таким образом, чтобы как описано в статье
https://wirenboard.com/wiki/Using_Wiren_Board_with_pulsed_output_devices
вместо A1_IN_total считалось общее количество импульсов пришедших на вход A1,
а вместо A1_IN_current считалось время от предыдущего импульса до текущего?
Я так понимаю общее количество импульсов можно считать установив параметр “Number of pulses per unit” в единицу, а для подсчета периода нужно модифицировать код wb-mqtt-gpio?
Если есть возможность, не могли бы Вы подсказать как мне это реализовать по шагам, так как я
не имел подобного опыта. Возможно, этот кейс пригодится и другим коллегам и можно было бы добавить его в новую версию модуля.