Внешняя компонента для подключения 1С к однофазным электросчетчикам Меркурий

09.02.23

Разработка - Разработка внешних компонент

Внешняя компонента выполнена по технологии Native API для 1С 8.3, и предназначена для сбора и документирования данных от однофазных счетчиков Меркурий 200, 201, 203 (кроме Меркурий 203.2TD), 206 Посредством интерфейсов RS-485, CAN.

Скачать исходный код

Наименование Файл Версия Размер
Внешняя компонента для подключения 1С к однофазным электросчётчикам Меркурий (исходники)
.zip 42,41Kb
2
.zip 1.0.1 Linux x64 42,41Kb 2 Скачать
Внешняя компонента для подключения 1С к однофазным электросчётчикам Меркурий (библиотека.so)
.so 164,52Kb
0
.so 1.0.1 Linux x64 relese 164,52Kb Скачать
Внешняя компонента для подключения 1С к однофазным электросчётчикам Меркурий (библиотека.dll)
.dll 81,50Kb
3
.dll 1.0.1 Windows x64 relese 81,50Kb 3 Скачать
Внешняя компонента для подключения 1С к однофазным электросчетчикам Меркурий исходник для Windows
.zip 43,47Kb
3
.zip 1.0.1 Windows x64 43,47Kb 3 Скачать

Аннотация.

Данная статья является продолжением моей предыдущей статьи и в ней рассмотрена внешняя компонента для обмена с внешними источниками данных посредством последовательного порта на примере однофазного электросчётчика Меркурий.

Эта работа может быть полезна там, где требуется точный учёт электроэнергии, анализ её потребления и произведённых с помощью неё полезных продуктов. Например оценка эффективности работы отдельных устройств (станков, станков с ЧПУ, инкубатора и т. д.), эффективность теплицы (затрачиваемая энергия на обогрев, полив) и многое другое.

 

Кратко про электросчётчики «Меркурий 206».

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

Счётчик подключается к считывающему устройству четырьмя проводами: линии A, B интерфейса RS-485, питание и «земля».

Скорость обмена данными 9600 бит/сек без контроля чётности.

Напряжение питания 5 вольт.

Теперь надо немного остановиться на протоколе обмена данного электросчётчика.
Протокол обмена со счётчиком довольно простой и в чём-то похож на Modbus RTU. Описание протокола можно найти
здесь
Форматы запросов и ответов совпадают.

 

Название поля

Условное обозначение

Длина поля (байт)

Примечание

Сетевой адрес

ADDR

4

Серийный номер счётчика (передаётся старшим байтом вперёд)

Команды

CMD

1

Двоичный код команды

Данные

­

0…17

Может отсутствовать (в зависимости от типа и назначения пакета)

Контрольная сумма

CRC16

2

2-х байтовый циклический избыточный код, вычисляемый по всем предшествующим байтам данного пакета (передаётся младшим байтом вперёд)

 

 

CRC16 рассчитывается при помощи полинома 0xA001 и стартового значения 0xFFFF, точно так же, как в протоколе Modbus RTU.

Приведу пример функций расчёта контрольной суммы, которую использовал я в этом проекте:

int MODBUS_CRC16_merc_206 (unsigned char data[], int I){
    // возвращает общую длинну полезных данных с контрольной суммой
    // запись контрольной суммы data[i] младьший байт data [i+1] старший байт
    unsigned short int crc = 0xFFFF;
    for(int i=0; i<I; i++){
        crc ^= data[i];
        for(int j=0; j<8; j++){
            if(crc & 1){
                crc >>= 1;
                crc ^= 0xA001;
            }
            else crc >>= 1;
        }
    }
    for(int i =I; i<=(I+1); i++){
        data[i]= crc;
        crc=crc>>8;
    }
    return I+2;
}

Функция производит расчет контрольной суммы данных, находящихся с 1-й позиции массива по I и добавляет её в этот же массив за I (это необходимо учитывать при создании массива). Возвращает длину полезных данных, включая контрольную сумму.

 

В проекте использованы следующие команды для этого счётчика:

0x27 (чтение тарифов) ­ в ответ получаем пакет из 16 байт данных по 4 байта на каждый тариф. При этом данные передаются в двоично-десятичном формате с точностью до 10 Вт.

