Просмотр полной версии : Библиотека 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
А в этой статье описывается другая библиотека, с другим перечнем функциональных блоков.
Просто счетчика и контроллера под рукой сейчас нет, чтобы можно было поэкспериментировать, а делать на авось не хотелось бы.
Добрый день. Подскажите, где можно посмотреть пример с данной библиотекой? Из описание библиотеки не понятно как правильно задавать Read_Parameter.
Последовательность в запросе понятна. Допустим, нужно прочитать срез по сумме всех тарифов на данный момент, последовательность: 8,16h,120. Как ее задать, как правильно, как объявить это все в одной переменной? Типы данных разные, каким типом это все представлять? И выходные данные из блока, получаемые после запроса, как отделить с помощью числа полезных байт эти полезные байты из буфера данных?
Евгений Кислов
18.03.2020, 12:29
Добрый день. Подскажите, где можно посмотреть пример с данной библиотекой? Из описание библиотеки не понятно как правильно задавать Read_Parameter.
Последовательность в запросе понятна. Допустим, нужно прочитать срез по сумме всех тарифов на данный момент, последовательность: 8,16h,120. Как ее задать, как правильно, как объявить это все в одной переменной? Типы данных разные, каким типом это все представлять? И выходные данные из блока, получаемые после запроса, как отделить с помощью числа полезных байт эти полезные байты из буфера данных?
Добрый день.
Пример заполнения структуры для считывания энергии от сброса по сумме тарифов:
Read_param: Read_parameter;
47948
47949
По поводу типов - это должно быть описано в спецификации протокола Меркурий.
47954
А откуда этот пример? В описании библиотеки и даже в CoDeSYS описании библиотеки нет такого блока.
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.
Я привел скриншот, на котором показано, как сформировать переменную, которая присваивается на этот вход.
Это ответ на озвученный вами вопрос:
Как ее задать, как правильно, как объявить это все в одной переменной?
Предварительно оформил блок. Посмотрите, правильно сделал привязки переменных. Не понятно только почему знаки вопроса над блоком, что там должно быть? Ассистент предлагает неподходящие варианты. Вроде должно быть имя блока, а ассистент предлагает переменную.
И остался пустым ввод mercury_parametr. Или достаточно того, что в структуре этого ввода назначил переменные?47962
Евгений Кислов
19.03.2020, 10:20
Предварительно оформил блок. Посмотрите, правильно сделал привязки переменных. Не понятно только почему знаки вопроса над блоком, что там должно быть? Ассистент предлагает неподходящие варианты. Вроде должно быть имя блока, а ассистент предлагает переменную.
И остался пустым ввод mercury_parametr. Или достаточно того, что в структуре этого ввода назначил переменные?47962
1. Вместо знаков вопроса нужно ввести имя экземпляра ФБ - после этого он должен автоматически быть добавлен в разделе локальных переменных (VAR...END_VAR) вашего ФБ merc.
Если этого не произойдет - объявите его там самостоятельно.
2. В проект надо добавить библиотеку SysCom.
3. На вход mercury_Parameter надо присвоить вашу входную переменную mercury_Parameter.
4. У вас некорректный порядок выполнения блоков (см. цифры в правом верхнем углу квадратиков) - нажмите ПКМ на холсте и выберите команду Порядок выполнения - В соответствии с потоком данных.
Спасибо большое за поддержку!
47967
А вот этого достаточно? Находится в структуре библиотеки для Меркурия.
Евгений Кислов
19.03.2020, 12:31
Достаточно и этого, но тогда может потребоваться прописать все пространства имен:
handle: Mercury_23x_core.SysCom.SysTypes.RTS_IEC_HANDLE;
_Mercury_23x_core.SysCom.SysTypes.RTS_IEC_HANDLE
т.е. это полный путь до переменной?
еще вопрос: не совсем понятно в каком виде данные приходят в 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 и заголовков.
Вопрос по входным данным.
47969
parameter_number (16h) в описании библиотеки представлен в 16-теричном формате. Тип данных для этого параметра INT. Мне нужно представлять его в десятеричном формате?
Итоговая структура:
47970
дело в том, что счетчик не может отдать вам конкретно данные суммы или конкретно данные энергии за 1-й тариф (вернее он может быть и может, но это будут уже другие команды запроса, которые возможно не реализованы в данной библиотеке, надо смотреть по документации на протокол счетчика), а выдает вам сразу несколько переменных. Например "Энергия от сброса активной энергии" Сумма, Тариф1, Тариф2, Тариф3, Тариф4 пачкой байт.
Думаю, надо будет порт снифером послушать в момент обмена.
Вообще, если эту тему как следует разжевать, то будет неплохим пособием. Народ интересуется.
И нет нигде примера, полного примера, как объявлять переменные, структуры программы, она явно не из одного блока будет состоять, потому что данные еще интерпретировать надо.
manjey73
19.03.2020, 13:49
Onyx а при чем тут порт снифер ?, берете документацию протокола (по заявке Инкотекс его предоставляет), смотрите согласно команде что отдает счетчик и смотрите, нужно делать проверки на направление энергии или не нужно. Там и так и сяк есть...
bwri если помню правильно, это один байт, что и как вы в него запишите (byte)int_120 или (byte)hex_78 в принципе фиолетово. (приведение типов смотрите в CodeSys, я просто для наглядности написал.)
Если у вас счетчик с тарификатором, я бы перешел на команду 8, параметр 14h. По крайней мере все данные, которые можно получить после команды фиксации записаны в одну точку времени. Читая командой 16h вы читаете размазанные по времени данные на момент чтения счетчика.
У меня есть библиотека для Меркурий230, писанная специалистами ABB под их ПЛК, но там надо переделывать на работу с SysLibCom, потому что в ABB своя библиотека работы с портом.
берете документацию протокола (по заявке Инкотекс его предоставляет), смотрите согласно команде что отдает счетчик и смотрите, нужно делать проверки на направление энергии или не нужно
Спасибо. Это будет лучше.
Смотрю в описании библиотеки нет команды 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.
Для ознакомления с ними есть документация, видеоролики, обучающие курсы.
Сделать конкретный пример с Меркурием сложно - у нас сейчас нет счетчика под руками.
И поскольку у Меркурия множество параметров разных типов - то такой пример априори не будет универсальным.
Конечно, универсальности не будет. Хотелось бы кроме изменяемых значений для начала. По буферу данных будут вопросы постоянно, т.к. запросы у потребителя разные, естественно. Но один полный пример, с любым запросом - это очень хорошо. В итоге, пользователи со своими запросами могут дополнять решение в блоках.
Когда я закончу со своим счетчиком, я выложу итоговую программу. У меня все просто, срез суммы всех тарифов, на настоящий момент.
Евгений Кислов
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 и указать адрес счетчика.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot