Для облегчения обслуживания и модификации системы мы рекомендуем выделять биты из слов на уровне ПЛК и передавать их в Citect SCADA в виде дискретных переменных.
Если модификация программы ПЛК невозможна, то для ряда протоколов, например MODNET30 и OFSOPC, в Vijeo Citect возможно определить дискретные переменные, обращающиеся к битам слов в ПЛК. Для этого к их адресу нужно добавить идентификатор бита в виде ‘.n’, где n – номер бита. Например Word1.1 – адрес первого бита слова с адресом Word1 для OFSOPC, а %MW1.2 - адрес первого бита слова с адресом %MW1 для MODNET30. Тип данных при этом должен быть DIGITAL.
Также, возможно извлекать бит непосредственно из слова, применяя к нему битовую маску. Выражение для чтения бита будет выглядеть следующим образом:
(iValue BITAND Pow(2, iBitNo)) <> 0
Здесь iValue – читаемый тег, iBitNo – номер бита.
Для записи бита в слове также необходимо писать функцию Cicode. Она будет выглядеть следующим образом:
INT
FUNCTION
BitWrite(INT iValue, INT iBitno, INT bState)
IF bState = FALSE THEN
RETURN iValue BITAND (4294967295 BITXOR Pow(2, iBitNo));
ELSE
RETURN iValue BITOR Pow(2, iBitNo);
END
END
Здесь bState – значение, которое необходимо записать в бит.
При записи отдельных битов, надо учитывать тот факт, что запись происходит в 3 этапа. Сначала слово считывается во временную переменную. Затем в ней изменяется требуемый бит. И наконец, исходное слово полностью перезаписывается измененным. При этом существует вероятность, что в промежуток времени между чтением и записью слова в нем изменятся другие биты и при записи они будут затерты.