Yegor
27.01.2016, 13:37
pre-release
https://github.com/yegorpetrov/owen-modbus-import/releases/tag/2016.1.27.1031
Кто организует связь с ПЛК1xx по Модбасу (когда ПЛК — слейв) знают, насколько муторно бывает дублировать регистры в мастере. Например, в вашем ПЛК создано несколько десятков регистиров для передачи данных на какой-нибудь операторский ПК — все эти регистры придётся скорее всего руками вписывать в среде разработки этого верхнего уровня. И в случае изменений придётся всё перепроверять.
Представляю небольшую программу/библиотеку, которая перепишет все регистры из .pro-файла за вас по вашему шаблону.
22068
На скриншоте показано, как программа получает на вход файл проекта и по шаблону csharp.stg выдаёт в консоль готовый к применению код для разбора регистров в теги/переменные на стороне мастера. Учитывается выравнивание и поразрядный доступ (модули «8 bit»).
Код сгенерирован из такой конфигурации:
22069
А для форматирования использовался вот такой шаблон:
Форум съедает шаблоны. См. файлы .stg в исходниках: https://github.com/yegorpetrov/owen-modbus-import/tree/master/ModbusImportShell/Templates
csharp.stg<outs:{out |="" <out.name=""><nregs><slaveaddr><tag, object=""><outs:{out |="" dict[tags.<out.name=""><out.conversionname><out.conversionargs; separator=", "><out.comment>Не обязательно генерировать код на каком-то языке. Шаблон можно написать и под простое перечисление:
22070
simple.stg<outs:{out |="" <out.name=""><out.conversionname><out.conversionargs; separator=", "><out.comment>Для шаблонизации используется библиотека StringTemplate — оттуда и синтаксис шаблонов.
Параметром -o (--out) вывод можно перенаправить в какой-нибудь файл. А параметры -a, -c и -n позволяют выбирать слейв по адресу, комментарию и номеру, если в проекте их несколько.
Программа специально сделана консольной, чтобы её проще было автоматизировать и интегрировать в свою рабочую среду. А библиотеку ModbusImport можно использовать и отдельно от консольной оболочки. Например, её можно вызывать в шаблонах T4, которые использует Visual Studio. Для этого достаточно положить куда-нибудь файл ModbusImport.dll и сослаться на него в шаблоне. На следующем скриншоте показано, как шаблон генерирует часть класса PLCReader, который отвечает за разбор регистров. Остаётся дописать постоянную часть класса, и можно больше не тратить время на переписывание конфигурации из проекта.
22073</out.comment></out.conversionargs;></out.conversionname></outs:{out></out.comment></out.conversionargs;></out.conversionname></outs:{out></tag,></slaveaddr></nregs></outs:{out>
https://github.com/yegorpetrov/owen-modbus-import/releases/tag/2016.1.27.1031
Кто организует связь с ПЛК1xx по Модбасу (когда ПЛК — слейв) знают, насколько муторно бывает дублировать регистры в мастере. Например, в вашем ПЛК создано несколько десятков регистиров для передачи данных на какой-нибудь операторский ПК — все эти регистры придётся скорее всего руками вписывать в среде разработки этого верхнего уровня. И в случае изменений придётся всё перепроверять.
Представляю небольшую программу/библиотеку, которая перепишет все регистры из .pro-файла за вас по вашему шаблону.
22068
На скриншоте показано, как программа получает на вход файл проекта и по шаблону csharp.stg выдаёт в консоль готовый к применению код для разбора регистров в теги/переменные на стороне мастера. Учитывается выравнивание и поразрядный доступ (модули «8 bit»).
Код сгенерирован из такой конфигурации:
22069
А для форматирования использовался вот такой шаблон:
Форум съедает шаблоны. См. файлы .stg в исходниках: https://github.com/yegorpetrov/owen-modbus-import/tree/master/ModbusImportShell/Templates
csharp.stg<outs:{out |="" <out.name=""><nregs><slaveaddr><tag, object=""><outs:{out |="" dict[tags.<out.name=""><out.conversionname><out.conversionargs; separator=", "><out.comment>Не обязательно генерировать код на каком-то языке. Шаблон можно написать и под простое перечисление:
22070
simple.stg<outs:{out |="" <out.name=""><out.conversionname><out.conversionargs; separator=", "><out.comment>Для шаблонизации используется библиотека StringTemplate — оттуда и синтаксис шаблонов.
Параметром -o (--out) вывод можно перенаправить в какой-нибудь файл. А параметры -a, -c и -n позволяют выбирать слейв по адресу, комментарию и номеру, если в проекте их несколько.
Программа специально сделана консольной, чтобы её проще было автоматизировать и интегрировать в свою рабочую среду. А библиотеку ModbusImport можно использовать и отдельно от консольной оболочки. Например, её можно вызывать в шаблонах T4, которые использует Visual Studio. Для этого достаточно положить куда-нибудь файл ModbusImport.dll и сослаться на него в шаблоне. На следующем скриншоте показано, как шаблон генерирует часть класса PLCReader, который отвечает за разбор регистров. Остаётся дописать постоянную часть класса, и можно больше не тратить время на переписывание конфигурации из проекта.
22073</out.comment></out.conversionargs;></out.conversionname></outs:{out></out.comment></out.conversionargs;></out.conversionname></outs:{out></tag,></slaveaddr></nregs></outs:{out>