PDA

Просмотр полной версии : Библиотека OwenVendorProtocols для опроса тепло/электросчетчиков и других устройств



Евгений Кислов
26.02.2021, 11:17
Добрый день, коллеги.
Мы выпустили первую версию библиотеки OwenVendorProtocols, которая включает в себя блоки опроса тепло/электросчетчиков других приборов по нестандартным протоколам обмена.
По мере поддержки новых приборов будут выпускаться новые версии библиотеки.

Список поддержанных устройств:

Реализовано:

Теплосчетик ТЭМ-104/106 (благодарим alextopaz (https://owen.ru/forum/member.php?u=81897) за предоставленный прибор и помощь в отладке);
Электросчетчики Меркурий 23x;
Электросчетчики Меркурий 20x (благодарим melky (https://owen.ru/forum/member.php?u=15000) за репозиторий на GitHub (https://github.com/Manjey73/OpnenKPs/tree/master/KpMercury20x) с реализацией протокола на C#);
Электросчетчики Энергомера CE102 с протоколом CE (благодарим Анатолия Бритова - сотрудника Харьковского электротехнического завода «Энергомера» за помощь в отладке).



В работе:

Электросчетчики Энергомера (протокол МЭК 61107);


В планах:

Теплосчетчики ВКТ-5, ВКТ-7 (Теплоком );
Теплосчетчик КМ-5new (ТБН Энергосервис);
Электросчетчик СЭТ-4ТМ.03М (НЗИФ).


Если вы заинтересованы в разработке блоков опроса для приборов, которые в данный момент отсутствуют в библиотеке – то оставляйте свои предложения в этой теме или присылайте их на почту e.kislov@owen.ru.
Разработка новых блоков по запросу возможна в том случае, если:

у вас есть нужный прибор;
вы можете подключить его к ПК с адекватными характеристиками (не хуже Intel Core i5, 8 Gb RAM);
вы можете обеспечить удаленный доступ к этому ПК по стабильному каналу связи и принимать участие в отладке (имитировать изменение параметров и т. д.)


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

Вопросы и пожелания по библиотеке вы можете оставлять прямо в этой теме.

Библиотека: OwenVendorProtocols_v3.5.14.4.compiled-library (https://ftp.owen.ru/CoDeSys3/04_Library/05_3.5.11.5/02_Libraries/OwenVendorProtocols_v3.5.14.4.compiled-library)
Документация: CODESYS V3.5. Описание библиотеки OwenVendorProtocols [2.3] (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_OwenVendorProtocols_v2.3.pdf)
Примеры: ТЭМ-106 (ТЭСМА-106) (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/07_User_protocols/Example_TEM106_3514v1.projectarchive) / Меркурий 236 (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/07_User_protocols/Example_Mercury236_3514v1.projectarchive) / Меркурий 206 (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/07_User_protocols/Example_Mercury206_3514v1.projectarchive) / Энергомера CE102 (протокол CE) (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/07_User_protocols/Example_Energomera_CE_3514v1.projectarchive)

melky
26.02.2021, 12:45
Доступ к счетчику Энергомера 102 (однофазный с МЭК61107 - косяк по CRC или производитель не понял или применил одну из реализаций)
И счетчику Меркурий 200 нужен?

Есть еще Меркурий 236

Если что пишите, организую по удаленке через Ethernet-RS485 преобразователь. в некоторой части могу дать пояснения по алгоритму опроса.

Евгений Кислов
26.02.2021, 13:06
С Меркуриями проблем нет - у нас есть эти счетчики.
Насчет Энергомеры - я правильно понял, что у вас СЕ 102М? (потому что насколько я понимаю - модели без литеры М поддерживают только протокол CE)
Спасибо, по этому поводу обязательно свяжемся с вами, когда дойдем до их протокола. У нас в наличии только CE303 с IEC 61107 - будет полезно провести отладку на разных устройствах.

melky
26.02.2021, 16:45
Евгений Кислов да, у меня однофазник с 61107 протоколом, одна беда, он не чистый, на самом деле, в самом описании протокола есть ссылки на 3-и (если не ошибаюсь) способа расчета CRC, но где-то в документации на Энергомеру встречал, что у них он отличается от общепринятого.

мой драйвер для Scada читает как счетчик Энергомера 102М так и корректоры газа EK260, 270, 280 за счет настроек шаблона и использования разных CRC.
Покупал однофазный счетчик, так как на 3-х фазный зажал денег :) но разницы там особо нет, просто больше переменных.
Ну и других приборов у меня нет с подобным протоколом, а в этих тип С при опросе.

По счетчику Меркурий 236 (вероятно и 230) если хотите сделать синхронизацию часов с паролем первого уровня доступа, следите, чтобы разница времени была менее 4-х минут, если она более, корректируйте за несколько дней. В пользовательском режиме счетчик можно корректировать только раз в сутки.
И советую сделать два вида опроса, по фиксированным значениям для счетчиков с тарификатором и по стандартным. Протокол Меркурия тот еще зверь. ПоубЫвав бы таких программистов :)

Евгений Кислов
26.02.2021, 17:00
По счетчику Меркурий 236 (вероятно и 230) если хотите сделать синхронизацию часов с паролем первого уровня доступа, следите, чтобы разница времени была менее 4-х минут, если она более, корректируйте за несколько дней. В пользовательском режиме счетчик можно корректировать только раз в сутки.

Мы планируем поддержать в готовом виде "нормальную" установку времени (для которой нужен 2 или 3-й уровень доступа).
У пользователя будет возможность с помощью блока отправить произвольный запрос (указав функцию, код параметра и т.д) - так что синхронизировать время с 1 уровнем доступа он тоже сможет.
Ни о какой автоматической синхронизации в блоке, естественно, речи не идет - это задача программы пользователя.


И советую сделать два вида опроса, по фиксированным значениям для счетчиков с тарификатором и по стандартным.

Если вы имеете в виду запросы из п. 2.5.17 (Запросы на чтение массивов регистров накопленной энергии) и 2.6.16 (Чтение вспомогательных параметров) - то да, они будут поддерживаться "из коробки". (номера пунктов взял из этого документа (https://www.incotexcom.ru/files/em/docs/merkuriy-sistema-komand-sogl-1-2021-02-02.pdf)).

melky
27.02.2021, 14:20
Не, имел ввиду чтение мгновенных параметров. Счётчики с тарификатором имеют функцию фиксации данных, при чем по широковещательной команде.
Важно для счётчиков прямого включения. Так как регистры данных по другим командам не вмещают больше 40-ка с чем-то ампер. Наследие старых счётчиков.

Евгений Кислов
27.02.2021, 14:42
Не, имел ввиду чтение мгновенных параметров. Счётчики с тарификатором имеют функцию фиксации данных, при чем по широковещательной команде.
Важно для счётчиков прямого включения. Так как регистры данных по другим командам не вмещают больше 40-ка с чем-то ампер. Наследие старых счётчиков.

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

melky
27.02.2021, 21:58
Надо будет вспомнить, давно не лазил в документацию по протоколу.
Команда 0х08 0х14

Есть еще команда 0х16, так вот по ней при ответе на часть параметров отведено 3 байта и старшие 2 бита отвечают за направление Активной и реактивной, и в оставшиеся биты не влезают значения выше какой-то мощности, если счетчик прямого включения, для трансформаторного проблем нет. Общался по данной теме с разработчиками Меркурий, сказали что это просто оставлено для совместимости с древних времен :)

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

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

А если использовать команду 0х16 то сперва мы читаем напряжение, потом мощность и так далее и происходит расхождение данных.
Но к сожалению фиксация данных доступна только для версий счетчиков с тарификатором (кажется буква P в маркировке)

Евгений Кислов
27.02.2021, 22:29
Насчет фиксации я понял - постараемся поддержать.


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

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

Евгений Кислов
22.03.2021, 11:36
Обновили версию библиотеки до 3.5.14.2.
В новой версии добавлена поддержка протокола трехфазных элекросчетчиков Меркурий (203.2TD, 204, 208, 230, 231, 234, 236, 238).

Ссылка на обновленную версию библиотеки, пример и документацию -ссылки в шапке.

54127

Сейчас берем в работу протокол для однофазных электросчетчиков Меркурий.

melky
22.03.2021, 13:47
Евгений Кислов какие у вас однофазники? могу организовать доступ к Меркурий 206.

Евгений Кислов
22.03.2021, 13:50
Евгений Кислов какие у вас однофазники? могу организовать доступ к Меркурий 206.

У нас тоже Меркурий 206 как раз.

melky
22.03.2021, 14:40
ну тогда ладно. :) единственное, мне писали, что Меркурий 200 не поддерживает какие-то команды, которые есть в 206-м. у меня тоже, кроме 206-го других нет.

Евгений Кислов
29.03.2021, 10:45
Обновили версию библиотеки до 3.5.14.3.
В новой версии добавлена поддержка протокола однофазных элекросчетчиков Меркурий (200, 201, 203 (кроме Меркурий 203.2TD), 206).

Благодарим melky (https://owen.ru/forum/member.php?u=15000) за репозиторий на GitHub (https://github.com/Manjey73/OpnenKPs/tree/master/KpMercury20x) с реализацией протокола на C#.

Ссылка на обновленную версию библиотеки, пример и документацию - ссылки в шапке.

54248

Теперь берем в работу протоколы для электросчетчиков Энергомера.

Mikael
02.04.2021, 14:54
По ссылке Библиотека: OwenVendorProtocols_v3.5.14.3.compiled-library лежит библиотека OwenVendorProtocols_v3.5.14.2.
Не работает.

Евгений Кислов
02.04.2021, 15:00
По ссылке Библиотека: OwenVendorProtocols_v3.5.14.3.compiled-library лежит библиотека OwenVendorProtocols_v3.5.14.2.
Не работает.

По какой именно ссылке?
Покажите, пожалуйста, скриншотом.

pixiemosty
13.05.2021, 19:43
Разрабатываю протокол в данный момент между СПК 107 и Энергомера СЕ102М.
Буду рад помочь протестировать библиотеку.

Евгений Кислов
13.05.2021, 19:47
Разрабатываю протокол в данный момент между СПК 107 и Энергомера СЕ102М.
Буду рад помочь протестировать библиотеку.

Мы как раз приступаем к поддержке этого протокола.
Можете указать полную маркировку своего счетчика?

pixiemosty
14.05.2021, 15:37
CE102M R5 145-А, который осуществляет связь через RS485.

Евгений Кислов
14.05.2021, 15:52
CE102M R5 145-А, который осуществляет связь через RS485.

Если несложно - напишите, пожалуйста, мне на почту (в подписи) ваш контактный телефон.

melky
14.05.2021, 21:19
CE102M R5 145-А - это как раз тот самый однофазник, на котором я писал драйвер, тоже МЭК61107 с CRC от Энергомеры. Полностью в общем повторяет CE303 только переменных отдает меньше.

Евгений Кислов
15.05.2021, 11:38
CE102M R5 145-А - это как раз тот самый однофазник, на котором я писал драйвер, тоже МЭК61107 с CRC от Энергомеры. Полностью в общем повторяет CE303 только переменных отдает меньше.

А вы какие из 4-х режимов чтения поддерживали?

melky
15.05.2021, 13:57
Евгений Кислов так вроде счетчик только режим Тип С и поддерживает. Пока в своем драйвере только этот режим протокола и поддерживаю, не попадалось приборов с другими режимами. Корректоры газа EK260, 270, 280 да счетчики Энергомера 102М и 303. Отличия только в расчете контрольной суммы.

Вообще, по описанию протокола вроде как 3-и режима расчета CRC есть, или это в IEC каком-то описано, на который ссылается протокол 61107 но в свободном доступе я не нашел этот стандарт, в котором описан расчет CRC (не помню сейчас номер).

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

https://owen.ru/forum/showthread.php?t=32322&p=333255&viewfull=1#post333255

Вот я выкладывал лог по 102-му, и там же ниже про групповое (быстрое) чтение...

Евгений Кислов
15.05.2021, 14:14
http://www.energomera.ru/documentations/product/ce301_303_rp.pdf
Я спрашивал о режиме чтения из вариантов 7.1.2 / 7.1.3 / 7.1.4

melky
15.05.2021, 19:59
Ну так там и написано


7.1.1.4 Счетчик осуществляет обмен данными по каналам связи, используя протокол обмена, в соответствии с ГОСТ IEC 61107-2011 в режиме С.

Там же ниже про отклонение расчета CRC и сноска на ISO, который я не нашел в доступе.
7.1.2 не пробовал, надо будет испытать, ответит 102-й что-нибудь в таком варианте ?

7.1.3 у меня был реализован ранее под корректоры газа EK, я просто добавил код расчета CRC и в шаблоне его указываю, остальное у меня просто перенастроилось шаблоном драйвера. Доступ всегда парольный, беспарольный не тестировал.

7.1.4

Подрежим быстрого чтения представляет собой реализацию дополнительного способа чтения произвольных параметров без входа в сеанс. Данный способ не соответствует требованиям ГОСТ IEC 61107-2011, однако основан на нем.

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

Если разобраться, то я не писал строго под счетчики Энергомера, оно так случайно получилось :) Все, что я добавил в код это CRC для Энергомеры и потом программную эмуляцию режима 7E1, чтобы счетчик можно было цеплять на линию 8N1

Filini
15.05.2021, 22:17
Интересуют ВКТ 7, ВКТ-9 и ТВ7, все теплоком

Евгений Кислов
16.05.2021, 08:32
Интересуют ВКТ 7, ВКТ-9 и ТВ7, все теплоком

ВКТ-7 в планах есть.
У ВКТ-9 и ТВ-7 - обычный Modbus, с ними не должно быть проблем.
ТВ-7, кстати, это Термотроник, а не Теплоком.

Filini
16.05.2021, 09:09
ТВ-7, кстати, это Термотроник, а не Теплоком.
Да, производителя забыл)))

