TGStat
TGStat
Type to search
Advanced channel search
  • flag English
    Site language
    flag Russian flag English flag Uzbek
  • Sign In
  • Catalog
    Channels and groups catalog Search for channels
    Add a channel/group
  • Ratings
    Rating of channels Rating of groups Posts rating
    Ratings of brands and people
  • Analytics
  • Search by posts
  • Telegram monitoring
КОТЭ в АСУ ТП

2 Mar, 21:05

Open in Telegram Share Report

7. Функции GET_BIT и SET_BIT

Не во всех IDE есть обращение к биту в слове через точку.
В CoDeSys это обращение выглядит так: W.0, в TiaPortal так: W.%X0.
А где-то такой возможности нет, и что бы прочитать или записать бит в слово используются функции.

Функция GET_BIT(считать бит из слова) несложная: сдвигаем вправо исходное слово на нужно количество бит, сравниваем с WORD#1 (у нее все биты кроме крайнего правого равны 0) и результат записываем в наш бит. Код функции:
FUNCTION GET_BIT :BOOL
VAR_INPUT
IN :WORD;
NUM :WORD;
END_VAR
VAR
END_VAR

GET_BIT := WORD_TO_BOOL(1 AND SHR(IN, NUM));

В функции SET_BIT(запись бита в слово) нужно вернуть слово с измененным битом. Если бит равен true, то складываем исходное слово с единицей, смещенной на нужное количество бит. Если бит – false, то записываем в исходное слово 0 в нужном бите, инвертируя смещенную единицу на нужное количество бит. Код функции:
FUNCTION SET_BIT : WORD
VAR_INPUT
IN :WORD;
NUM :WORD;
X :BOOL;
END_VAR
VAR
END_VAR

IF X THEN
SET_BIT := IN OR SHL(WORD#1, NUM);
ELSE
SET_BIT := IN AND NOT SHL(WORD#1, NUM);
END_IF;

Применение: передача булевых переменных через холдинг регистры в протоколе MODBUS RTU. В коде использование функций GET_BIT и SET_BIT выглядит вот так:
(*xVarRead – бит, считаный из слова; wVar – слово из которого читаем бит, 10 – номер бита в слове*)
xVarRead := GET_BIT(wVar, 10);

(*wVar – слово в которое пишем бит; 10 – номер бита в слове; xVarWrite – бит, который записываем в слово*)
wVar := SET_BIT(wVar, 10, xVarWrite);

Код функций не мой, выкладываю с разрешения автора.

#Программирование #CoDeSys23

Группа в VK

70 0 0 7 7
Catalog
Channels and groups catalog Channels compilations Search for channels Add a channel/group
Ratings
Rating of Telegram channels Rating of Telegram groups Posts rating Ratings of brands and people
API
API statistics Search API of posts API Callback
Our channels
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Read
Академия TGStat Telegram Research 2019 Telegram Research 2021 Telegram Research 2023
Contacts
Справочный центр Support Email Jobs
Miscellaneous
Terms and conditions Privacy policy Public offer
Our bots
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot