PDA

Просмотр полной версии : Программа-переводчик конфигурации модбас-слейвов ПЛК1xx



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>

lara197a
27.01.2016, 13:41
Спасибо Егор!
Вы опять всех превзошли.

energvk
10.04.2016, 11:44
Мммм... классная штука. Только не могу почему то запустить, пишет, что приложение не является приложением win32.

Вячеслав Михайлович
10.04.2016, 17:27
так же пишет:

.... пишет, что приложение не является приложением win32.

Yegor
29.04.2016, 14:40
.NET Framework какой версии установлен?

energvk
30.04.2016, 01:55
На домашнем с семеркой - v4.0.30319, на рабочем хр, пока не знаю