Запрос:

00 00 04 D2 27 79 7B

где:

00 00 04 D2 - адрес счётчика

27 - команда

79 7В - CRC16

 

Ответ:

00 00 04 D2 27 00 02 27 50 00 02 27 50 00 02 27 50 00 02 27 50 A5 FB

где:

00 00 04 D2  - адрес счётчика

27 - команда

00 02 27 50 - тариф №1 (227,5 кВт х ч)

00 02 27 50 - тариф №2 (227,5 кВт х ч)

00 02 27 50 - тариф №3 (227,5 кВт х ч)

00 02 27 50 - тариф №4 (227,5 кВт х ч)

A5 FB - CRC16

 

0x63 (чтение U, I, P) ­ получаем значения сетевого напряжения, тока и мощности потребления. Данные также передаются в двоично-десятичном формате.

Запрос:

00 00 04 D2 63 79 48

где:

00 00 04 D2 - адрес счётчика

63 - команда

79 48 - CRC16

Ответ:

00 00 04 D2 63 23 00 01 50 00 01 00 A5 FB

где:

00 00 04 D2 - адрес счётчика

63 - команда

23 00 - напряжение (230,0 В)

01 50 - ток нагрузки (1,5 А)

00 01 00 - потребляемая мощность (100Вт)

A5 FB - CRC16

 

0x81 (F, текущего тарифа и битовых флагов) из ответа данной команды нас интересуют только первые два байта, представляющие частоту в двоично-десятичном формате.

Запрос:

00 00 04 D2 81 F9 01

где:

00 00 04 D2 - адрес счётчика

81 - команда

F9 01 - CRC16

Ответ:

00 00 04 D2 81 50 50 3A 00 00 00 00 00 00 CC A4

где:

00 00 04 D2 - адрес счётчика

81 - команда

50 50 - частота (50,5 Гц)

3A - битовые флаги

00 00 00 00 00 00 - резерв

CC A4 - CRC16

 

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

После отправки запроса необходимо выждать определённое время, прежде чем читать из буфера ответ. Это связано с тем, что у счётчика есть таймаут, необходимый для приёма и обработки команды (запроса). Например, для скорости 9600 бод время таймаута равно 5 мс (по умолчанию).

Внешняя компонента.

Внешняя компонента выполнена по технологии Native API для 1С 8.3, с помощью С++ на базе стандартного шаблона. Компиляторы GCC, MVSC. Как указано ранее предназначена для сбора и документирования данных от однофазных счётчиков Меркурий 200, 201, 203 (кроме Меркурий 203.2TD), 206 Посредством интерфейсов RS-485, CAN.

Класс компоненты описан в файлах Mercury206Addin.h и Mercury206Addin.cpp

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

В файлах Mercury206.h и Mercury206.cpp реализованы функции для работы со счётчиком.

Реализованные методы компоненты

 

Наименование команды

Значение

Англоязычное

Русское

Version
ВерсияКомпоненты

Получение информации о версии компоненты

СonnectPort
ПодключитьПорт

Подключение последовательного порта

TimeOut
ТаймАут

Установка значения задержки между запросом и чтением полученных данных от электросчётчика

 

Request
Запрос

Запрос данных от электросчётчика (совмещает в себе функцию чтения данных от счётчика)

 

DisablePort
ОтключитьПорт

Отключение последовательного порта

 

 

Подробное описание методов компоненты

ВерсияКомпоненты; возвращает строку с версией компоненты.
Пример использования:
          Компонента.ВерсияКомпоненты;
Пример ответа функции
          1.0.1 Linux x64

 

ПодключитьПорт (порт - строка, скорость порта - число); Подключает указанный порт, в случае успеха возвращает истину, в случае возникновения ошибки — ложь, и описание ошибки. Вызывается однократно при подключении порта.
Порт - строка в случае с Linux содержит путь к файлу порта (например "/dev/ttyUSB1").
Скорость порта - число может принимать значения 1200, 2400, 4800, 9600, 19200, 38400. В электросчётчике по умолчанию установлено 9600.
Пример использования для Linux:
          РезультатПодключения = Компонента.ПодключитьПорт("/dev/ttyUSB1", 9600);

 

