Step 7 SCL Struct beschreiben

Hadante

Level-2
Beiträge
78
Reaktionspunkte
14
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ich habe ein kleines SCL Programm geschrieben in einem FB, im DI liegen jetzt ein Struct mit Fehlermeldungen die im restlichen Programm weiter verarbeitet werden sollen.

Jetzt habe ich das Problem dass ich im Programmablauf die Bits beschreibe diese aber nicht gelöscht werden, daher wollte ich am Anfang des Bausteins alle Bits in diesem Struct löschen.
Gibt es eine Einfache Möglichkeit den ganzen Struct auf 0/false zu schreiben? Also das ich nicht jedes Bit auf 0 ziehen muss und ohne Absolute Adressierung, oder das im idb und damit im weiteren Programm die Symbolik verloren geht?

Ist jetzt nur ein Programmauszug

Code:
VAR 
  sError : STRUCT
    Ana272              : BOOL ;  
    Ana274              : BOOL ;  
    Abweichung_Teach    : BOOL ;  
    Pos_Min             : BOOL ;  
    Pos_Max             : BOOL ;  
    Pos_Max_Takt        : BOOL ;  
    Abweichung_Auto     : BOOL ;  
  END_STRUCT;
END_VAR


IF  (sPos_gross - sPos_klein) > 50.0 THEN
    Abweichung_Teach:= TRUE;
END_IF;

Vielen Dank im Voraus für eure Hilfe/Anregungen
 
Für logik muss ein IF THEN Anweisung oft mit ein ELSE Anweisung kombiniert werden.

Code:
IF  (sPos_gross - sPos_klein) > 50.0 THEN
    Abweichung_Teach:= TRUE;
ELSE
    Abweichung_Teach:= FALSE;
END_IF;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt habe ich das Problem dass ich im Programmablauf die Bits beschreibe diese aber nicht gelöscht werden, daher wollte ich am Anfang des Bausteins alle Bits in diesem Struct löschen.

Das wär z.B. so möglich

Code:
VAR   sError : STRUCT
    Ana272              : BOOL ;  
    Ana274              : BOOL ;  
    Abweichung_Teach    : BOOL ;  
    Pos_Min             : BOOL ;  
    Pos_Max             : BOOL ;  
    Pos_Max_Takt        : BOOL ;  
    Abweichung_Auto     : BOOL ;  
  END_STRUCT;
  aError AT sError: word ;
  
END_VAR




   BEGIN


aError := 0;

du setzt eine Sicht auf deine Strukur. eine Struktur wird ja immer an die Wortgrenze aufgemacht damit passt also immer ein Wort rein.
Und das wort kannst du dann direkt mit 0 beschreiben somit sind alle Bool in der Struktur ebenfalls 0

mfG René
 
Eigentlich peinlich das ich ein ein IF THEN ELSE vorgeschlagen habe.
Wenn es nur handelt um einfache Logik dann geht das so:
Code:
Abweichung_Teach := ((sPos_gross - sPos_klein) > 50.0) ;
 
@vollmi das war mein erster Versuch

Code:
 BEGIN
//=================================================== Variablen löschen
sError:= 0;

Da meckert er falscher Datentyp und wenn der Struct länger wird als ein Wort wird das glaube ich nicht funktionieren.


@JesperMP
Gut Else ist die einfachste Lösung, aber da es sich am Ende um einige Variablen Handeln wird brauche ich jedes mal dafür mindestens eine Zeile
Oder die Problematik ist auch wenn es eventuell Variabeln sind die an mehreren Stellen beschrieben werden können, diese müsste man dann eh am Anfang zurück setzen.

Daher war meine Frage eigentlich auf das ausgerichtet ob man Variabeln so deklarieren oder beschreiben kann das ein Symbolisch definierter Bereich komplett überschrieben werden kann im SCL.
Die einzige möglichkeit was ich jetzt eigentlich kennen würde ist den Struct 2x anzulegen und den ganze Struct zu kopieren, damit würde ich aber jedes mal das Doppelte an Daten ben (versucht habe ich es noch nicht aber ich habe ein Programm da wo so etwas gemacht wird).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@vollmi

Sorry hatte mich jetzt verlesen.
Hate schon mal etwas ähnliches mit AT versucht da hatte ich dann aber nur noch das Wort im DB.
Das war irgendwie

Code:
Error AT sError : Struct ;
Ana272 :BOOL;
.
.
.

vom Prinzip her das was ich suche, jetzt ist nur die Frage Funktioniert das auch wenn es länger als ein Wort wird?
 
Er setzt die Bool bedingt will aber mit einer unabhängigen Bedingungen alle Bool in der Struktur zurücksetzen zusammen in einem Schwung.
Das schreibt er aber nicht. Kann sein das es ist richtig, kann sein das es ist falsch.

Es ist schön wenn alles klar und deutlich in 1. Eintrag beschrieben ist.
Passiert aber selten ... !
 
Zurück
Oben