Category: it

Category was added automatically. Read all entries about "it".

  • dz

MQTT/UDP Revisited

С наступающим, коллеги.

Я вернулся к теме MQTT/UDP.

Первый пост со срачем тут: https://ru-radio-electr.livejournal.com/1468452.html
Пост на Хабр чуть подробнее тут: https://habr.com/post/429714/

С прошлого раза есть вот какой прогресс:

Главное - я написал (правда, пока send only) реализацию для ПЛК. Тестировалось на ОВЕН ПЛК110.60 М2. Точнее, тестируется непрерывно. Когда я понял, что язык ST это почти Паскаль, снизошло просветление и понимание, что в языке есть указатели. С ними удалось прорваться. :)

Второе - теперь есть реализация на Lua. Удалось, наконец, установить на одну из машин Lua с работающим UDP. Остальное банально. :) Теперь бы надо эту Lua версию перегнать на NodeMCU, кажется, на нём сетевой стек какой-то сумчатый, придётся наверняка что-то переделать. Но пока до этого руки не дошли.

Третье - версию под Питон я портанул на Питон 3, который вовсе не то же самое, что Питон 2. :)

Ну и, наконец, я привёл в порядок программу Traffic Viewer, с её помощью можно наблюдать, что бегает в сети в формате MQTT/UDP. А поскольку она Явская, она работает и под Линуксом, и под Мак ОС. Как-то так это выглядит:

2018-12-28_00-37-06

В планах на ближайшее время сделать коннектор для трансляции в OpenHAB. Сейчас это можно делать через классический MQTT, но хочется уметь без него обходиться, тем более, что это и несложно.

Репозиторий на https://github.com/dzavalishin/mqtt_udp

Напомню, что это самый простой в мире протокол для обмена регулярными данными (опрос датчиков) с реализациями на Java, Python 2/3, Lua, C, CodeSys ST.

Если кому окажется полезным, буду рад.
поумнеть

опять кварцы

если к фпга подключить 100МГц при 0.2ппм кварц, и внутренним (в фпга) плл делать, например, 65МГц, то будут те же 0.2пп после прогрева, или заметно хуже?

или, лучше взять 54МГц кварц с теми же заявленными 0.1ппм, исключить ПЛЛ и получить лучшую точность (меньше джиттер, но и частота ниже) при снятии семплов с АЦП?

железка будет в жилом помещении, после этак 10-50 минут прогрева, интересен уход и скачкИ за время измерения (меньше минуты), уход между измерениями не волнует.

для ориентира, ссылка на ебай на кварц:
https www ebay com itm/100MHZ-hifi-TCXO-0-1ppm-Ultra-precision-Golden-Oscillator-CLOCK-power-supply/142823823416?hash=item2140f69838:g:9OkAAOSwRRZbF9Nr:rk:4:pf:0

рядом есть 54МГц, 65МГц нет.
поумнеть

stm32f4, выдача пачки импульсов

что-то я туплю.

есть проектик, пока что макет на stm32f4discovery. потом будет тот же камень ,но с более вменяемым обвязом. точнее, пачка похожих проектиков.
и вот понадобилось мне странное - выдать заданное количество импульсов заданной длительности с заданными интервалами.
точнее, импульсы можно тупо по 1мкс фиксированно, их число влезает в 15 бит а число заведомо влезает в 30 бит.

на данный момент плотно подсел на opencm3, что в комплекте с "-flto всегда и везде, и в либах и в проекте" даёт хороший запас и по производительности и по памяти.

а сегодня-и-впятницу внезапно застрял. протратил уже 17ч рабочего времени на вроде бы ерунду. явно где-то совсем детская ошибка (типа обращения к незатактованной гпио ножке).

но, вдруг кто уже делал такое - поделитесь кодом под "opencm" или с прямой работой с регистрами, но только не в ублюдочной парадигме заполнения простыней-структур и передаче их библиотечным суперфункциям.

