Новый функционал, поддержка Меркурий230 и другое

Сегодня я реализовал новую библиотеку устройства - электросчетчика Меркурий230 от компании Инкотекс.

К сожалению у меня нет под рукой этого счетчика, поэтому код писал вслепую.
Необходима проверка на работоспособность.
А еще лучше временно дать мне доступ по TCP к этому девайсу.
Библиотека безвредна, хоть и написана вслепую.
В крайнем случае просто не пройдет опрос.

Кроме этого пофиксены мелкие и не очень баги контроллера и выложена новая версия с новыми библиотеками устройств.

Так-же в библиотеке основного протокола временно отключено сжатие, так как в алгоритме есть ошибка приводящая в некоторых случаях к временной потери соединения.
Ну и до кучи исправлены мелкие недочеты которые затронули сервер, клиент и контроллер.
Новые версии последних двух выложены на сервер.

http://5277.ru/distr/client/0.36/
http://5277.ru/distr/controller/0.7.7/

Приморский старт

Есть такая партия программа - Программа поддержки молодых проектов "Приморский старт".

Мой проект был на ней показан, даже дошли до 3-го этапа, но не прошли в финал.

Я и не надеялся на успех ввиду своего мировозрения.
И все бы ничего, но меня смущает одна вещь.

Открываем сайт https://primstart.rutechpark.ru/ и ознакамливаемся с целью программы:

Приморский край богат не только природными, но и человеческими ресурсами. За последние годы мы познакомились с многими талантливыми предпринимателями Приморья, которые проводят собственные научные исследования, находят нестандартные решения стандартных проблем, создают новые продукты и технологии, способные сделать жизнь Приморцев комфортнее, безопаснее, ярче. К сожалению, на этапе разработки у многих проектов возникают проблемы с финансированием, так как очень сложно совмещать сложную исследовательскую работу и заработок. Целью программы «Приморский старт» является поддержка молодых инновационных проектов Приморья, находящихся на начальной стадии развития, но имеющих потенциал к коммерциализации.

Обращаем внимание на выделенное.

Мне одному кажется, что здесь речь о стартапах?
Т.е. о проектах которые еще не приносят доход и нуждаются в финансировании для последующей коммерциализации.

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

Update. А вот сслыка на новостной ресурс (на основном забыли разместить список победителей) https://www.primorsky.ru/news/227945/

Цитирую: Так, например, конструктор сайтов с искусственным интеллектом «Айгер» помогает приводить клиентов из интернета предпринимателям, которые не имеют навыков интернет-маркетинга и не умеют проектировать продающие сайты.

Как вам победитель?
Как я услышал,  у него все хорошо, есть хорошая прибыль (на волне короновируса), есть конструктор сайтов (которых и так уже десятки), но с ИИ (правда в будущем, правда не ИИ а всего лишь матрица)

Ответы на вопросы

Уважаемый vladikoms задал мне несколько вопросов, отвечаю на них здесь.

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

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

И да, как говорил ранее, проект в разработке, заинтересованные по сути также являются тестировщиками (почти первопроходцами). Учитывайте это.
Я лишь могу пообещать, что доработку и багфикс буду вести максимально серьезно, как самому себе (что по сути так и есть).
Т.е. не стоит применять систему без дополнительной защиты. Вообще нигде не стоит опираться на логическую часть, всегда нужно подстраховываться аппаратной защитой (даже в якобы надежных решениях).

Теперь вопросы:
1. Имеется ли подробная инструкция как всё запустить и настроить?

  Имеется несколько видеороликов на ютуб и статей в моем ЖЖ:
https://5277.livejournal.com/24482.html
https://5277.livejournal.com/23897.html
https://5277.livejournal.com/24066.html
https://5277.livejournal.com/23690.html

  Есть пара статей о сценариях:
https://5277.livejournal.com/26013.html
https://5277.livejournal.com/31432.html

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

2. Как понимаю, в настоящее время облачный контроллер не функционирует?
  Даже и не знаю (причина описана выше, не востребовано),  функционал был написан, оттестирован и забыт. Возникнет проблема - просто нужен фидбек - починю.

3. Хотелось бы иметь возможность подключать к системе и опрашивать сторонние устройства по RS485. Насколько сложно самому написать такую библиотеку, при условии что протокол обмена является открытым? Например, для простого однофазного счетчика Меркурий 206.

Вот, в качестве примера:
Температурный датчик Lumel p18
http://5277.ru/distr/other/src/x0005x0001_lumelsa_p18.java
Электросчетчик СЭБ-2А
http://5277.ru/distr/other/src/x0004x0001_frunze_seb2a.java

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

Класс библиотеки устройства должен быть наследован из абстрактных классов библиотеки интерфейсов http://5277.ru/distr/interfaces_lib/c5277_interfaces.jar, в ней-же есть примеры.

