#1 - О том, как мы унификацию искали…

Модули аналогового ввода у разных производителей устроены по-своему. У каждого свой преобразователь и своя разрядность. Значение АЦП становится унифицированным сигналом только после сопоставления нижнего и верхнего предела с выбранным унифицированным сигналом. Если модуль уже отдаёт унифицированный сигнал, пределы разбирать не нужно: значение и так унифицировано. Зоопарк модулей производителей каждый раз оставляет программисту один и тот же вопрос: что пришло с железа и как из этого получить сигнал датчика.

В Codesys проблема решается универсальным типом данных. В функцию передаётся любой тип данных: унифицированный сигнал или значение АЦП. Режим преобразования выбирает функция: по типу ANY она отличает унифицированный сигнал от значения АЦП. Унифицированный сигнал принимается сразу. Значение АЦП переводится в тот же унифицированный сигнал по нижнему и верхнему пределу преобразователя: эти границы нужно найти в документации модуля и передать в функцию. Отдельный тракт под каждую марку модуля при этом не собирается.

Код выглядит одинаково для любого ПЛК. Если во время разработки приходится менять ПЛК, в самом коде достаточно изменить пределы АЦП. Если с модуля приходит унифицированный сигнал, менять ничего не нужно.

Завернув эту идею в собственную библиотеку получилось ускорить разработку и унифицировать код. Теперь не нужно каждый раз писать код заного, достаточно просто достать готовую функцию из библиотеки.