melky
16.05.2021, 10:05
Поделитесь документацией на протокол ТВ-7 если есть, имеется ввиду собственный протокол, а не Modbus вариант, спасибо.

Евгений Кислов
16.05.2021, 10:07
Поделитесь документацией на протокол ТВ-7 если есть, имеется ввиду собственный протокол, а не Modbus вариант, спасибо.

Там нет собственного протокола, только Modbus с парой расширений.
http://termotronic.ru/download/files/tv7_protokol_obmena_red.7-05.pdf

melky
17.05.2021, 09:13
Евгений Кислов а, перепутал с Теплоком ВКГ-2 у них есть какой-то свой протокол, вот он то мне и нужен.

Евгений Кислов
17.05.2021, 09:22
Евгений Кислов а, перепутал с Теплоком ВКГ-2 у них есть какой-то свой протокол, вот он то мне и нужен.

Там как и у ВКТ-5 - слегка изуродованный Modbus:
http://www.teplocom.msk.ru/data/support/docs/gaz/vkg_2/protokol_obmena_2.04.pdf

melky
17.05.2021, 11:07
Евгений Кислов спасибо, поизучаю, а то чувствую придется ваять под этот прибор драйвер...

pixiemosty
17.05.2021, 12:01
Здравствуйте, на счет энергомеры СЕ102М и СПК107.
Пытаюсь реализовать через реализацию нестандартных протоколов.
Настроил КОМ_контрол. Связь есть.

