Подходы к работе с данными внутри SCADA
Преобразование данных: "сырые" значения к инженерным единицам
ПЛК часто оперируют только целыми числами. В случае, когда необходимо выделить дробную часть из числа, то имеет смысл сделать это на уровне SCADA. Например, чтобы получить значение температуры с точностью до десятых из беззнакового целого можно воспользоваться простым арифметическим действием — делением на 10.
Или, к примеру, сигнал 4-20 мА от датчика температуры (-50…+50°С) в ПЛК будет выглядеть как как двухбайтовая беззнаковая целочисленная переменная с диапазоном значений 0…65535. В некоторых случаях имеет смысл масштабировать эти данные также на уровне SCADA-системы. Получается, что в контроллере значение 0 будет соответствовать температуре -50°С в SCADA, а значение 65535 будет соответствовать температуре +50°С.
Для этих целей можно использовать инструмент модификатор и масштабировать значение с помощью функции scaleScalar.
Окончательная формула масштабирования для примера с датчиком температуры будет выглядеть так:
scaleScalar(value, 0, 65535, -50, 50)
- value — актуальное значение тега, считываемое сервером;
- 0...65535 — диапазон "сырых" значений, получаемых из ПЛК;
- -50...50 — температурный диапазон датчика.
Работа со "словом состояния"
Хорошим тоном в программировании ПЛК является передача набора флагов в виде одного "слова состояния" (одно или двух байтовой переменной, в которой каждый бит является флагом). Например, для мотора вентилятора:
fan.0: останов/работает (0-ой бит в слове состоянии fan);fan.1: норма/авария (1-ый бит в слове состоянии fan);fan.2: готов/не готов (2-ой бит в слове состоянии fan);fan.3: местное/дистанционное (3-ий бит в слове состоянии fan).
Если SCADA не умеет обращаться к отдельным битам, необходимо предусмотреть преобразование значения на сервере. Например, с помощью скрипта или выражения. Скрипт должен "разобрать" слово и создать отдельные булевые переменные для использования в мнемосхемах и сигнализации.
Пример распаковки битовой маски рассмотрен в соответствующем примере.