PDA

Просмотр полной версии : Библиотека Mercury 23x core для CS3.5



S#716_0P
27.10.2017, 09:09
Ссылочку бы на описание и примеры использования библиотеки Mercury 23x core для CS3.5?

Сергей Лысов
27.10.2017, 09:33
Смотрите вложения к самому первому сообщению:
http://www.owen.ru/forum/showthread.php?t=23762

И статью из журнала:
http://www.owen.ru/uploads/36-37_trofimov_merkurii_plk.pdf

S#716_0P
27.10.2017, 10:10
Спасибо за ответ. И то и другое я уже видел, но это не совсем то, что нужно:

Смотрите вложения к самому первому сообщению:
http://www.owen.ru/forum/showthread.php?t=23762
В этой теме человек интересовался, но ему не ответили
33890


И статью из журнала:
http://www.owen.ru/uploads/36-37_trofimov_merkurii_plk.pdf
А в этой статье описывается другая библиотека, с другим перечнем функциональных блоков.

Просто счетчика и контроллера под рукой сейчас нет, чтобы можно было поэкспериментировать, а делать на авось не хотелось бы.

Onyx
18.03.2020, 10:13
Добрый день. Подскажите, где можно посмотреть пример с данной библиотекой? Из описание библиотеки не понятно как правильно задавать Read_Parameter.
Последовательность в запросе понятна. Допустим, нужно прочитать срез по сумме всех тарифов на данный момент, последовательность: 8,16h,120. Как ее задать, как правильно, как объявить это все в одной переменной? Типы данных разные, каким типом это все представлять? И выходные данные из блока, получаемые после запроса, как отделить с помощью числа полезных байт эти полезные байты из буфера данных?

Евгений Кислов
18.03.2020, 12:29
Добрый день. Подскажите, где можно посмотреть пример с данной библиотекой? Из описание библиотеки не понятно как правильно задавать Read_Parameter.
Последовательность в запросе понятна. Допустим, нужно прочитать срез по сумме всех тарифов на данный момент, последовательность: 8,16h,120. Как ее задать, как правильно, как объявить это все в одной переменной? Типы данных разные, каким типом это все представлять? И выходные данные из блока, получаемые после запроса, как отделить с помощью числа полезных байт эти полезные байты из буфера данных?

Добрый день.

Пример заполнения структуры для считывания энергии от сброса по сумме тарифов:


Read_param: Read_parameter;

47948

47949

По поводу типов - это должно быть описано в спецификации протокола Меркурий.

Onyx
18.03.2020, 17:53
47954
А откуда этот пример? В описании библиотеки и даже в CoDeSYS описании библиотеки нет такого блока.

Onyx
18.03.2020, 17:58
https://ftp.owen.ru/CoDeSys3/04_Library/05_3.5.11.5/02_Libraries/01_docs/Mercury_core.pdf
По этой ссылке в документе описывается другой блок. А это именно нужная мне ссылка, описывающая нужную мне библиотеку.

Евгений Кислов
18.03.2020, 18:07
https://ftp.owen.ru/CoDeSys3/04_Library/05_3.5.11.5/02_Libraries/01_docs/Mercury_core.pdf
По этой ссылке в документе описывается другой блок. А это именно нужная мне ссылка, описывающая нужную мне библиотеку.

По приведенной вами ссылке описывается блок, у которого есть вход mercury_parameter типа Read_Parameter.
Я привел скриншот, на котором показано, как сформировать переменную, которая присваивается на этот вход.

Это ответ на озвученный вами вопрос:


Как ее задать, как правильно, как объявить это все в одной переменной?

Onyx
19.03.2020, 10:09
Предварительно оформил блок. Посмотрите, правильно сделал привязки переменных. Не понятно только почему знаки вопроса над блоком, что там должно быть? Ассистент предлагает неподходящие варианты. Вроде должно быть имя блока, а ассистент предлагает переменную.
И остался пустым ввод mercury_parametr. Или достаточно того, что в структуре этого ввода назначил переменные?47962

Евгений Кислов
19.03.2020, 10:20
Предварительно оформил блок. Посмотрите, правильно сделал привязки переменных. Не понятно только почему знаки вопроса над блоком, что там должно быть? Ассистент предлагает неподходящие варианты. Вроде должно быть имя блока, а ассистент предлагает переменную.
И остался пустым ввод mercury_parametr. Или достаточно того, что в структуре этого ввода назначил переменные?47962

1. Вместо знаков вопроса нужно ввести имя экземпляра ФБ - после этого он должен автоматически быть добавлен в разделе локальных переменных (VAR...END_VAR) вашего ФБ merc.
Если этого не произойдет - объявите его там самостоятельно.