нужно вроде бы несложное -- выдать пачку "тактирующих" импульсов, тупо одинаковых, на 1-4 ноги. импульс, например, 1мкс, пауза - например от 1 до 8к мкс, число импульсов в пачке задается менее чем 30-битным, а скорее даже менее чем 15 битным числом.

хотелось бы рабочий пример, ибо есть легкое подозрение что и железо у меня чуток битое.
  • 007_and

Обработка не очень больших данных

Добрый вечер. Нужен хороший совет.

Есть задача - отслеживать стабильность датчиков в ходе технологических операций. Определяется ряд контрольных параметров: ноль, диапазон, нелинейность, гистерезис и т.п. Их надо запомнить и построить графики с ограничениями (годен брак), нарисовать тренд (по нему судим стабильный прибор или нет) и все это хранить в базе данных (csv или sql файлы) для дополнительного анализа и отчетов, возможно даже автоматических :)

Конечно можно написать какую-то прогу на питоне или скрипт в libreoffice, но наверняка это будет некачественное повторение уже кем-то сделанного и лежащего где-то на гитхабе.
Поэтому вопрос, может ли кто посоветовать готовый пример или free софт для решения подобной задачи. Также буду благодарен за книжку букварь по несложному анализу данных на питоне.
Ээээ
  • juray

Кто-нибудь реализовывал AVR444?

Дошли в кои-то веки руки поковырять управление бесколлекторником.

Пытаюсь вкурить "классический" аппноут AVR444, но что-то не могу понять момент перехода от "слепой" раскрутки к работе по прерываниям. По отдельности раскрутку и рабочий цикл - уяснил, а вот между ними...

Что я понял из кода к аппноуту:

Изначально на этапе "слепой" раскрутки все таймерные прерывания отключены, таймер 0 гонит ШИМ аппаратно на ногу OC0B,
задержки коммутации - на опросе флага переполнения таймера 1.
После раскрутки разрешается прерывание OCIE1A, что и должно обеспечить переход к рабочему циклу (в котором прерывания по очереди разрешают друг друга):
 TCNT1 = 0;
 TIMSK1 = (1 << OCIE1A);


Но вот в чём странность - в OCR1A при этом ничего не пишется. Единственное место, где происходит запись в этот регистр - это прерывание переполнения таймера 0 (а оно на данный момент ещё запрещено).

Если ориентироваться на дефолтное значение после сброса (то есть ноль), тогда получается, что прерывание сработает только при следующем переполнении таймера 1 (и симуляция это подтвердила), но это ведь аж 65 мс (в то время как межкоммутационные интервалы при слепой раскрутке - от начального 20 мс до финального 5,5 мс).

Вот и зудит вопрос: то ли в аппноуте косяк, то ли пауза после раскрутки - это так и должно быть? Под нагрузкой затормозиться же успеть может. А если я в своём коде "по мотивам" уберу эту паузу, вставлю инициализацию OCR1A на основании последнего интервала раскрутки - никаких внезапных граблей не прилетит?

И ведь не гуглится нихрена. Или я не знаю, какие ключевые слова использовать, чтобы нужное найти вместо мусорной кучи простых упоминаний. Судя по встреченным упоминаниям AVR444 - люди как-то его реализуют (причём, довольно массово) и ничего не упоминают про такой нюанс.
Лампа
  • dlinyj

Linux запись-чтение из СОМ-порт

Коллеги, существует тривиальная задача, есть железка на RS-485. Нужно кидать ей команду и получать ответ. Ответ приходит только на команду. Тривиальная и простая задача.
Столкнулся с проблемой, которая проявляется на разных компах и архитектурах, даже ядрах. В какой-то момент из СОМ-порта вычитываю только хвост посылки. Т.е. последние два байта. Ситуация повторяется не очень стабильно, фаза луны сменилась и снова работает.

Само чтение выглядит таким образом:



Вызывается таким образом:



Потери байтов идёт в самой нижней функции (read_com), я там накидал printf и непонятно куда терятся байты. На другой физической машине, подключённой к RS-485 обмен идёт корректно, посылка-приём. У человека под виндой тоже всё хорошо, но я вот уже неделю бьюсь. Может какие-то другие средства синхронизации есть?

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

