Macht Siemens in dem ENCO-Baustein auch so
Ja stimmt, ENCO geht auch, ist auch vermutlich besser wenn der TE diese verwendet. Mit der Formel von Thomas scheint es ein paar Probleme zu geben... Dazu später.
Mit Schleifen hab ich natürlich kein Problem, wenn es mir einen Arbeits-Vorteil verschafft schreib ich eine.
Die SPS hat eh genug Leistung.
Tips:
1: Bei Wordverknüpfungen mit Konstanten kann die Konstante direkt in der Operation angegeben werden, z.B. "UD DW#16#80".
2: Will man nur ein einzelnes Bit testen, dann ist es schneller und kürzer, das Bit in das Statusbit A1 zu schieben oder zu rotieren
3: ... sondern kann direkt abhängig von A1 mit SPZ oder SPP springen.
Danke für die Tipps, hab sie gleich mal alle angewandt...
1: Wusste ich absolut nicht! Steht zwar in der Hilfe aber... :roll: Sehr praktisch weil man für den Maskierwert den AKKU1 nicht ändern muss, bzw. AKKU2 nicht verliert.
Das hätte ich schon öfters gebraucht.
2: Wusste ich so halb. Mit Rotieren kann man ENCO sehr einfach nachprogrammieren.... Siehe unten.
3: Die verschiedenen Sprungoperationen kenn ich, hatte mir aber abgewöhnt diese zu verwenden damit der Code für die Kollegen leichter zu lesen ist. Wenn klar da steht (L 0 - >I - SPB) kapiert das jeder auf Anhieb. Mittlerweile hab ich die Möglichkeit die verweden schon fast wieder vergessen...
Mit RDLA und A1 lässt sich ENCO sehr einfach realisieren...
Ich hatte mich dann noch mit der Formel von Thomas ein wenig weiter gespielt. Mit einem Wort funktioniert sie tadellos, bei einem DWORD gibt's ein merkwürdiges Verhalten. Setzt man alle Bits bis 2.7 stimmt das Ergebnis noch, setzt man dann zusätzlich das Bit 3.0 dann gibt's einen Wertesprung... komisch...
Danach hab ich die Funktion nochmal so umgeschrieben das das DWORD getrennt als 2 Worte behandelt wird. Das liefert dann auch wirklich für alle Werte die korrekte Zahl von 0-37 zurück...
Naja, so schön is nicht... :roll:
Die Variante ENCO oder RLDA ist aber wahrscheinlich nach Jahren wieder einfacher zu verstehen. Sonst hab ich wieder das Erlebnis...
"Was zum ***** hast du dir den dabei gedacht?!?!?"...
Fazit: Lustiges Gedankenexperiment, Viele Wege führen nach Rom, manche sind nur
geiler... :twisted:
PS: Jetzt aber genug vom Bitwi**en...
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
UPDATE: PN/DP hat ein
Siemens-FAQ gefunden in dem dieser
Algorithmus pikfein erläutert wird. Da steht dann auch drin warum man ihn
nicht für DWORD verwenden kann....
Maskieren vom niederwertigsten oder höchstwertigen gesetzten Bit in WORD und DWORD Variablen.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------