Но ФБ COM_Write не хочет вообще запускаться, хотя COM_READ все время в режиме работы.
В чем может быть проблема?
55113
55114

Евгений Кислов, я сейчас увидел ваше сообщение. Я отпишусь, у меня пока постоянного доступа к устройствам нет, прихожу на час-два протестировать, что получается.

Евгений Кислов
17.05.2021, 12:04
А вы по вашей машине состояний когда-нибудь на шаг 1 созвращаетесь?

pixiemosty
17.05.2021, 13:33
Отправляюсь на шаг 1 (отправка запроса) на шаге 0 после объявления запроса

Евгений Кислов
17.05.2021, 13:44
Обновили версию библиотеки до 3.5.14.4.
В новой версии добавлена поддержка протокола однофазных элекросчетчиков Энергомера CE102 (протокол CE).

Благодарим Анатолия Бритова - сотрудника Харьковского электротехнического завода «Энергомера» за помощь в отладке.

Ссылки на обновленную версию библиотеки, пример и документацию - в шапке.

55117

Теперь берем в работу счетчики Энергомера с протоколом IEC 61107.

melky
17.05.2021, 13:50
Евгений Кислов Вот, теперь мне станет очень интересно, как вы организуете плавающий буфер для приема данных? :)

Евгений Кислов
17.05.2021, 14:00
Евгений Кислов Вот, теперь мне станет очень интересно, как вы организуете плавающий буфер для приема данных? :)

