L #Stoerungen //Word mit Störungsbits, STAT im Inz-DB
UN #Sicherung //Eingang
S Bit0 des Störungswords....?!
Ich kann es direkt adressieren, aber wenn ich in der Schnittstelle des I-DB was ändere stimmt die Adresse der direkten Adressierung nicht mehr...
Geht da irgendwas mit Pointer.... mir ist die schreibweise nicht geläufig. Oder sollte ich mir das Word in einen Puffer laden, diesen bearbeiten und dann zurückschreiben!?
Also grob so:
L #Störungen //word
T Puffer //word, immer gleiche adresse, CPU weit... also MW
LAR1 ##Temp_Word //Lade Adresse von Temp Word
// Verknüpfung mit einem Bit:
U L [AR1,P#0.0] //Beim offset (P#0.0) kannst dir dann das bit aussuchen das du aus deinem Word benötigst
U L [AR1,P#0.1]
S L [AR1,P#0.2] //Wenn erstes Bit und zweites Bit des Temp Word dann setze drittes Bit des Temp Word
Hallo,
du könntest auch anstelle des in deinem eigenen Beispiel verwendeten MW100 ein ARRAY[1..16] im TEMP-Bereich deines FB deklarieren und das Störungs-Wort dorthin transferieren, in dem TEMP-ARRAY deine Änderungen machen und dieses dann wieder auf das Störungs-Wort zurück-transferieren. Also etwa so :
Code:
im TEMP-Bereich:
Stoerungen_Array : ARRAY [1..16] of BOOL
im Code-Bereich:
L p#Stoerungen_Array
LAR1
L #StoerungsWord
T LW [AR1,p#0.0]
U e4.7
S Stoerungen_Array[3]
U e4.6
S Stoerungen_Array[4]
...
L LW [AR1,p#0.0]
T #StoerungsWord
Achtung - dies ist ein ungetesteter "Quick-and-dirty"-Code. Es sollte aber so funktionieren ...
...Über Pointer gehts auch man darf nur nicht das offset des AR2 vergessen
also:
TAR2 //Die in AR2 (Multiinstanz!) stehende Adresse in Akku1 schreiben
UD DW#16#FFFFFF //Ausmaskieren unwichtiger Informationen
LAR1 P##Stoermeldung //AR1 mit der Adresse von "#Stoermeldung" beschreiben
+AR1 //Die in Akku1 stehende Adresse (von Multiinstanz) zur Adresse von "#Stoermeldung" addiert und endgültig ins AR1 geschrieben
U #Ueberlast_Motor1
S [AR1,P#0.0] // Bit 0 der Adresse von "#Stoermeldung"
U #Ueberlast_Motor2
S [AR1,P#0.1] // Bit 1 der Adresse von "#Stoermeldung"
vorher sollten aber AR1 und AR2 gesichert und später wieder hergestellt werden
Ich kann da Vierlagig nur voll und ganz zustimmen, Schmiermerker sollten in der heutigen Zeit der Vergangenheit angehören. Weiter sollte man sich gedanken über wiederverwertbarkeit von Funktionen machen. Und da geht das gar nicht...
Ging doch früher auch! Solange nicht mehrere Bausteine paralell bearbeitet werden, sehe ich da keine Probs.
Aber schön ist es nicht. Ich werde mich damit mal beschäftigen wenn ich mal mehr Ruhe zum proggen habe. Derzeit reise ich nur von Projekt zu Projekt und passe das Standardprogramm an. Da bleibt keine Zeit zum optimieren... oder sich in neue schreibweisen einzuarbeiten.
Aber im Sommer ist bei uns ruhiger... dann kann ich mich mit dem Lappi auf Terasse setzen und bei ein paar Weißbier in Ruhe über Bits, Bytes usw. nachdenken.