Motor Anlauf Simulation

Cheater10

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

Grundsätzliche Infos:
- S7-CPU314C-2 PN/DP
- TIA-Portal Version V12 SP1
- Programmiersprache = AWL

Ablauf:
Ich habe eine Aufgabenstellung erhalten... diese sieht folgendermassen:
Es soll ein Motor Anlauf mit 8 LED's simuliert werden.
Stufe_1 = 4s
Stufe_2 = 2s
Stufe_3 = 1s
Stufe_4 = 500ms

Für mich klar, Ablaufsteuerung mit einem Timer in der Transition.
Nach einer gewissen Anzahl Durchläufen, wird die Stufe erhöht.

Funktioniert auch alles soweit

Problem:
Ich habe in der Transition immer denselben Timer (T_LED_Mot) verwendet.
Nun muss ich aber die Zeiten der 4 verschiedenen Stufen anhand eines Zählers in den Transition Timer (T_LED_Mot) legen können.
Mit Laden, Transferieren funktioniert das nicht, da Laden, Transferieren immer abgearbeitet wird und nicht VKE abhängig.

Könnte mir hier jemand einen alternativen Lösungsansatz nennen, oder sagen wie ich 4 unterschiedliche Zeiten in einen Timer legen kann.
Mit Sprüngen habe ich auch schon probiert. Kein Erfolg.

Im Strukturierten Text würde ich mit einer CASE..OF Bedingung arbeiten und 4 Konstanten für die Timer Werte anlegen. Diese werden dann anhand der CASE Bedingung beschrieben.

Ich danke euch im Voraus für eure Unterstützung!

Sehe den Wald vor lauter Bäumen nicht!!!!!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Antwort Aventinus.

Ich könnte 4 Timer verwenden... aber meines Erachtens keine schöne Lösung.
Außerdem kann es doch nicht sein, dass bei Siemens solch eine Funktion nicht elegant und einfach gelöst werden kann.
 
Hallo.

Das sollte eigentlich mit einem erweiterbaren Multiplexer gehen. Der Name ist "MUX". Kann mich aber nicht mehr erinnern, ob Siemens das Teil in irgendeiner Bibliothek mit drin hat.
Alternativ könntest Du mit einem ARRAY[0..3] OF TIME arbeiten (vielleicht sogar besser als ein Multiplexer).

VG Carsten
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wäre OB1_PREV_CYCLE als Eingangsparameter (#Time ) in einem FB wo es die Zeit OB1-Zyklisch abgefragt und summiert (#TimeS ) wird nicht eine Idee?

So:

1 (TimeS bei bedarf initialisieren ... etc)
2 #TimeS zwischen 0 UND 4000 dann...
3 #TimeS zwischen 4000 UND 6000 dann...
4 #TimeS zwischen 6000 UND 7000 dann...
5 #TimeS zwischen 7000 UND 7500 dann...
6 #TimeS = #TimeS + #Time
 
Falls man nicht direkt auf Peripherie I/O greift ist m.M.n. dieses "Hack" genau so ... genau wie ein Timer .

Die Ausgänge werden so oder so erst am Zyklusende gesetzt !

(Ich hätte eine Frage : Können bei einem Timer verschiedene Zeiten abgefragt werden während eines OB1 Zyklus , der zB. 300 ms dauert ? )
 
Nicht getestet !
Code:
FUNCTION_BLOCK FB 2TITLE =
VERSION : 0.1




VAR_INPUT
  _time : INT ;    
  start : BOOL ;    
END_VAR
VAR_OUTPUT
  Stufe1 : BOOL ;    
  Stufe2 : BOOL ;    
  Stufe3 : BOOL ;    
  Stufe4 : BOOL ;    
END_VAR
VAR
  _times : DINT ;    
  startF : BOOL ;    
END_VAR
BEGIN
NETWORK
TITLE =


      U     #start; 
      FP    #startF; 
      SPBN  IF0; 
      L     L#0; 
      T     #_times; 
IF0:  NOP   0; 
NETWORK
TITLE =


      U(    ; 
      L     #_times; 
      L     L#0; 
      >=D   ; 
      )     ; 
      U(    ; 
      L     #_times; 
      L     L#4000; 
      <D    ; 
      )     ; 
      =     #Stufe1; 

      U(    ; 
      L     #_times; 
      L     L#4000; 
      >=D   ; 
      )     ; 
      U(    ; 
      L     #_times; 
      L     L#6000; 
      <D    ; 
      )     ; 
      =     #Stufe2; 

      U(    ; 
      L     #_times; 
      L     L#6000; 
      >=D   ; 
      )     ; 
      U(    ; 
      L     #_times; 
      L     L#7000; 
      <D    ; 
      )     ; 
      =     #Stufe3;
 
      U(    ; 
      L     #_times; 
      L     L#7000; 
      >=D   ; 
      )     ; 
      U(    ; 
      L     #_times; 
      L     L#7500; 
      <D    ; 
      )     ; 
      =     #Stufe4; 
NETWORK
TITLE =


      L     #_times; 
      L     #_time; 
      +D    ; 
      T     #_times;
END_FUNCTION_BLOCK
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Falls man nicht direkt auf Peripherie I/O greift ist m.M.n. dieses "Hack" genau so ... genau wie ein Timer .

Die Ausgänge werden so oder so erst am Zyklusende gesetzt !

(Ich hätte eine Frage : Können bei einem Timer verschiedene Zeiten abgefragt werden während eines OB1 Zyklus , der zB. 300 ms dauert ? )

IEC Timer müssen in Schleifen (auch wenn sie auch vor der Schleife aufgerufen sind ) unbedingt nochmals aufgerufen/geklont werden wenn man sie mehrmals im selben OB1 Zyklus nach Restzeit abfragt : die schreiben den Restzeitoutput nur wenn sie "durchlaufen" sind (weil FB-s).
S5Timer schreiben den Restzeitoutput in eine interne Variable die immer abgefragt werden kann .

Bin selbst darauf gekommen !:eek:
 
Zurück
Oben