Operacje na Bitach INPUT (BNI007Z) cz1.

Ponieważ w ostatnim artykule pokazałem zastosowanie koncentratora IO-Link, w którym wykorzystano operacje na typie danych WORD, w tym przykładzie chcę pokazać działanie na bitach wyciągniętych z tego typu danych

Stworzyłem prostą funkcję, której celem jest zapisywanie na wyjściach, czy dany bit wyciągnięty ze zmiennej typu WORD jest 1 czy 0.

//BYTE 00000000 THIS ---> 00000000
#Bit0 := (#Word AND 16#01) <> 0;
#Bit1 := (#Word AND 16#02) <> 0;
#Bit2 := (#Word AND 16#04) <> 0;
#Bit3 := (#Word AND 16#08) <> 0;
#Bit4 := (#Word AND 16#10) <> 0;
#Bit5 := (#Word AND 16#20) <> 0;
#Bit6 := (#Word AND 16#40) <> 0;
#Bit7 := (#Word AND 16#80) <> 0;

//Byte 00000000 <---THIS  00000000
#Bit8 := (#Word AND 16#100) <> 0;
#Bit9 := (#Word AND 16#200) <> 0;
#Bit10 := (#Word AND 16#400) <> 0;
#Bit11 := (#Word AND 16#800) <> 0;
#Bit12 := (#Word AND 16#1000) <> 0;
#Bit13 := (#Word AND 16#2000) <> 0;
#Bit14 := (#Word AND 16#4000) <> 0;
#Bit15 := (#Word AND 16#4000) <> 0;

W funkcji, w parametrach formalnych wejściowych, przyjąłem typ danych „WORD”, natomiast w parametrach formalnych wyjściowych – zmienne „Bit1-9”.

W ostatnim artykule zrobiłem Excela z zapisem HEX https://asterfekt.pl/io-link-master-bni00fw-slave-bni007z/

Wyrażenie #Bit0 := (#Word AND 16#01) <> 0; sprawdza, czy zmienna typu WORD ma ustawiony bit na pozycji odpowiadającej wartości 16#01. Jeśli wynik operacji AND jest różny od zera, wartość zostanie ustawiona na TRUE, w przeciwnym razie na FALSE.

W głównym programie main wstawiamy naszą funkcję, co umożliwia obserwację poszczególnych bitów.

Istnieje również możliwość przekształcenia zmiennej tagu %IW68 na typ danych BOOL i operowanie bezpośrednio na poszczególnych bitach, takich jak %I68.0, %I68.1, itd. Jednakże rozwiązanie, które zaimplementowałem, również jest skuteczne i moim zdaniem bardziej uniwersalne.

Dodaj komentarz