UPD. Проблему нашёл следующим образом. Программа cutecom корректно работает с портом. А моя нет. И после конфигурирования программой cutecom - моя тоже начинала работать (ну это то, что я считал фазой луны). Посмотрел с помощью stty в чём разница моей конфигурации порта и программы cutecom и добавил в код следующие причуды:



После этого всё завелось. По сути завелось и работало корректно уже сразу после двух строк:
options.c_iflag |= IGNBRK;
options.c_lflag &= ~ISIG;

Я честно говоря так умаялся с этой задачей, что уж совсем глубоко вникать и экспериментировать какие же точно флаги повлияли - уже лениво.
Photo

nRF51822 разработки под вопрос

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

Возьмем простой пример. Хочется сделать на нем простой бекон :) Чтобы отдавал в advertising свой ID и состояние парочки цифровых и парочки аналоговых входов.

Имеется: Комп на винде. Редактор кода (свой, да хоть тот же FAR Manager или NPP), никаких особых IDE не хочется. Китайский ST-Link.
Надо: Что-то поставить, что-то настрoить, где-то подмазать, чтобы поехало.

Находил вроде бы подробные описания, довольно многочисленные, но они базировались на старых SDK, а с тех пор там что-то изменилось и теперь ничего друг к другу не подходит.

Подскажете?

ПС: И да, хочется все бесплатно :)
  • dz

MQTT/UDP

Привет.

В своих делах по умному дому захотел обеспечить все компоненты системы унифицированным транспортом. Поглядел на MQTT и остался почти доволен. Но - у меня возникли сомнения насчёт запихивания его в PLC, контроллеры на базе atmega8 и вообще, брокер показался мне избыточной сущностью, не нужной для задачи в целом.

И я спроектировал и реализовал самый простой и маленький IoT протокол на планете - MQTT/UDP. Требования к окружению у этого протокола фантастически минимальны - нужно уметь хотя бы только посылать только UDP пакеты. :)

Репозиторий тут - https://github.com/dzavalishin/mqtt_udp

Русский вводный текст тут - https://github.com/dzavalishin/mqtt_udp/blob/master/README.ru.md

Очевидные схемы применения (англ, сорри) тут - https://github.com/dzavalishin/mqtt_udp/blob/master/dox/Topologies.md

Написал :

  • реализации на Си, Яве, Питоне

  • скетч для ардуино с UDP/IP стеком, только на отправку пока

  • простой гейт-коннектор к классическому MQTT (обменивается апдейтами в обе стороны и глушит зацикливания)

  • программу для мониторинга данных в канале (бродкаст же, всё всем видно, мониторить легко)

Пока не осилил версию для Овен ПЛК, всё же этот их ST language - феерическое г на палке.

Буду рад, если кто-то применит в своих проектах. Повторюсь - проще протокола на планете, кажется, нет. :)

USB Mass Storage и несколько LUN [РЕШЕНО]

Проблема больше программная, нежели аппаратная, но мало ли.

Граждане, кто разбирался с USB MSC дальше и глубже, нежели чем просто запуск неких примеров, поставляемых вместе с библиотеками от вендора (типа CubeMX от STMicro)? Я не могу разрешить проблему с поддержкой нескольких накопителей на одном устройстве. Само устройство работает, первый LUN в винде работает и все они вместе работают в линуксе. Но я хочу, чтобы и в винде тоже были бы видны все накопители... может, нужен какой-то трюк, подсунуть ей что-то, выставить бит какой-нибудь хитрый в каком-нибудь поле какого-то дескриптора? Я не понимаю, что именно не нравится винде. Краткое описание злоключений Upd решил сам, а как именно -- описано здесь.
смена сезонов, часы

Вопрос про оформление







Скажите, пожалуйста, а в чём рисуют такую красоту?











В описании документа сказано "Microsoft Word", но это явно не он. Где такое можно нарисовать ?

В Visio?

Есть ли бесплатные альтернативы?