Судя по документам Энергомеры - достаточно заложиться размером буфера в 500 байт.

55120

melky
17.05.2021, 14:55
Евгений Кислов дело то не в закладке буфера больше, а в том, сколько тратится времени на ожидание ответа?

Я просто не знаю, как работает СПК в данном случае с портами.

Например ответ будет 200 байт, но мы этого не знаем, ставим буфер 500 байт и таймаут 1500 мс - каковы действия ПЛК ? он будет выжидать 1500 мс независимо, пришли эти 200 байт или нет ?

В случае со Scada, у разработчика были механизмы остановки по байту, и потом по просьбе (я мучал протокол DF1) были добавлены механизмы остановки по массиву(массивам) байт. То есть в данном случае я ловил 0x0D 0x0A, делал проверку читать дальше если несколько параметров, ловил ETX и прочитать еще CRC и остановиться. То есть не выжидать время таймаута.

Если при чтении раз в минуту для ПЛК это не критично то и ладно.

Евгений Кислов
17.05.2021, 16:37
Отправляюсь на шаг 1 (отправка запроса) на шаге 0 после объявления запроса

Выложите ваш проект, пожалуйста.

pixiemosty
17.05.2021, 16:38
Все таки тут вообще не получается до счетчика достучаться этим запросом.
На СПК подключен счетчик к COM1, пробовал и 1 и 2 задавать программно. 0 реакции.
А что висит пустая строка на COM_READ размером 256, то она и без счетчика висит :(
55125

Евгений Кислов
17.05.2021, 16:45
Все таки тут вообще не получается до счетчика достучаться этим запросом.
На СПК подключен счетчик к COM1, пробовал и 1 и 2 задавать программно. 0 реакции.
А что висит пустая строка на COM_READ размером 256, то она и без счетчика висит :(
55125

Выложите ваш проект, пожалуйста...

melky
17.05.2021, 17:12
pixiemosty кнопочку на счетчике нажали для разрешения передачи? :) есть там у него фокус с каким-то параметром, который управляется кнопкой либо разрешает передачу либо запрещает.

pixiemosty
17.05.2021, 17:21
Я извиняюсь, заработался тут)

