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

09.02.23

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Внешняя компонента для подключения 1С к однофазным электросчётчикам Меркурий (исходники)
.zip 42,41Kb
2
2 Скачать (2 SM) Купить за 2 150 руб.
Внешняя компонента для подключения 1С к однофазным электросчётчикам Меркурий (библиотека.so)
.so 164,52Kb
0
0 Скачать (1 SM) Купить за 1 850 руб.
Внешняя компонента для подключения 1С к однофазным электросчётчикам Меркурий (библиотека.dll)
.dll 81,50Kb
3
3 Скачать (3 SM) Купить за 2 450 руб.
Внешняя компонента для подключения 1С к однофазным электросчетчикам Меркурий исходник для Windows
.zip 43,47Kb
3
3 Скачать (4 SM) Купить за 2 750 руб.

Аннотация.

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

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

 

Кратко про электросчётчики «Меркурий 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 Внешняя компонента Меркурий Электросчётчик

См. также

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

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

15.11.2022    19713    18    SQV0    49    

37

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

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

84000 руб.

19.08.2020    24414    23    1    

25

Поиск данных Внешние источники данных Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Если вам нужно автоматически генерировать представления (view) к вашей базе данных 1С (есть две версии - для СУБД MS SQL Server и для PostgreSQL) по структуре метаданных 1С, то вам необходима данная обработка. Наш "Генератор View", другими словами - это коннектор к данным 1С для Power BI - незаменимый помощник для бизнес-аналитиков, работающих с базами 1С из Yandex Datalens/Power BI и т.д. Работает для обычных и управляемых форм под 1С 8.3

230000 руб.

31.07.2020    13515    13    48    

25

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

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

60000 руб.

05.10.2022    10495    11    8    

13

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

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

10200 руб.

24.06.2021    20379    57    53    

34

Разработка внешних компонент 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 и маркетинг Управленческий учет Платные (руб)

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

15000 руб.

30.05.2017    53416    8    69    

45

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

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

48000 руб.

16.11.2018    30665    21    31    

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

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

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

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