Пример использования для Windows:
          РезультатПодключения = Компонента.ПодключитьПорт("COM4", 9600);

 

ТаймАут (задержка микросекунды — число); функция ничего не возвращает, необходима для записи значения временного интервала в микросекундах между отправкой команды электросчётчику и чтением ответа из буфера порта. Её применение обусловлено тем, что электросчётчик получив запрос тратит определённое время на его обработку. В связи с этим ответ приходит с определённой задержкой, и возможно появление ситуации, когда чтение буфера порта будет произведено до того как в нём появится ответ. В документации производителя указаны значения 20 миллисекунд (я устанавливал 50 мс). Вызывается однократно при подключении компоненты.
Пример использования:
          Компонента.ТаймАут (50000);

 

Запрос (сетевой адрес счётчика - строка, номер команды - число); возвращает строку данных ответа от электросчётчика.

сетевой адрес счётчика - строка, последние 8 цифр серийного номера электросчётчика (указано в тех. документации).
номер командычисло от 1 до 3.

Описание команд

1 - получение значений израсходованной электроэнергии. (доступна только в relese версиях)

2 - получение мгновенных значений напряжения, тока, мощности на нагрузке.

3 - получение мгновенного значения частоты напряжения сети.

Пример использования:
          РезультатЗапроса = Компонента.Запрос("12345",1);
Пример ответа функции запрос на команду №1:
          /456.4/98735.3/2643.4/897.0!
информация по 4-м тарифам (израсходованная электроэнергия кВт) разделена дробной чертой, признак конца строки - восклицательный знак.
Пример ответа функции запрос на команду №2:
          /223.3/5.4/1204.2!
          /напряжение - Вольт /ток - Ампер /мощность на нагрузке - Ватт !
Пример ответа функции запрос на команду №3:
          /51.7!
          / частота - Герц !

 

ОтключитьПорт(); Отключает уже подключенный порт, возвращает истину в случае успеха.

Пример использования:
          Компонента.ОтключитьПорт();

Требования

Компонента тестировалась на версии платформы 1С 8.3.20.1789
Операционные системы  Windows 7, Windows 10, Linux Mint, Ubuntu для 64 битных систем.

 

Подключение электросчётчиков

Подключение электросчётчиков необходимо производить в соответствии с рекомендациями производителя ссылка используя интерфейсы RS-485 или CAN.

 

 

 

 

При использовании преобразователей сторонних производителей необходимо следить за тем, что питание интерфейса счётчика не должно превышать +5В. Так же если питание с преобразователя не реализовано, то его необходимо подать с отдельного стабилизированного источника питания.
На стороне компьютера преобразователь подключается к RS-232, либо к USB с использованием соответствующих драйверов.
На одной линии RS-485, CAN могут находится несколько устройств. Максимальное количество устройств на линии необходимо уточнять из документации на используемые преобразователи RS-485.

 

 

Подключение файла компоненты

Подключение файла компоненты, открытие порта и настройка таймаута.

Функция ПодключитьКомпоненту(Компонента)  Экспорт
ПутьКБиблиотеке="/home/del/libMercury206Addin.so";
Подключено = ПодключитьВнешнююКомпоненту(ПутьКБиблиотеке, "libextDLib", ТипВнешнейКомпоненты.Native);
Если НЕ Подключено Тогда
         Сообщить ("Не удалось подключить компоненту");
		 	 Иначе
		 Сообщить ("Компонента подключена ");
		 Попытка 
			Компонента = новый ("AddIn.libextDLib.Mercury206");
			Сообщить ("Создан объект компоненты");  
			Попытка
				результат = Компонента.ПодключитьПорт("/dev/ttyUSB1", 9600);
				Компонента.ТаймАут(50000);
			Исключение
				Сообщить ("Проблемы подключения порта");
			КонецПопытки;			
 		Исключение
			Сообщить ("неудалось создать объект компоненты");  
		КонецПопытки;
КонецЕсли;
Возврат 1;
Конецфункции

Выполнение запроса к электросчётчику (с сетевым адресом 34) на получение данных по израсходованной электроэнергии.