По поводу написания библиотеки самому - идея не доведена до ума.
Главная проблема в том, что многие параметры устройства и его показания задаются в БД и в выше обозначенной библиотеки.
Т.е. стороннему разработчику как-то нужно объяснить системе какие параметры и показания есть у устройства.
Этот вопрос на данный момент не решен.

Но есть другой вариант взаимодействия - я готов на бесплатных началах реализовывать библиотеки устройств (конечно если они не супер сложные, над которыми придется убить далеко ни один день типа как ВКТ-7) .
Мне нужно описание протокола и/или доступ к нему (например через TCP/IP с преобразователем в RS485). А еще будет полезен рабочий пример или дамп.
Какую-то информации я смогу найти сам.
Иногда будет достаточно просто просьбы.

И это будет и мне плюсом, так как чем больше устройств в проекте - тем он привлекательней.

Еще, можно обратиться ко мне с описанием параметров и показаний устройства, я их добавлю в систему и тогда можно будет самому писать библиотеку. Но я оставляю за собой право инспекции и правок перед распространением этой библиотеки.

И потом, при разработке библиотеки кем-то со стороны не решается вопрос ее распространения.

5277, варианты подключения группы устройств

Буду говорить об элементарном, но вдруг кому-то будет интересно.

Я запилил небольшую блок-схему:



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

Соединение между ними может быть любое, главное, чтобы на объекте и центре были узлы связи поддерживающие данную технологию.
Электросчетчики выбраны с шиной RS485, хотя это тоже не принципиально.

Рассмотрю узел связи:
Устройство, обеспечивающее связь может быть любым, главное, чтобы оно имело интерфейс шины RS485 (либо любой другой, который можно преобразовать в RS485). На моей практике это почти всегда был GSM модем с интерфейсом RS485.
Но никто не мешает взять скажем модуль LoraWAN с UART интерфейсом и подключить к нему что-то простое, типа драйвера MAX485 с небольшой обвязкой задающей режим приема/передачи. Никакой дополнительной логики в виде МК здесь не нужно.

Центр:
Здесь тоже узел связи, при этом с контроллером он может соединяться как угодно UART,RS485, RS232, Ethernet, Wi-Fi и прочее.
Остается подобрать ПО, которое будет выполнять необходимые задачи. Среди которых должен быть опрос по определенному протоколу счетчиков.
ПО можно взять мое.

Также я предлагаю решение, где контроллер находится в облаке.
Т.е. в центре вообще не нужно будет что-либо разворачивать, просто установить клиент.

Более того, у меня есть недорогие наработки модулей - преобразователей с логикой.
Основное их преимущество - можно менять настройки исходящего интерфейса налету.
Это может быть востребовано, если скажем к Вашей шине RS485 подключены устройства с разными параметрами UART (например baudrate)

Мне совершенно не сложно, на начальном этапе, запилить поддержку того-же электросчетчика 'Меркурий' (тем более, что есть большой опыт), были бы желающие пользоваться моим проектом.

Update: Вот, кстати список поддерживаемых методов в моем предыдущем коммерческом решении как раз для Меркурий 230.



К сожалению я не имею права распространять этот код, но реализовать новую библиотеку для текущего проекта - могу.

В этом же проекте лежат библиотеки устройств (латинские названия) с парктически полным функционалом.
Некоторый функционал был реализован только благодаря реверс-инжинирингу.

CAS_5010A,
P18,
PSCH_3ART.07.xxx
PSCH_3ART.07.xxx.1,
PSCH_3ART.07.xxx.2,
Pulsar,
SEB_2A.07.xxx.x,
SET_4TM,
SET_4TM_03M_01,
TEM104,
VKT5,
VKT7.

core5277

Еще раз, что такое #core5277:

Это моя разработка на ассемблере #AVRA для микроконтроллеров компании #Atmel.
В процессе разработки я использую микроконтроллер ATmega328, он часто используется в #Arduino.
Соответственно поддерживаются микроконтроллеры ATMega48/88/168 так как отличаются от ATmega328 только объемами памяти. Кроме этого, на данный момент, я поддерживаю (хоть и не всегда актуализирую их файлы) ATMega16,ATmeag8,ATtiny45/85. Также планирую ввести поддержку линейки микроконтроллеров AT90CAN32

А разрабатываю я ядро, по сути операционную систему, для данных МК.
Вот часть реализованного функционала:
- параллельное выполнение нескольких задач (вытесняющий режим),
- простой режим переключения задач (задача вызывает SUSPEND для передачи управления следующей),
- драйвера (1wire, i2c, uart, ds18b20, am2301, beeper и прочее),
- логирование в порт,
- динамическое выделение памяти,
- контрольные суммы, некоторая математика, преобразование данных,
- программные таймеры,
- смена обработчиков прерываний налету,
- унифицированная логика работы с портами ввода/вывода

Для применения проекта я рекомендую использовать Linux+Geany+AVRA+avrdude, хотя теперь можно использовать и Windows+Atmel Studio7.

