Step 7 Auf alte Einstellung zurückkehren ...

spirit

Level-1
Beiträge
961
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

hänge grad an einem Problem. Glaube ist nicht so kompliziert und doch komme ich auf keinen grünen Zweig.

Über ein Display sind fünf unterschiedliche Varianten anwählbar, die bearbeitet werden können ...

Beispiel:


Bei Betätigung der Schaltfläche1 (Variante1) werden der Merker1 gesetzt und die Merker 2-4 rückgesetzt.


Gibt es nun eine einfache Möglichkeit sich zu merken, welche Variante vor dem Umschalten auf eine andere Variante angewählt war? :confused:


Der Sinn dahinter ist, dass wenn nach Variantenwechsel z.B. nicht innerhalb von 30s die Taste X gedrückt wird, wieder automatisch auf die ursprüngliche Variante zurückgewechselt wird.
 
Übernahme der neuen Variante nur bei erfolgreichen Wechsel.

Soll heißen: Anforderung geht in einen Anforderungsspeicher
wird die Anforderung quittiert geht die gewählte Anforderung "online"

Tipp: Weise deinen Zuständen Zahlen zu, so kannst du a) leichter z.B. mit SPL in AWL oder CASE in SCL die einzelnen Varianten verwalten und b) ist es für die Leute nach Dir einfacher zu verstehen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke VL,

was ich aber daran noch immer nicht verstehe - wie kann ich mir merken, dass z.B. beim Umschalten auf Variante 3 zuvor Variante 1 angewählt war, usw. ?
 
Müssen die Merker direkt gesetzt werden? Wenn nicht. Warte doch mit dem setzen bis die Taste-X gedrückt wurde und speichere den Zustand vorher in einem Zwischenspeicher.

Wenn sie sofort gesetzt werden müssen. Sichere die Merker die zuvor gesetzt waren zuerst ein einen Savespeicher.

Das ist übrigens einfacher wenn du Anlagenzuständen/Betriebsarten/Befehlshoheiten statt Boolschen Merkern eine Zahl zuweist.

z.B. 1 = Automatik 2 = Hand 3 = Uhr etc. Das vereinfacht das Manipulieren der Zustände erheblich und lässt sich viel einfacher erweitern sowie durch Fifos, Trends etc. jagen.

mfG René
 
du musst einen zusätzlichen Anforderungsspeicher einführen.
wird aus diesem Anforderungsspeicher nicht quittiert und übernommen gilt weiterhin die bereits aktivierte Variante.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kleines Beispiel wie ich sowas ähnliches handhabe.

#BefehlVonLS befiehlt mir welche Untergeordnete Betriebsart ich zu nutzen habe.
Wenn ich jetzt einen Brand habe. Soll die echte Betriebsart die Untergeordnete Betriebsart überschreiben. Und bei wegfall soll die vorherige Betriebsart wieder kommen.

Code:
CASE #BefehlVonLS OF
  1:  #BetriebsartIntern := 1; // Auto
      #BefehlVonLS := 0;
  2:  #BetriebsartIntern := 2; // Hand
      #BefehlVonLS := 0;      
  3:  #BetriebsartIntern := 3; // Uhr
      #BefehlVonLS := 0;      
END_CASE;


IF #Brand THEN // Brandbetrieb
    #BetriebsartAnLS := 4;
ELSE
  #BetriebsartAnLS := #BetriebsartIntern;
END_IF;

So ähnlich kannst du das bei dir auch machen. Wenn deine Taste gedrückt wird schiebe die Betriebsart in #intern. #Betriebsartaktiv schiebst du nach BetriebsartSave. Intern wird sofort nach #Betriebsartaktiv geschrieben. solange der Timer läuft und TasteX nicht gedrückt bleibt dass so wenn Timer nicht mehr läuft schreibe BetriebsartSAVE wieder zurück nach Betriebsartaktiv.

mfG René
 
ein Beispiel als FC (weil ich gerade einen leeren offen hatte ... )

Code:
FUNCTION FC 4 : VOIDTITLE =
VERSION : 0.1




VAR_INPUT
  in1 : BOOL ;    
  in2 : BOOL ;    
  in3 : BOOL ;    
  quitt : BOOL ;    
END_VAR
VAR_IN_OUT
  actVar : INT ;    
  tempVar : INT ;    
END_VAR
BEGIN
NETWORK
TITLE =




      U     #in1; 
      SPBN  two; 
      L     1; 
      SPA   act; 


two:  U     #in2; 
      SPBN  thre; 
      L     2; 
      SPA   act; 


thre: U     #in3; 
      SPBN  else; 
      L     3; 
      SPA   act; 


else: L     #actVar; 


act:  T     #tempVar; 


      U     #quitt; 
      SPBN  end; 
      L     #tempVar; 
      T     #actVar; 
end:  NOP   0; 
END_FUNCTION
 
Zuletzt bearbeitet:
Ungetestet aber so könnte das funktionieren. Der Timer ist ein TOF.

Code:
CASE #BefehlVonLS OF
  1:  #BetriebsartIntern := 1; // Auto
      #BefehlVonLS := 0;
  2:  #BetriebsartIntern := 2; // Hand
      #BefehlVonLS := 0;      
  3:  #BetriebsartIntern := 3; // Uhr
      #BefehlVonLS := 0;      
END_CASE;


NichtBest(IN := (#BetriebsartIntern <> #BetriebsartAnLS),
             PT := T#30S);




   IF NichtBest.Q THEN // Solange vorgewählt 
    #BetriebsartSave := #BetriebsartAnLS; // Betriebsart sichern
    #BetriebsartAnLS := #BetriebsartIntern; // Neue Betriebsart vorübergehend setzen.
   END_IF;
   
   IF NichtBest.Q AND #TasteX THEN
       #BetriebsartSave := #BetriebsartIntern; // Wenn wärend Zeitraums Taste gedrückt Save mit Vorwahl überschreiben
   ELSE
       #BetriebsartAnLS := #BetriebsartSave; // Wenn nicht bestätigt innerhalb Zeitraum Save überschreibt vorwahl und aktiven zustand
     #BetriebsartIntern := #BetriebsartSave;
   END_IF;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für eure Beispiele - aber ich komme irgendwie nicht voran; zudem hat sich auch noch eine Aufgabenänderung ergeben ...

Ich habe jetzt mal den Code so aufgebaut, dass die Schaltflächen über Zahlen angesprochen werden:

Code:
      U     "OP_Var(1)"
      SPBN  Var2
      L     1
      SPA   Anz

Var2: U     "OP_Var(2)"
      SPBN  Var3
      L     2
      SPA   Anz

Var3: U     "OP_Var(3)"
      SPBN  Var4
      L     3
      SPA   Anz

Var4: U     "OP_Var(4)"
      SPBN  Var5
      L     4
      SPA   Anz

Var5: U     "OP_Var(5)"
      SPBN  Ende
      L     5

Anz:  T     "DB_System".AgzVar

Ende: NOP   0

Je nachdem welche Schaltfläche angewählt wurde, blinkt diese animiert.

Soweit, so gut!


ABER:

Nun soll im ersten Schritt nach Anwahl einer anderen Variante über einer Schaltfläche "Abbruch" diese Wahl rückgängig gemacht werden können; also ich müsste mir sozusagen merken, welche Variante ursprünglich angewählt war.

Könnte das in obigen Code integriert werden? :confused:


Lieben Dank ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
     O     "OP_Var(1)"
     O     "OP_Var(2)"
     O     "OP_Var(3)"
     O     "OP_Var(4)"
     O     "OP_Var(5)"
     FP    "FM"
     SPBN ENDE
     L     "DB_System".AgzVar
     T     "DB_System".AltAgzVar

 
      U     "OP_Var(1)"
      SPBN  Var2
      L     1
      SPA   Anz

Var2: U     "OP_Var(2)"
      SPBN  Var3
      L     2
      SPA   Anz

Var3: U     "OP_Var(3)"
      SPBN  Var4
      L     3
      SPA   Anz

Var4: U     "OP_Var(4)"
      SPBN  Var5
      L     4
      SPA   Anz

Var5: U     "OP_Var(5)"
      SPBN  Ende
      L     5

Anz:  T     "DB_System".AgzVar

Ende: NOP   0
 
Oder so:
Code:
      U     #BA_Auto
      SPBN  Auto
      L     #Akt_BA                     // Aktuelle Betriebsart sichern
      T     #Save_BA
      L     1                           // Neue Betriebsart vorwählen (1)
      T     #New_BA
Auto: NOP   0




      U     #Uebernahme
      SPBN  Ueb
      L     #New_BA                     // Vorgewählte BA auswählen
      T     #Akt_BA
Ueb:  NOP   0


      U     #Abbruch
      SPBN  abbr
      L     #Save_BA                    // Gescihterte BA auswählen
      T     #Akt_BA
      L     0                                 // Vorgewählte BA löschen
      T     #New_BA
abbr: NOP   0

Jetzt kannst du den Uebernehmen Knopf ja einfach einblenden wenn 0 in New_BA steht somit kann man nach Abbrechen nicht mehr eine schonmal vorgewählte BA einlocken.

mfG René
 
Nur ... wie kann ich abfragen, welche Variante vor dem Wechsel aktiv war?

Wenn du bei der Anwahl den vorherigen Status speicherst vielleicht?
Ich würde es wie folgt machen:
Wenn eine Anwahl erfolgt, den Wert zunächst als "angewählt" sichern.
Den aktuellen in als aktuell gespeichert.
Wenn entschieden ist, dass die Anwahl korrekt ist, dann den Wert von "angewählt" nach "aktuell" übertragen.
Zur Sicherheit kannst du vor dem "aktuell" den Wert nach "vorherig" sichern.


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Lieben Dank euch! :s12:

Hat nun noch alles supi geklappt - habe auch noch die Situation eingebaut, dass nach Anwahl einer neuen Variante diese solange animiert blinkt, bis sie schließlich quittiert wurde. Ein Abbruch ist nur möglich, während die ausgewählte Variante noch blinkt ...
 
Zurück
Oben