TIA Slice Zugriff in einer For-Schleife

SPSnewbie91

Level-2
Beiträge
272
Reaktionspunkte
18
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Hardware: CPU 1516
Software: TIA V16

Ich hätte eine Frage bezüglich Slice-Zugriffe.
Und zwar möchte ich über einen Quittiertaster alle Störungen einens Störmeldewortes rücksetzen.
1677676892685.png
Realisiert habe ich das so
1677676925293.png
Jetzt meine Frage, ob man das auch schlanker lösen kann? In etwa so?
1677677073589.png
Es geht mir rein um den Lerneffekt. Mir ist klar, dass ich das ganze auch über ein Array lösen könnte. Wieso funktioniert es mit einem Slice-Zugriff nicht oder kann man das irgendwie anders lösen?

Grüße
Philipp
 
Du hast ja ein Wort, also kannst du einfach das ganze Wort beschreiben:
Code:
"Meldungen_DB".Bitmeldungen[0] := 0;

Die Slice-Zugriffe sind, soweit ich weiss, nicht indirekt in einer Schleife addressierbar...
 
Das ist vom Compiler her einfach nicht vorgesehen und für die Ausführung auf einer Intel-Maschine auch nicht ideal.

Aktuelle Prozessoren speichern Bool-Operatoren als Byte ab und lösen auch alle logischen Funktionen auf diese Art und Weise. Der Code
Code:
"Meldungen_DB".Bitmeldungen[0].%X0 := false
wird vom ompiler in etwa so verarbeitet:
Code:
"Meldungen_DB".Bitmeldungen[0] := "Meldungen_DB".Bitmeldungen[0] AND W#16#FFFE
Eine komplexere Zuweisung sieht entsprechend komplexer aus.

Das Ganze noch weiter zu indizieren hat Siemens einfach im Compiler nicht vorgesehen weil es eigentlich nur eine Notlösung ist.

Du wirst auch in der Dokumentation zu S7 1500 Motion Control bei den Statuswörtern, die als DWORD ausgeführt sind entsprechende Hinweise finden, den Slice-Zugriff nur einmalig zu machen.

lg
 
Also mit gather und scatter kannst du Wörter in Arrays zerlegen und umgekehrt.

Also erst Word to Array und dann deine for Schleife und dann wieder Array to Word.
 
Zurück
Oben