Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched.
Close
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