für die Konvertierung von gray-codierten Encoderpositionen (24 Bit) nehme ich folgenden Code:
FUNCTIONGRAY_TO_BIN:DWORDVAR_INPUT Signal:DWORD; (*encodersignal*)END_VARVAR local :DWORD; ix   :INT; Mask  :DWORD;END_VAR(*Bit23*)Mask:=SHR(Mask,1); (*adoptbitmask*)IF((localANDMask)<>DWORD#16#00000000)THENIF((localAND(SHR(Mask,1)))=DWORD#16#00000000)   THENlocal:=localOR(SHR(Mask,1));   ELSElocal:=localANDNOT(SHR(Mask,1));   END_IF;END_IF;(*Bit22*)Mask:=SHR(Mask,1); (*adoptbitmask*)IF((localANDMask)<>DWORD#16#00000000)THENIF((localAND(SHR(Mask,1)))=DWORD#16#00000000)   THENlocal:=localOR(SHR(Mask,1));   ELSElocal:=localANDNOT(SHR(Mask,1));   END_IF;END_IF;(*undsoweiterbisBit0*)(*Bit0*)Mask:=SHR(Mask,1); (*adoptbitmask*)IF((localANDMask)<>DWORD#16#00000000)THENIF((localAND(SHR(Mask,1)))=DWORD#16#00000000)   THENlocal:=localOR(SHR(Mask,1));   ELSElocal:=localANDNOT(SHR(Mask,1));   END_IF;END_IF;Gray_to_Bin:=local;END_FOR;
Gebe zu, sieht fürchterlich aus, viel redundanter Code. Habe aber auf die Schnelle keine Möglichkeit gefunden, eine Schleife mit aufsteigender Kontrollvariablen und daraus abgeleitetem absteigenden Bit-Index zu bauen. Die Bit-Abfrage geht leider nur von oben nach unten.
Gruss Rolf
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo User,
es geht tatsächlich einfacher. Folgendes Beispiel rechnet ein Byte Gray-Code in Binärcode um:
bBinCode:=bGrayCodeAND128;(* Bitmaskierung höchstes Bit, 2^n, hier n=8, 2^8=128 *)FORn:=1TO7DO   (* n-1 = 7 Durchläufe für die restlichen Bits *)  bBinCode:=SHR(bBinCode,1)XORbGrayCode;END_FOR
Warum und wie diese Verfahren funktioniert ist auf mehreren Seiten im Internet zum Teil sehr anschaulich beschrieben.
Für andere Variablen-Größen muss nur der Variablen-Typ und 'n' angepasst werden, es bleibt bei vier Programmzeilen.
Gruß, Jan
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
weiß jemand eine Funktion die mir eine Variable mit Gray-Code codierten Inhalt in einen Dual codierten Inhalt umwandelt?
Dual-Code in Gray-Code hab ich schon (in C/C++).
mfG.
fujitaufan
Hallo,
für die Konvertierung von gray-codierten Encoderpositionen (24 Bit) nehme ich folgenden Code:
Gebe zu, sieht fürchterlich aus, viel redundanter Code. Habe aber auf die Schnelle keine Möglichkeit gefunden, eine Schleife mit aufsteigender Kontrollvariablen und daraus abgeleitetem absteigenden Bit-Index zu bauen. Die Bit-Abfrage geht leider nur von oben nach unten.
Gruss Rolf
Hallo User,
es geht tatsächlich einfacher. Folgendes Beispiel rechnet ein Byte Gray-Code in Binärcode um:
Warum und wie diese Verfahren funktioniert ist auf mehreren Seiten im Internet zum Teil sehr anschaulich beschrieben.
Für andere Variablen-Größen muss nur der Variablen-Typ und 'n' angepasst werden, es bleibt bei vier Programmzeilen.
Gruß, Jan