Функция Получить(Компонента) Экспорт      
	результат = Компонента.Запрос("34", 1);
	Сообщить (результат);
КонецФункции

Отключение порта после выполнения всех необходимых запросов.

Функция Отключить(Компонента) Экспорт
	результат = Компонента.ОтключитьПорт();
	Сообщить (результат);
КонецФункции

 

Native API Внешняя компонента Меркурий Электросчётчик

См. также

Перенос данных из Парус 8 в ЗГУ 3

Зарплата Внешние источники данных Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    22620    19    1    

22

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9306    9    8    

11

Экстрактор данных 1С в BI - выгрузка данных из 1С в BI-аналитику

Внешние источники данных Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

15.11.2022    13651    12    SQV0    47    

29

Перенос данных из Парус 7.хх в ЗГУ ред.3

Внешние источники данных Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

24000 руб.

24.04.2017    48837    97    163    

86

Перенос данных из Парус 10 (Торнадо) в ЗГУ ред.3 через Excel

Внешние источники данных Загрузка и выгрузка в Excel Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате из Парус 10(Торнадо) учреждений через файлы Excel в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ). В принципе, обработка может быть использована для загрузки из файлов Excel, полученных из любых информационных систем.

24000 руб.

16.11.2018    30082    20    31    

21

Медиадисплей. Рекламный информационный монитор для покупателя.

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Монитор покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Можно использовать в качестве графического меню-борда в кафе и видеовывески. Управление выводом на телевизор через hdmi-приставку на базе Windows или Android. В качестве устройства отображения можно использовать Android-планшеты, фоторамки с Android, монитор любого Windows-компьютера, доступного по сети. Настраивается ЛЮБОЙ ДИЗАЙН экрана!

16800 руб.

30.05.2017    52240    34    69    

43

Загрузка в БГУ из УРМ "Криста"

Внешние источники данных Банковские операции Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия государственного учреждения Россия Бухгалтерский учет Платные (руб)

Обработки для загрузки данных из УРМ "Криста" в бухгалтерию государственного учреждения редакция 2.0. Есть Демо доступ на вкладке Бесплатные файлы на 1 месяц со дня получения демонстрационного ключа регистрации. Поддерживает ПО "Web-исполнение" от НПО "Криста".

4800 руб.

19.06.2013    38500    136    90    

30
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Steelvan 302 11.08.22 12:15 Сейчас в теме
Приветствую !

Насколько понимаю, выгода этого случая сопряжения счетчика с 1Ской через родную компоненту такая, что в 1Ске сразу можно вести учет потребленной энергии в одной базе с остальными учетными данными и сразу разносить потребление на объекты учета ?

Типа, сколько ушло на теплицу энергии.
В этой же базе учет сколько эта теплица дала огурцов.
Для возможности определения квт на один огурец, образно.
2. user1779098 80 11.08.22 12:54 Сейчас в теме
(1)Да, именно это я и имел ввиду. Вот только пока реализовано для однофазных счётчиков "Меркурий", на подходе трёхфазные. Так же в планах "Энергомера" и "IEK". Считаю, что так удобнее будет выполнять анализ данных и составлять отчётность. Так же на RS-485 можно параллельно подключить много счётчиков на 1 линию главное чтоб у них были разные серийные номера (адреса).
3. yurapro 03.11.22 09:23 Сейчас в теме
Добрый день!

Спасибо! Очень полезная публикация.
Подскажите, будет ли версия компоненты для трёхфазных счетчиков Меркурий? Если да, то как скоро?
4. user1779098 80 05.11.22 07:25 Сейчас в теме
(3) Раз возникла необходимость, то будет. В лучшем случае месяц в худшем два. Всё зависит от загруженности.
5. gospodenkods 20.09.23 07:15 Сейчас в теме
Вопрос. А не планируете реализовать обмен через ethernet ?
6. gospodenkods 27.09.23 17:21 Сейчас в теме
Так и не получилось ни один Com порт открыть кроме первого. Во всех случаях сообщения,что порт в системе не найден. Хотя он есть и по нему прекрасно общаются. Или чего то с компонентой или я дурак. Последнее крайне вероятно
Оставьте свое сообщение