Получилось получить ответ от счетчика!

Два момента осталось:
1. Расчет контрольной суммы, который реализуется немного другим способом, как я понимаю.
2. Во время опроса счетчика, на нем висит ошибка Error 05.
55127

п.с. нажимаю кнопку разрешения эту, она как то не влияет на опрос его, все равно опрос идет)

Вот ссылка на проект, если что: https://disk.yandex.ru/d/wc2VmdPabExuHA

melky
17.05.2021, 17:35
pixiemosty ну мне проект не поможет, некуда загружать. По CRC писал, могу дать код на C#, переделать в ST думаю не особая проблема погуглив.

Вот код расчета CRC для Энергомеры на C#



public static string CalcCS(string s)
{
byte[] bytes = Encoding.Default.GetBytes(s);
byte num = 0;
for (int i = 1; i < (int)bytes.Length; i++)
{
num = (byte)(num + bytes[i]);
}
bytes[0] = (byte)(num & 127);

return Encoding.Default.GetString(bytes, 0, 1);
}

pixiemosty
17.05.2021, 17:37
pixiemosty ну мне проект не поможет, некуда загружать. По CRC писал, могу дать код на C#, переделать в ST думаю не особая проблема погуглив.

Вот код расчета CRC для Энергомеры на C#



public static string CalcCS(string s)
{
byte[] bytes = Encoding.Default.GetBytes(s);
byte num = 0;
for (int i = 1; i < (int)bytes.Length; i++)
{
num = (byte)(num + bytes[i]);
}
bytes[0] = (byte)(num & 127);

return Encoding.Default.GetString(bytes, 0, 1);
}