Этот проект, как и проект 5277, по большему счету, является моим хобби.
Тем не менее я вижу в нем ценность для других разработчиков.

Сейчас практически все современные разработчики ПО под микроконтроллеры пишут на #Си. Существует также ряд операционных систем для микроконтроллеров, также написанных на Си. Но я не нашел ни одной ОС на ассемблере.
При этом, разработка проекта на ассемблере дает неоспоримое преимущество в вопросах требований к ресурсам МК.
Да, это не особо актуально, в виду цен на STM чипы. Тем не менее, для поклонников AVR это будет интересно.

При написании ядра я уделяю особое внимание некоторой унификации.
Например работа с портами(независимо от типа МК) выглядит следующим образом:
LDI ACCUM,PD4
  MCALL CORE5277_PORT_MODE_OUT
  MCALL CORE5277_PORT_SET_LO


Введены программные таймеры, можно налету менять таблицу прерываний.
Вызов процедур(драйверов) тоже унифицирован, вот например коммуникация с устройством через шину i2c:
LDD TEMP,Z+_DRV_MLX90614_I2C_DRV
  LDI YH,high(_DRV_MLX90614_DATAPCKET)|0x80
  LDI YL,low(_DRV_MLX90614_DATAPCKET)
  MOV XH,ZH
  MOV XL,ZL
  LDI TEMP_H,_DRV_MLX90614_SEND_LEN
  LDI TEMP_L,_DRV_MLX90614_RECV_LEN
  LDI ACCUM,_DRV_MLX90614_I2C_ADDR
  MCALL CORE5277_EXEC


Или вызов процедуры проигрывания мелодии:
LDI TEMP,PID_BEEPER_DRV
  LDI YH,high(TSK_BEEPER_DATA)|0x80
  LDI YL,low(TSK_BEEPER_DATA)
  MCALL CORE5277_EXEC


Т.е. разработка сильно упрощается благодаря многопоточности, управлению памятью, драйверам, наработанным процедурам и унификации. По большему счету, этот проект позволяет значительно экономить трудозатраты на разработку прошивки, сделать этот процесс близким по трудозатратам к разработке на Arduino.
Если, по какой-то причине, разработчик вынужден вести проект для вышеописанных микроконтроллеров и его заботит ресурсоемкость, то ему однозначно стоит обратить на этот проект внимание.
Ну и не забываем про обучение, думаю для начинающего это будет не плохое подспорье.


И да, я выложил новую версию:

19.09.2020 v0.2.6
1. Скорректирован драйвер аппаратного UART
2. Идентификация программных таймеров начинается с 0x00
3. Добавлен пример работы с UART

http://5277.ru/distr/core5277/core5277.tar.gz

core5277, новая версия

Новая версия 0.2.5

1. Скорректирован драйвер DS1990A
2. Добавлена дополнительная проверка на присутствие датчика в драйвере 1WIRE
3. Восстанавливаем регистр Y в процедуре io/log_bytes.inc
4. Добавлены процедуры чтения и записи байта/блока в EEPROM
5. Добавлен проект для Atmel Studio 7 ./inc/examples/aqua_module/
6. Переименована процедура rom_to_ram_copy8.inc в rom_read_bytes.inc
7. Дополнены файлы микроконтроллеров ./inc/devices/
8. В процессе драйвер mlx90614

Главное - теперь проект можно открыть в Atmel Studio и он даже соберется.
Но все-же, я считаю, тру подход - linux+geany+avra+avrdude

Может быть на выходных запилю небольшую инструкцию для новичков.

http://5277.ru/distr/core5277/core5277.tar.gz

Оффтоп, щютка, C#

Директива #region позволяет указать блок кода, который можно разворачивать и сворачивать с помощью функции структурирования в редакторе кода.

В современном мире разработчиков (в данном случае это C#) нельзя отстроить код, если Вы забыли в конце блока написать #endregion.
И плевать, что это не имеет и малейшего отношения к процессу компиляции.



Что еще нужно знать о современной разработке ПО?

core5277, новая версия

Новая версия 0.2.3

После многочисленных крупных изменений, наконец-то, починил многопоточность.

1. Корректная реализация опций процесса CORE5277_PROCID_OPT_NOSUSP и т.п.
2. В разработке принудительный вывоз SUSPEND задачи после снятия длительной блокировки диспетчера
3. Восстановлена корректная периодичность отработки диспетчера(каждые 2мс)
4. Исправлены циклы перебора задач с учетом 0x00 ид задачи
5. Значительно изменена логика работы диспетчера(решено несколько проблем)
6. Добавлена процедура логирования стека задачи
7. Убран вывод не используемых ид задач в дампе задач
8. Добавлена задача мигания светодиодов
9. В целом восстановлена работа многопоточности(простой режим переключения задач, и вытесняющая многозадачность)

http://5277.ru/distr/core5277/core5277.tar.gz