Step 7 AWl DB

PierreB

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

ich probiere mich etwas in AWL, jedoch klappt dies nicht so ganz.
Ich möchte einen Timer in einem FB mit 2 unterschiedlichen Zeiten beschreiben. Wenn E0.3 =0 dann z.B 2s oder wenn E0.3=1 dann 5s
Für den Wert, verwende ich das selbe DBW. Beim umschalten, bleibt immer der gleiche Wert bestehen. In dem Instanz_DB habe ich den den DB10.DBW0 für den variablen Zeitwert verwendet.


Hier mal wie ich versucht habe.

In einem FC geschrieben

U E0.3
L DB10.DBW0
L S5t#5s
T DB10.DBW0

UN E0.3
L DB10.DBW0
L S5T#2s
T DB10.DBW0

Als oder hatte ich es auch schon probiert.
Schon mal danke, für eure Antworten.
 
Wäre es so richtig?
Du must den unerwünschten bzw. unnötigen Code überspringen, damit er nicht ausgeführt wird.
Dein Code bewirkt gar nichts, weil er mit oder ohne Sprung so oder so mit der nächsten Anweisung weitermacht.

Code bedingt ausführen durch überspringen kann man so machen:
Code:
    U E0.3
    SPBN M2
    L S5T#5s
    T DB10.DBW0

M2: UN E0.3
    SPBN M3
    L S5T#2s
    T DB10.DBW0

M3: ...
oder
Code:
    U E0.3
    SPBN M2
    L S5T#5s
    T DB10.DBW0
    SPA M3

M2: L S5T#2s
    T DB10.DBW0

M3: ...
oder
Code:
    U E0.3
    SPBN M2
    L S5T#5s
    SPA M3

M2: L S5T#2s
M3: T DB10.DBW0
oder
Code:
    U E0.3
    SPB M5
    SPA M2

M5: L S5T#5s
    SPA M3

M2: L S5T#2s
M3: T DB10.DBW0
oder ...

Tip 1: beobachte den Code wie er ausgeführt wird
Tip 2: wenn Du nicht weißt wie man in AWL programmiert, dann programmiere in KOP oder FUP. Dann schalte die Ansicht in AWL um und schau Dir an wie der erzeugte AWL-Code aussieht.

Harald
 
Ich möchte einen Timer in einem FB mit 2 unterschiedlichen Zeiten beschreiben. Wenn E0.3 =0 dann z.B 2s oder wenn E0.3=1 dann 5s
Ich verstehe die Aufgabenstellung so, dass ein und derselbe Timer, anhängig von E0.3 mal mit dem Wert 2s und mal mit dem Wert 5s gestartet werden soll.
Aber komischerweise geht es dann darum, einen der beiden Werte in ein DatenWort abzuspeichern.
Das sind doch zwei Paar Schuhe!
Der Timer kann selbstverständlich nur(!) VKE-abhängig mit verschiedenen Werten gestartet werden - hierfür gibt es keine Notwendigkeit, bedingt zu springen, ganz im Gegenteil, wenn man bedingt springt, muss man im Hinterkopf behalten, dass das VKE durch SPB gesetzt wird und das vermeintliche Starten des Timers ggfs nie stattfindet.
In das DatenWort kann selbstverständlich nicht unmittelbar VKE-abhängig ein Wert transferiert werden - er wird VKE-unabhängig immer transferiert, so dass ein bedingtes Transferieren nur durch ein bedingtes Überspringen des TransferierBefehls zu erreichen ist.

In Deinem AWL-Schnippsel in #1 startest Du nirgends einen Timer.

Der Zeitwert wird vom Timer aus dem Akku eingelesen, aber nur bei einer positiven Flanke des VKE beim Durchlaufen eines der Befehle SI Tx, SV Tx, SE Tx, SS Tx oder bei einer negativen Flanke beim SA Tx.

Code:
// ohne Sprung und ohne Speichern des Zeitwertes ins DBW :
      L   S5T#2s
      U   E 0.3
      U   Timerstarten
      SI  T 127

      L   S5T#5s
      UN  E 0.3
      U   Timerstarten
      SI  T 127

// oder mit Sprung und mit Abspeichern des Zeitwertes ins DBW :
      L   S5T#2s
      U   E 0.3
      SPB  skip
      L   S5T#5s
skip: U   Timerstarten
      SI  T 127
      T   DB10.DBW0

// optional Abspeichern der aktuellen "Restzeit" von T 127 in ein DBW :
      LC  T 127
      T   DB10.DBW2
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Henileini,

ich wollte etwas mit FB´s probieren und hatte dies dann mit dem variablen Zeitwert erweitert. Ich habe im FC1/NW 1 den FB1(dort ist der Timer) aufgerufen und im FC1/NW 2 die variable Zeit generiert.

Danke für die Antworten.

Gruß,

Pierre
 
Zurück
Oben