Спасибо, буду пробовать!

П.с. делаю безадресный запрос /?! CR LF показывает, счетчик CE102Mv01.
Делаю адресный запрос /?01! CR LF и уже не хочет отвечать, что за странности

melky
17.05.2021, 20:44
pixiemosty а почему вы решили, что у счетчика адрес 01 ? у них адрес часть серийного номера по умолчанию. Почитайте документацию на счетчик

pixiemosty
17.05.2021, 21:43
Весь день промучился с попыткой отправить запрос на счетчик.
Никакой запрос не хочет отвечать, кроме самого первого /?! CR LF.
Пытаюсь следующим отправить ACK 0 5 (0 и 1) CR LF, но ответа нет.
Что я делаю не так? Почему на следующий запрос нет ответа?
Если есть возможность посмотреть проект, гляньте пожалуйста.
https://disk.yandex.ru/d/Ckbw_W07ZJhkxg
55163
55164


Пробую реализовать опрос по этому логу, попутно читая мэк 61107.

Отправка (5): /?!<0D><0A> // безадресный запрос
Приём (16): /EKT5CE102Mv01<0D><0A> // ответ счетчика

Отправка (6): <06>051<0D><0A> // запрос на чтение Режим С протокола МЭК61107
Приём (17): <01>P0<02>(145605366)<03>* // Ответ, что счетчик готов

Отправка (14): <01>P1<02>(777777)<03>! // Отправка пароля счетчика по умолчанию
Приём (1): <06> // подтверждающий ответ

п.с. Избавился от ошибки Err5 при запросе.
п.с.с. на счёт адресного запроса, по документации адрес это последние 4 цифры серийника, пытаюсь достучаться до счетчика с адресом /?1829! CR LF, где 1829 последние 4 цифры, пока безрезультатно

pixiemosty
20.05.2021, 12:46
Получилось, все таки адрес там не 4х значный.

melky
20.05.2021, 13:29
Ну да, там где-то 8 цифр в адресе :) если не весь серийник, не помню уже.

pixiemosty
20.05.2021, 14:03
Ну да, там где-то 8 цифр в адресе :) если не весь серийник, не помню уже.

Да, не весь. Около 8-9.

Нашли наконец преобразователь 485 в юсб, через софтину Энергомеры посмотрел логи запросов, стало легче)

Реализовал вчера:
1. Адресный запрос
2. Запрос на программирование
3. Вход с паролем
На все эти запросы счётчик отвечает, вот осталось реализовать именно считывание параметров, но с логами сейчас будет легче осуществлять.
Ну и контрольную сумму переделать, которую вы отправляли)

Евгений Кислов
20.05.2021, 14:13
Да, не весь. Около 8-9.

Нашли наконец преобразователь 485 в юсб, через софтину Энергомеры посмотрел логи запросов, стало легче)

Реализовал вчера:
1. Адресный запрос
2. Запрос на программирование
3. Вход с паролем
На все эти запросы счётчик отвечает, вот осталось реализовать именно считывание параметров, но с логами сейчас будет легче осуществлять.
Ну и контрольную сумму переделать, которую вы отправляли)

А какие параметры вы собираетесь считывать?

pixiemosty
20.05.2021, 14:50
А какие параметры вы собираетесь считывать?

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

Не хочет выдавать запрос по напряжению. Запрос такой же, как в логе.
На счетчике висит нагрузка, хм.
В чем дело интересно.
55193

melky
20.05.2021, 15:43
После того как залогинились к счетчику уже проще, просто посылаете запрос того же напряжения VOLTA() и получаете ответ.

