Поиск

24 мая 2017 г.

Дистанционное снятие показаний электросчетчика, часть 2

Пришлось изменить прошивку считывателя показаний счетчика Меркурий 231 AT, заодно и упростилась схема.

Как оказалось, конвертеры UART - IrDA MCP2120 закупленные на aliexpress.com оказались подделкой.
У них на 9600 бод ширина ТХ импульса 1.5us вместо 20us, и в итоге передача не устойчивая бывает.

В esp8266, в принципе, есть IrDA режим работы UART, но выяснилось, что с ним тоже не так все гладко...



Чтобы заработал встроенный IrDA должны быть включены биты UART0_CONF0: UART_IRDA_EN, UART_IRDA_TX_EN,  UART_IRDA_RX_INV, UART_IRDA_DPLX.
Также нужно выключить подтяжку у RX пина.

Оказалось, в реализации IrDA в esp8266 два бага: глотает биты в четных байтах при блочной отправке и реальный baud rate ниже, причем только при отправке.



То есть, чтобы успешно использовать встроенный IrDA нужно писать в UART FIFO по 1 байту и повесить таймер на длительность байта + пауза между байтами.

Плюс одновременно увеличивать скорость UART на baud/15 перед отправкой блока данных и возвращать ее на место после.

Однако, все равно остается небольшая проблемка - между 7 и 8 битом интервал завышен:



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



ИК интерфейс счетчика Меркурий 231 AT при достижении паузы в 10ms начинает подвисать, поэтому, для надежности, используется NMI таймер.

Схема:
Вместо TFDU4100 нельзя использовать TFDU4101 - у него эхо.

Исходник тут:  https://github.com/vad7/PowerMeter-IrDA

19 комментариев:

  1. Здравствуйте. У меня в Меркурии нет инфракрасного порта... а если tx rx подать на микросхему pca82c250t(can шина) проект будет работоспособен?

    ОтветитьУдалить
  2. Добрый день!
    Хочу повторить Ваш проект, закупил все детали, в том числе MCP2120. Какую версию посоветуете собрать - с ним или без него?

    ОтветитьУдалить
    Ответы
    1. Добрый!
      у меня без него работает уже несколько лет норм.

      Удалить
    2. С ним будет более универсальна. Если захочешь залить другую прошивку, к примеру easyesp.

      Удалить
  3. За проект спасибо, давно искал такую реализацию. было бы интерна прошивка без fram, т.к. она весьма не дешевая.

    ОтветитьУдалить
  4. Здравствуйте, у меня такой же счетчик 231 at o1i, хотел бы приобрести у вас готовый комплект диспечеризации, как с вами связаться?

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      По электронной почте.

      Удалить
    2. Этот комментарий был удален автором.

      Удалить
  5. Добрый день, уважаемый vad7. У меня есть к Вам вопрос как уже вижу к специалисту.
    На предприятии у нас необходимо поставить 4шт электросчетчика по 380в, для анализа потребления с 4 точек.
    Можете посоветовать какие счетчики поставить и можно ли у вас приобрести готовое решение по диспетчеризации с подключением к этим счетчикам с выводом показателей, графиков и т.д.? Нужна аналитика по потреблению, от дельных участков (парогенераторная, прачечная и т.д.)
    P.S. почту вашу не смог найти куда писать...

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      По счетчикам не подскажу, готовых решений для промышленной автоматизации нет.

      Удалить
    2. Хочу сделать по вашему принципу.
      Подсказали электрики... На каждую фазу поставим трансформатор (TTC-DB - Трансформатор тока с разъемным сердечником) для понижения и подключим (например Меркурий 231 АТ). Дальше ESP8266 по вашим исходникам (я уже установил себе на ESP01 и ESP8266 для примера, все показывает, но без всей схемы... нет ни время ни опыта для этого...). Думаю что получиться. Первоначально нужно получить общие данные с парогенераторной где стоит 4шт котла по 200кВт каждый. Один общий счетчик, а второй на котёл который не давно отремонтировали для понимания его затрат в отдельности (или их вообще потом поменять на современные!). Котлам (американским) уже более 10 лет.
      Что скажите, получиться получить аналитику по такой схеме? Потом можно и Raspberry подключить как общий сервер для объединения всех в одно место и т.д. На ваших картинках мне понравился интерфейс со всеми данными и по разному оборудованию. Это МастерСкада?

      Удалить
  6. что-то тихо в данном чате...
    Может есть идеи у других участников?
    В инете есть подобные уже готовые предложения, но эта меня заинтересовала своей не зависимостью.

    ОтветитьУдалить
  7. Добрый день! Подскажите у меня прибор запоролен и пароль администратора я не знаю. Будет ли работать ваша схема ? И второй вопрос. По стуи мне надо убедится что в моем приборе работает IRDA и выполнять автоматическую корректировку времени, так как время на приборе убежало на 45 минут.

    ОтветитьУдалить
    Ответы
    1. Добрый, пароли по умолчанию - «111111» - для 1 уровня доступа, «222222» - для 2 уровня доступа. Выполнять корректировку без паролей не получится. Коррекцию на +-4 минуты раз в сутки можно делать с доступом 1 уровня.

      Удалить
    2. Да я знаю эти стандартные пароли. Вроде как пароль 1 уровня не меняли, поменяли только пароль 2 уровня. В вашем ПО используется пароль 1 уровня? где то 2 года назад пробовал собирать схему, но не получилось ничего. не был ответов от Счетчика. У вас в ПО нет команды PING (код запроса 0), по этому не понятно толи пароль не верный толи связи нет, так как меркурий на неправильный пароль не отвечает!

      Удалить
    3. логин для коррекции времени в коде в стр. 506 (mercury.c): pwmt_connect(2); где 2 уровень, соответственно, если пароль 2 уровня не известен, то параметр нужно заменить на 1. В веб на странице "Дополнительно" есть "Send command" - там отправка команд на счетчик, можно ввести команду "00", и попробовать так проверить, сам не пробовал.

      Удалить
    4. Этот комментарий был удален автором.

      Удалить
    5. Да нашел, Для начала я хочу попробовать накидать примитивную программу которая отправит пинг, получит ответ и потом отправить авторизацию с 111111 и проверить есть ли ответы. Можете подсказать в каком файле идет работат с UART_IRDA?
      Прикручу экранчик небольшой и буду выводить отдадку, просто у меня счетчик на столбе на улице висит, чтобы понимать он вообще работает по IRDA? Может из за температуры умер давно сам модуль в счётчике.

      Удалить