für die Konvertierung von gray-codierten Encoderpositionen (24 Bit) nehme ich folgenden Code:
FUNCTIONGRAY_TO_BIN : DWORDVAR_INPUT
 Signal : DWORD; (* encoder signal *)END_VARVAR
 local : DWORD;
 ix   : INT;
 Mask  : DWORD;END_VAR(*Bit23*)Mask :=SHR(Mask, 1); (* adopt bit mask *)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); (* adopt bit mask *)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); (* adopt bit mask *)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=7DurchläufefürdierestlichenBits*)
  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