я использовал работу со строками и ) использовал как сепаратор для остановки и поиска индекса от (
Для трехфазника таких будет несколько переменных VOLTA(223.795)VOLTA(0.277)VOLTA(0.097)
Ну и так далее

pixiemosty
20.05.2021, 16:06
После того как залогинились к счетчику уже проще, просто посылаете запрос того же напряжения VOLTA() и получаете ответ.

я использовал работу со строками и ) использовал как сепаратор для остановки и поиска индекса от (
Для трехфазника таких будет несколько переменных VOLTA(223.795)VOLTA(0.277)VOLTA(0.097)
Ну и так далее

Ну вот я и делаю 4 шага.
Последним запрос VOLTA или CURRE. На первые три есть ответ, на последний нет.
Приложил сверху скрин запросов и сам запрос. Интересно, в логе 1 в 1. Почему же ответа нет.

melky
20.05.2021, 16:23
Как нет ответа? у вас же пришло VOLTA(220.48)

pixiemosty
20.05.2021, 16:31
Как нет ответа? у вас же пришло VOLTA(220.48)

Это лог с AdminTools (ПО Энергомеры).
Я по этому логу делаю запрос с СПК на счетчик) Первые 3 дают ответ, а последний VOLTA не дает)

melky
20.05.2021, 16:42
Контрольная сумма есть?, правильная ? Это уже запрос с контрольной суммой вроде

pixiemosty
20.05.2021, 17:33
Контрольная сумма есть?, правильная ? Это уже запрос с контрольной суммой вроде

Я делаю запрос с контрольной суммой55197

Евгений Кислов
20.05.2021, 17:44
Вам надо LEN делать, а не SIZEOF.

pixiemosty
20.05.2021, 18:16
Вам надо LEN делать, а не SIZEOF.
Тут у меня LEN)
Но я считал данные напряжения, считаю это успехом!:))
55198
55199

55200

pixiemosty
20.05.2021, 20:45
Единственное, почему-то счётчик не хочет отвечать на другой запрос после предыдущего.
Например делаю запрос:
VOLTA () - ответ
CURRE() - нет ответа.

Если делаю по отдельности, то все нормально.
Менял и время ожидания, все равно.
Надо разбираться почему не хочет так.

melky
20.05.2021, 21:00
Станьте снифером порта с ПК между счетчиком и ПЛК, возможно мусор на следующем шаге идет. Буфер не очищается или еще что-то, а то так гадать можно долго

pixiemosty
20.05.2021, 21:14
Так, вас понял, только в двух словах с помощью чего это реализовать, подскажите?

Но все же первые 4 шага реализуются без косяков, всегда ответ есть от счетчика.
1: / ? АДРЕС! CR LF Ответ есть
2: ACK 0 5 1 CR LF Ответ есть
3: <SOH>P1<STX>(777777)<ETX><BCC> Ответ есть
4: <SOH>R1<STX>VOLTA()<ETX><BCC> Ответ есть
5: <SOH>R1<STX>CURRE()<ETX><BCC> Тут ответа нет.

Блоки по факту одинаковые, меняется только запрос.

melky
20.05.2021, 21:33
На 5-м шаге BCC корректно считается?

ADVANCED SERIAL DATA LOGGER - trial версии вполне достаточно, можно настроить порт на прослушку, правда не помню, может ли он со стороны смотреть, но вроде должен.

Надо посмотреть что на пятом шаге реально уходит в порт.

pixiemosty вы контрольную сумму считаете программно или просто подставляете ?

pixiemosty
20.05.2021, 21:45
Считаю программно.

Сейчас уже не смогу запустить, ушел из кабинета.
Но вот на скриншоте приложил. Считает BCC корректно

melky
20.05.2021, 21:52
pixiemosty насколько помню, в BCC старший бит тоже сбрасывается, если он появляется. Но если вы вместо VOLTA делаете запрос CURRE и работает, думаю причина какая-то с буфером

pixiemosty
20.05.2021, 21:56
Да, если делаю отдельно CURRE, все работает. Также делаю и по месяцам потребление, тоже все работает.
А вот если пытаюсь опросить вместе, то все, ответа нет.
Завтра попробую поразбираться в чем причина, вроде буфер чищу функцией BUFFER CLEAR. Хммм.

pixiemosty
24.05.2021, 18:42
Получилось реализовать считывание параметры сети и потребление за месяц\день\общее в реальном времени отдельными запросами, считаю это успехом! Всем спасибо большое за помощь!)
55261

melky
24.05.2021, 20:36
pixiemosty и в чем была причина зависания ?

pixiemosty
24.05.2021, 20:56
Я наверно уже все методы перепробовал.
Я сделал несколько действий:
1) Сделал опрос цикличным со сбросом всех флагов запросов (xEnable := FALSE) в начале следующего запроса. Получается так, прошел запрос, начинается следующий, предыдущий сбрасывается и тд. Думаю это все и запустило.
2) Сделал такие задержки в таймере.
VAR CONSTANT
c_tTimeout: TIME:=T#1S; // таймаут опроса модуля (время ожидания ответа)
c_tDelay: TIME:=T#10MS; // задержка перед отправкой следующего запроса
END_VAR

melky
24.05.2021, 21:04
может задержка между запросами повлияла. Будет время, прикручу счетчик к Scada и попробую между запросами 0 поставить, посмотрю что произойдет.

pixiemosty
24.05.2021, 21:24
Я тоже поиграю со временем, хочу к минимально допустимому придти.

pixiemosty
31.05.2021, 18:35
Наконец осталось реализовать проверку контрольной суммы.
Но вот какое дело, у считываемого ответа с счетчика нет в конце контрольной суммы.
Почему в конце ее нет, хмм..

Filini
31.05.2021, 20:35
Наконец осталось реализовать проверку контрольной суммы.
Но вот какое дело, у считываемого ответа с счетчика нет в конце контрольной суммы.
Почему в конце ее нет, хмм..

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

melky
31.05.2021, 23:24
pixiemosty как нет? после $03 стоит же ' а $03 это ETX
А блин, это у ас так строка выделяется...

может буфер увеличить ?

pixiemosty
01.06.2021, 15:59
pixiemosty как нет? после $03 стоит же ' а $03 это ETX
А блин, это у ас так строка выделяется...

может буфер увеличить ?

Но такой же ответ в буфер влазит, значит не из за этого же
55376

melky
01.06.2021, 16:58
pixiemosty но и в этом ответе нет контрольной суммы, хотя должна же быть

pixiemosty
01.06.2021, 17:26
pixiemosty но и в этом ответе нет контрольной суммы, хотя должна же быть

так сам ответ же больше по размеру в любом случае.
сам буффер это строка(255), ответ явно меньше же от счетчика

melky
01.06.2021, 17:41
pixiemosty тогда непонятно, почему нет контрольной суммы, это наблюдается во всех ответах ?

pixiemosty
02.06.2021, 13:50
pixiemosty тогда непонятно, почему нет контрольной суммы, это наблюдается во всех ответах ?

Да, не в одном ответе нет КС.

melky
02.06.2021, 14:16
При этом в запросах у вас КС присутствует, иначе счетчик бы не отвечал.
Попробуйте удалить КС в запросах счетчику для проверки, ответит он или нет ?

pixiemosty
02.06.2021, 17:57
При этом в запросах у вас КС присутствует, иначе счетчик бы не отвечал.
Попробуйте удалить КС в запросах счетчику для проверки, ответит он или нет ?

Без КС висит ERR13

melky
02.06.2021, 21:59
Получается в запросе есть КС, тогда счетчик проверяет запрос и честно отвечает, но почему тогда не отображается КС в ответе? Тут что-то с приемом пакета не так.
При получении ответа ведь тоже надо убедиться что он пришел полным и корректным по КС

pixiemosty
04.06.2021, 17:00
Получается в запросе есть КС, тогда счетчик проверяет запрос и честно отвечает, но почему тогда не отображается КС в ответе? Тут что-то с приемом пакета не так.
При получении ответа ведь тоже надо убедиться что он пришел полным и корректным по КС

Вот да, странно. Но не в одном ответе нет КС. Хотя все они приходят корректно.