2. В проект надо добавить библиотеку SysCom.

3. На вход mercury_Parameter надо присвоить вашу входную переменную mercury_Parameter.

4. У вас некорректный порядок выполнения блоков (см. цифры в правом верхнем углу квадратиков) - нажмите ПКМ на холсте и выберите команду Порядок выполнения - В соответствии с потоком данных.

Onyx
19.03.2020, 11:54
Спасибо большое за поддержку!

Onyx
19.03.2020, 12:03
47967


А вот этого достаточно? Находится в структуре библиотеки для Меркурия.

Евгений Кислов
19.03.2020, 12:31
Достаточно и этого, но тогда может потребоваться прописать все пространства имен:


handle: Mercury_23x_core.SysCom.SysTypes.RTS_IEC_HANDLE;

Onyx
19.03.2020, 12:46
_Mercury_23x_core.SysCom.SysTypes.RTS_IEC_HANDLE
т.е. это полный путь до переменной?

Onyx
19.03.2020, 12:56
еще вопрос: не совсем понятно в каком виде данные приходят в data_bufer, 51 Байт это очень много. Нужно писать еще блок для обработки этого буфера.
Автор библиотеки наверное не зря data_bytes сделал? Другими словами, я могу получить значение в "чистом виде" без обработки, или нет?
Отсылаю запрос на срез по сумме тарифов, в итоге получаю значение, которое нужно интерпретировать, конвертировать, собирать побайтово?
Понятно, что конечный результат, это десятичное значение с двумя знаками после запятой, но его еще нужно собрать?

Евгений Кислов
19.03.2020, 12:57
т.е. это полный путь до переменной?

Да, все верно.

Евгений Кислов
19.03.2020, 13:00
еще вопрос: не совсем понятно в каком виде данные приходят в data_bufer, 51 Байт это очень много. Нужно писать еще блок для обработки этого буфера.
Автор библиотеки наверное не зря data_bytes сделал? Другими словами, я могу получить значение в "чистом виде" без обработки, или нет?
Отсылаю запрос на срез по сумме тарифов, в итоге получаю значение, которое нужно интерпретировать, конвертировать, собирать побайтово?
Понятно, что конечный результат, это десятичное значение с двумя знаками после запятой, но его еще нужно собрать?

Данные приходят в сыром виде, конвертацию требуется написать самостоятельно.

manjey73
19.03.2020, 13:22
Onyx дело в том, что счетчик не может отдать вам конкретно данные суммы или конкретно данные энергии за 1-й тариф (вернее он может быть и может, но это будут уже другие команды запроса, которые возможно не реализованы в данной библиотеке, надо смотреть по документации на протокол счетчика), а выдает вам сразу несколько переменных. Например "Энергия от сброса активной энергии" Сумма, Тариф1, Тариф2, Тариф3, Тариф4 пачкой байт.

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

Так что реализация подобных протоколов на ПЛК изрядно трудна, особенно если реализатор написал только запрос и получил ответ а дальше разбирайтесь как хотите...

Не изучал библиотеку на ПЛК, интересно, а CRC она проверяет и выдает сырой буфер без CRC и служебной информации заголовка ? или все скопом ?

Евгений Кислов
19.03.2020, 13:27
Onyx дело в том, что счетчик не может отдать вам конкретно данные суммы или конкретно данные энергии за 1-й тариф (вернее он может быть и может, но это будут уже другие команды запроса, которые возможно не реализованы в данной библиотеке, надо смотреть по документации на протокол счетчика), а выдает вам сразу несколько переменных. Например "Энергия от сброса активной энергии" Сумма, Тариф1, Тариф2, Тариф3, Тариф4 пачкой байт.

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

Так что реализация подобных протоколов на ПЛК изрядно трудна, особенно если реализатор написал только запрос и получил ответ а дальше разбирайтесь как хотите...

Не изучал библиотеку на ПЛК, интересно, а CRC она проверяет и выдает сырой буфер без CRC и служебной информации заголовка ? или все скопом ?

Выдается буфер данных, без CRC и заголовков.

Onyx
19.03.2020, 13:33
Вопрос по входным данным.
47969
parameter_number (16h) в описании библиотеки представлен в 16-теричном формате. Тип данных для этого параметра INT. Мне нужно представлять его в десятеричном формате?
Итоговая структура:
47970

Onyx
19.03.2020, 13:39
дело в том, что счетчик не может отдать вам конкретно данные суммы или конкретно данные энергии за 1-й тариф (вернее он может быть и может, но это будут уже другие команды запроса, которые возможно не реализованы в данной библиотеке, надо смотреть по документации на протокол счетчика), а выдает вам сразу несколько переменных. Например "Энергия от сброса активной энергии" Сумма, Тариф1, Тариф2, Тариф3, Тариф4 пачкой байт.
Думаю, надо будет порт снифером послушать в момент обмена.

