FrankTheTank
Level-1
- Beiträge
- 41
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo allerseits!
Ich werde gerade narrisch bei dem Versuch, eine Funktion zu schreiben, welche mir aus einem DWORD das Bit, das am weitesten rechts steht rauszusuchen und mir ein DWORD erzeugt, das nur ein Bit, genau an dieser Stelle hat.
In "occ_eventsX" stehen ein paar Bits drin. Jetzt will ich ein DWORD, dass nur das Bit enthält, welches am weitesten rechts steht. Was ist an dieser Funktion falsch?
Ich schiebe doch die 1 von rechts nach links, und sobald in "occ_eventsX" auch eine 1 steht, dann speicher ich die geschobene 1 in "selected_eventX". Leider klappt das nicht.
Nun hab ich mit dem Variablen beobachten/steuern vom Simatic ein wenig rumgefummelt und es hat sich herausgestellt, dass er mir das Bit, dass am weitesten LINKS steht speichert. Das habe ich doch aber nicht programmiert! :!:
Weiss jemand, was da schief läuft?
mfg,
Frank
Ich werde gerade narrisch bei dem Versuch, eine Funktion zu schreiben, welche mir aus einem DWORD das Bit, das am weitesten rechts steht rauszusuchen und mir ein DWORD erzeugt, das nur ein Bit, genau an dieser Stelle hat.
Code:
DB60.selected_event1 := 0;
DB60.selected_event2 := 0;
FOR index := 0 TO 31 BY 1 DO
IF (DB60.occ_events1 AND SHL(IN := DWORD#16#0000_0001, N := index)) <> 0 THEN
DB60.selected_event1 := SHL(IN := DWORD#16#0000_0001, N := index);
END_IF;
IF (DB60.occ_events2 AND SHL(IN := DWORD#16#0000_0001, N := index)) <> 0 THEN
DB60.selected_event2 := SHL(IN := DWORD#16#0000_0001, N := index);
END_IF;
END_FOR;
Ich schiebe doch die 1 von rechts nach links, und sobald in "occ_eventsX" auch eine 1 steht, dann speicher ich die geschobene 1 in "selected_eventX". Leider klappt das nicht.
Nun hab ich mit dem Variablen beobachten/steuern vom Simatic ein wenig rumgefummelt und es hat sich herausgestellt, dass er mir das Bit, dass am weitesten LINKS steht speichert. Das habe ich doch aber nicht programmiert! :!:
Weiss jemand, was da schief läuft?
mfg,
Frank