Ссылочку бы на описание и примеры использования библиотеки Mercury 23x core для CS3.5?
Вид для печати
Ссылочку бы на описание и примеры использования библиотеки Mercury 23x core для CS3.5?
Смотрите вложения к самому первому сообщению:
http://www.owen.ru/forum/showthread.php?t=23762
И статью из журнала:
http://www.owen.ru/uploads/36-37_tro...rkurii_plk.pdf
Спасибо за ответ. И то и другое я уже видел, но это не совсем то, что нужно:
В этой теме человек интересовался, но ему не ответили
Вложение 33890
А в этой статье описывается другая библиотека, с другим перечнем функциональных блоков.
Просто счетчика и контроллера под рукой сейчас нет, чтобы можно было поэкспериментировать, а делать на авось не хотелось бы.
Добрый день. Подскажите, где можно посмотреть пример с данной библиотекой? Из описание библиотеки не понятно как правильно задавать Read_Parameter.
Последовательность в запросе понятна. Допустим, нужно прочитать срез по сумме всех тарифов на данный момент, последовательность: 8,16h,120. Как ее задать, как правильно, как объявить это все в одной переменной? Типы данных разные, каким типом это все представлять? И выходные данные из блока, получаемые после запроса, как отделить с помощью числа полезных байт эти полезные байты из буфера данных?
Добрый день.
Пример заполнения структуры для считывания энергии от сброса по сумме тарифов:
Вложение 47948Код:Read_param: Read_parameter;
Вложение 47949
По поводу типов - это должно быть описано в спецификации протокола Меркурий.
Вложение 47954
А откуда этот пример? В описании библиотеки и даже в CoDeSYS описании библиотеки нет такого блока.
https://ftp.owen.ru/CoDeSys3/04_Libr...rcury_core.pdf
По этой ссылке в документе описывается другой блок. А это именно нужная мне ссылка, описывающая нужную мне библиотеку.
По приведенной вами ссылке описывается блок, у которого есть вход mercury_parameter типа Read_Parameter.
Я привел скриншот, на котором показано, как сформировать переменную, которая присваивается на этот вход.
Это ответ на озвученный вами вопрос:
Цитата:
Как ее задать, как правильно, как объявить это все в одной переменной?
Предварительно оформил блок. Посмотрите, правильно сделал привязки переменных. Не понятно только почему знаки вопроса над блоком, что там должно быть? Ассистент предлагает неподходящие варианты. Вроде должно быть имя блока, а ассистент предлагает переменную.
И остался пустым ввод mercury_parametr. Или достаточно того, что в структуре этого ввода назначил переменные?Вложение 47962
1. Вместо знаков вопроса нужно ввести имя экземпляра ФБ - после этого он должен автоматически быть добавлен в разделе локальных переменных (VAR...END_VAR) вашего ФБ merc.
Если этого не произойдет - объявите его там самостоятельно.
2. В проект надо добавить библиотеку SysCom.
3. На вход mercury_Parameter надо присвоить вашу входную переменную mercury_Parameter.
4. У вас некорректный порядок выполнения блоков (см. цифры в правом верхнем углу квадратиков) - нажмите ПКМ на холсте и выберите команду Порядок выполнения - В соответствии с потоком данных.
Спасибо большое за поддержку!
Вложение 47967
А вот этого достаточно? Находится в структуре библиотеки для Меркурия.
Достаточно и этого, но тогда может потребоваться прописать все пространства имен:
handle: Mercury_23x_core.SysCom.SysTypes.RTS_IEC_HANDLE;
т.е. это полный путь до переменной?Цитата:
_Mercury_23x_core.SysCom.SysTypes.RTS_IEC_HANDLE
еще вопрос: не совсем понятно в каком виде данные приходят в data_bufer, 51 Байт это очень много. Нужно писать еще блок для обработки этого буфера.
Автор библиотеки наверное не зря data_bytes сделал? Другими словами, я могу получить значение в "чистом виде" без обработки, или нет?
Отсылаю запрос на срез по сумме тарифов, в итоге получаю значение, которое нужно интерпретировать, конвертировать, собирать побайтово?
Понятно, что конечный результат, это десятичное значение с двумя знаками после запятой, но его еще нужно собрать?
Onyx дело в том, что счетчик не может отдать вам конкретно данные суммы или конкретно данные энергии за 1-й тариф (вернее он может быть и может, но это будут уже другие команды запроса, которые возможно не реализованы в данной библиотеке, надо смотреть по документации на протокол счетчика), а выдает вам сразу несколько переменных. Например "Энергия от сброса активной энергии" Сумма, Тариф1, Тариф2, Тариф3, Тариф4 пачкой байт.
И да, кроме того, что вам надо забрать определенные байты, не мешало бы изучить документацию на протокол счетчика, там надо еще определять направлении энергии например... (проверять в старших битах значение)...
Так что реализация подобных протоколов на ПЛК изрядно трудна, особенно если реализатор написал только запрос и получил ответ а дальше разбирайтесь как хотите...
Не изучал библиотеку на ПЛК, интересно, а CRC она проверяет и выдает сырой буфер без CRC и служебной информации заголовка ? или все скопом ?
Вопрос по входным данным.
Вложение 47969
parameter_number (16h) в описании библиотеки представлен в 16-теричном формате. Тип данных для этого параметра INT. Мне нужно представлять его в десятеричном формате?
Итоговая структура:
Вложение 47970
Думаю, надо будет порт снифером послушать в момент обмена.Цитата:
дело в том, что счетчик не может отдать вам конкретно данные суммы или конкретно данные энергии за 1-й тариф (вернее он может быть и может, но это будут уже другие команды запроса, которые возможно не реализованы в данной библиотеке, надо смотреть по документации на протокол счетчика), а выдает вам сразу несколько переменных. Например "Энергия от сброса активной энергии" Сумма, Тариф1, Тариф2, Тариф3, Тариф4 пачкой байт.
Вообще, если эту тему как следует разжевать, то будет неплохим пособием. Народ интересуется.
И нет нигде примера, полного примера, как объявлять переменные, структуры программы, она явно не из одного блока будет состоять, потому что данные еще интерпретировать надо.
Onyx а при чем тут порт снифер ?, берете документацию протокола (по заявке Инкотекс его предоставляет), смотрите согласно команде что отдает счетчик и смотрите, нужно делать проверки на направление энергии или не нужно. Там и так и сяк есть...
bwri если помню правильно, это один байт, что и как вы в него запишите (byte)int_120 или (byte)hex_78 в принципе фиолетово. (приведение типов смотрите в CodeSys, я просто для наглядности написал.)
Если у вас счетчик с тарификатором, я бы перешел на команду 8, параметр 14h. По крайней мере все данные, которые можно получить после команды фиксации записаны в одну точку времени. Читая командой 16h вы читаете размазанные по времени данные на момент чтения счетчика.
У меня есть библиотека для Меркурий230, писанная специалистами ABB под их ПЛК, но там надо переделывать на работу с SysLibCom, потому что в ABB своя библиотека работы с портом.
Спасибо. Это будет лучше.Цитата:
берете документацию протокола (по заявке Инкотекс его предоставляет), смотрите согласно команде что отдает счетчик и смотрите, нужно делать проверки на направление энергии или не нужно
Смотрю в описании библиотеки нет команды 14h. Наверное данные не все. Надо документацию к счетчику посмотреть.
Не все, часть команд для получения мгновенных значений придется использовать 05h, при параметре 14h больше отдается, чем при 16h
Вы сейчас перечислили общие принципы работы в CODESYS.
Для ознакомления с ними есть документация, видеоролики, обучающие курсы.
Сделать конкретный пример с Меркурием сложно - у нас сейчас нет счетчика под руками.
И поскольку у Меркурия множество параметров разных типов - то такой пример априори не будет универсальным.
Конечно, универсальности не будет. Хотелось бы кроме изменяемых значений для начала. По буферу данных будут вопросы постоянно, т.к. запросы у потребителя разные, естественно. Но один полный пример, с любым запросом - это очень хорошо. В итоге, пользователи со своими запросами могут дополнять решение в блоках.
Когда я закончу со своим счетчиком, я выложу итоговую программу. У меня все просто, срез суммы всех тарифов, на настоящий момент.
Один конкретный пример есть:
http://www.owen.ru/forum/showthread....l=1#post298761
Будем вам признательны за это.
Доброго времени суток, скажите у вас получилось? Пример можете выложить?
Вложение 56299
Добрый день, помогите разобраться с ошибкой 253
Вложение 56302
все равно ошибка висит!?