Onyx
19.03.2020, 13:44
Вообще, если эту тему как следует разжевать, то будет неплохим пособием. Народ интересуется.
И нет нигде примера, полного примера, как объявлять переменные, структуры программы, она явно не из одного блока будет состоять, потому что данные еще интерпретировать надо.

manjey73
19.03.2020, 13:49
Onyx а при чем тут порт снифер ?, берете документацию протокола (по заявке Инкотекс его предоставляет), смотрите согласно команде что отдает счетчик и смотрите, нужно делать проверки на направление энергии или не нужно. Там и так и сяк есть...

bwri если помню правильно, это один байт, что и как вы в него запишите (byte)int_120 или (byte)hex_78 в принципе фиолетово. (приведение типов смотрите в CodeSys, я просто для наглядности написал.)

Если у вас счетчик с тарификатором, я бы перешел на команду 8, параметр 14h. По крайней мере все данные, которые можно получить после команды фиксации записаны в одну точку времени. Читая командой 16h вы читаете размазанные по времени данные на момент чтения счетчика.

У меня есть библиотека для Меркурий230, писанная специалистами ABB под их ПЛК, но там надо переделывать на работу с SysLibCom, потому что в ABB своя библиотека работы с портом.

Onyx
19.03.2020, 13:51
берете документацию протокола (по заявке Инкотекс его предоставляет), смотрите согласно команде что отдает счетчик и смотрите, нужно делать проверки на направление энергии или не нужно
Спасибо. Это будет лучше.
Смотрю в описании библиотеки нет команды 14h. Наверное данные не все. Надо документацию к счетчику посмотреть.

manjey73
19.03.2020, 13:57
Не все, часть команд для получения мгновенных значений придется использовать 05h, при параметре 14h больше отдается, чем при 16h

Евгений Кислов
19.03.2020, 14:12
Вопрос по входным данным.
47969
parameter_number (16h) в описании библиотеки представлен в 16-теричном формате. Тип данных для этого параметра INT. Мне нужно представлять его в десятеричном формате?
Итоговая структура:
47970

Можно сразу в HEX.
... INT := 16#16;

Евгений Кислов
19.03.2020, 14:15
Вообще, если эту тему как следует разжевать, то будет неплохим пособием. Народ интересуется.
И нет нигде примера, полного примера, как объявлять переменные, структуры программы, она явно не из одного блока будет состоять, потому что данные еще интерпретировать надо.

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

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

Onyx
19.03.2020, 14:35
Конечно, универсальности не будет. Хотелось бы кроме изменяемых значений для начала. По буферу данных будут вопросы постоянно, т.к. запросы у потребителя разные, естественно. Но один полный пример, с любым запросом - это очень хорошо. В итоге, пользователи со своими запросами могут дополнять решение в блоках.

Onyx
19.03.2020, 14:37
Когда я закончу со своим счетчиком, я выложу итоговую программу. У меня все просто, срез суммы всех тарифов, на настоящий момент.

Евгений Кислов
19.03.2020, 14:40
Один конкретный пример есть:
http://www.owen.ru/forum/showthread.php?t=28167&p=298761&viewfull=1#post298761


Когда я закончу со своим счетчиком, я выложу итоговую программу. У меня все просто, срез суммы всех тарифов, на настоящий момент.

Будем вам признательны за это.

aeasu@omnigroup.su
17.03.2021, 15:07
Доброго времени суток, скажите у вас получилось? Пример можете выложить?

___Andrey
23.07.2021, 20:29
Один конкретный пример есть:
http://www.owen.ru/forum/showthread.php?t=28167&p=298761&viewfull=1#post298761



Будем вам признательны за это.

Добрый день, прошу поделится рабочим примером! Спасибо

___Andrey
31.07.2021, 14:41
56299
Добрый день, помогите разобраться с ошибкой 253

Евгений Кислов
31.07.2021, 15:35
56299
Добрый день, помогите разобраться с ошибкой 253

Добрый день.
Перед вызовом блока надо открыть COM-порт и получить его дескриптор (handle).
Используйте для этого ФБ COM_CONTROL из библиотеки OwenCommunication.

___Andrey
31.07.2021, 18:51
56302
все равно ошибка висит!?

Евгений Кислов
01.08.2021, 09:12
56302
все равно ошибка висит!?

Попробуйте установить адекватное значение таймаута (T#1s, например), использовать пароль 222222 и указать адрес счетчика.