This problem came up on plcs.net.
plctalk.net/qanda/showthread.php?t=38070
The times cited for reversing bits seemed a little long so I wrote an example of how to reverse bits on the RMC70/RMC150 just for comparison.
I have an updated version down below.
Thats almost to easy Peter.
I have a somewhat related question. I think you have a good way of dealing with bits and dwords. I don’t see anything about working with bytes or words. Can you move 4 bits at a time from one variable to another?
myVar1.0..3 = myVar2.0..3
I know you can do it this way[code]
myVar1.0 := myVar2.0
myVar1.1 := myVar2.1
myVar1.2 := myVar2.2
myVar1.3 := myVar2.3
[/code]
Now that the RMC has user functions I am taking advantage of them.
Just copy and paste.
This function takes 7.3 microseconds to execute.
(*
REVERSE_BITS
*)
FUNCTION REVERSE_BITS : DWORD
VAR_INPUT
Bits_IN: DWORD;
END_VAR
VAR
Bits: DWORD;
END_VAR
Bits:=Bits_IN;
Bits:=(SHR(Bits,1 ) AND 16#55555555 ) OR SHL(Bits AND 16#5555555,1 );
Bits:=(SHR(Bits,2) AND 16#33333333) OR SHL(Bits AND 16#33333333,2);
Bits:=(SHR(Bits,4) AND 16#0F0F0F0F) OR SHL(Bits AND 16#0F0F0F0F,4);
Bits:=(SHR(Bits,8) AND 16#00FF00FF) OR SHL(Bits AND 16#00FF00FF,8);
REVERSE_BITS:=SHR(Bits,16) OR SHL(Bits,16);
END_FUNCTION