Технические FAQs

Задать вопрос

Как в Vijeo Citect обращаться к отдельному биту в слове?

Для облегчения обслуживания и модификации системы мы рекомендуем выделять биты из слов на уровне ПЛК и передавать их в Vijeo Citect в виде дискретных переменных.

Если модификация программы ПЛК невозможна, то для ряда протоколов, например 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 этапа. Сначала слово считывается во временную переменную. Затем в ней изменяется требуемый бит. И наконец, исходное слово полностью перезаписывается измененным. При этом существует вероятность, что в промежуток времени между чтением и записью слова в нем изменятся другие биты и при записи они будут затерты.

Вы нашли ответ на свой вопрос?
Как мы можем улучшить информацию?