Bit im Word, InstanzDB...

AndreK

Level-1
Beiträge
415
Reaktionspunkte
27
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie ist folgendes möglich:

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

UN blabla
S bit1

L Puffer
T #Störung

Kleiner Tipp wäre nett
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aha, das ist viel CODE um ein Bit zusetzen :)

ich dachte da eher an folgende Variante:
1. Lade Word in den Akku
2. Setze ein Bit im Word
3. Schreibe den Akku zurück

Geht das nicht auf einfache weise, ich meine ohne viel Text.

Sonst gehe ich den umweg über einen Puffer:
L #Stoerungen
T "PUFFER_MW" //MW100

UN #Sicherung
S M 100.0
UN #Thermistor
S M 100.1

usw...

L "PUFFER_MW" //MW100
T #Stoerungen
 
So kannst du auf einzelne Bits zugreifen:
Code:
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

godi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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 ...

Gruß
LL
 
Adressierung indirekt

...Ü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

dazu gibt's bei Siemens auch ein SR
 
Danke an alle...

... aber das ist mir zuviel schreibarbeit :)

Der Code sollte möglichst kurz und knackig sein, auch sollte der Bausteinkopf nicht zu voll werden.
Einfach nur der Übersichtlichkeit wegen.

Aber gut zu wissen wie es geht...!

Ich werde es mit einem Puffer_Merkerword machen das ich Systemweit nur als Pufferword benutzen werde.
 
... aber das ist mir zuviel schreibarbeit :)

Der Code sollte möglichst kurz und knackig sein, auch sollte der Bausteinkopf nicht zu voll werden.
Einfach nur der Übersichtlichkeit wegen.

Aber gut zu wissen wie es geht...!

Ich werde es mit einem Puffer_Merkerword machen das ich Systemweit nur als Pufferword benutzen werde.

Puhhhh....

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...
 
Warum sollte das nicht gehen ?

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.
 
Zurück
Oben