Step 5 Timer per Taster erhöhen oder veringern

Zuviel Werbung?
-> Hier kostenlos registrieren
Drei Hinweise:
- L und T sind nicht VKE-abhängig und werden immer ausgeführt
- die Adressen MW20, MW21, MW22 überlappen sich
- man nimmt üblicherweise keinen Ausgang Ax.y als "VKE"-Merker sondern Merker. Bevorzugt M0.0 "Immer0" und M0.1 "Immer1"

Harald
 
Also müsste ich ob21 so schreiben.
Code:
    U    M 0.0
    R    M 0.0    ;Lampe Starttaster
        
    U    M 0.0
    L    KZ 001
    S    Z 1
    UN   M 0.0
    S    Z 1
        
    U    M 0.0
    R    M 0.0    ;Lampe Starttaster
    
    U    M 0.0
    L    KH 0001    ;Lade min-wert fur Z1 1
    T    MW 20      ;min-Wert in MW20 speichern
    UN   M0.0
    T    MW 20

    U    M 0.0
    R    M 0.0    ;Lampe Starttaster
    
    U    M 0.0
    L    KH 0010    ;Lade max-wert fur Z1 10
    T    MW 30    ;Max-Wert in MW21 speichern
    UN   M0.0
    T    MW 30
Hab ich das jetzt halbwegs richtig?
Kann es leider erst morgen abend testen.
Wenn was falsch ist, bitte sagt es.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab ich das jetzt halbwegs richtig?
Auch ohne den ganzen Thread gelesen zu haben, mit Sicherheit nicht!

Harald hat doch geschrieben, das Lade- und Transferbefehle nicht VKE abhängig sind. Sie interessiert z.B. das U M0.0 davor überhaupt nicht.
Sie müssen daher übersprungen werden, wenn sie nicht ausgeführt werden sollen.

Außerdem wird Dein M0.0 immer nur zurück, aber nirgends gesetzt. Das kann ja auch nicht sinnvoll sein.
 
Dein Code enthält eine Menge überflüssige Anweisungen die nur verwirren.
Das Setzen des Zählers benötigt eine steigende VKE-Flanke, deshalb muß es zweimal aufgerufen werden. Einmal mit VKE=0 und einmal mit VKE=1.
Die Zuweisungen an die MW werden unabhängig vom VKE immer ausgeführt, deshalb brauchen sie auch keine VKE-Verknüpfungen.
Code:
    U    M 0.0
    R    M 0.0     ;Merker immer false
        
    U    M 0.0     ;VKE=0
    L    KZ 001
    S    Z 1
    UN   M 0.0     ;VKE=1
    S    Z 1

    L    KH 0001   ;Lade min-wert fur Z1 1
    T    MW 20     ;min-Wert in MW20 speichern

    L    KH 0010   ;Lade max-wert fur Z1 10
    T    MW 30     ;Max-Wert in MW21 speichern
Bei dem KH 0010 bin ich grad' nicht sicher, evtl. mußt Du da KH 000A schreiben. Oder KZ 010?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo. Danke erst ein mal an alle.
Habe das setzen der MWs und das überprüfen des Z1 geschafft.
Code:
Name: OB21
    L    KZ 001
    S    Z 1
        
    L    KH 0001    ;Lade min-wert fur Z1 1x0,5sek
    T    MW 20    ;min-Wert in MW20 speichern
        
    L    KH 0010    ;Lade max-wert fur Z1 10x0,5sek
    T    MW 30    ;Max-Wert in MW30 speichern
        
    LC    Z 1    ;Zaehler 0..999 im BCD Format
    L    KH 1000    ;1 steht fuer 0,1sek
    OW        ;+F geht auch
    T    MW 12    ;variabler Zeitwert
Code:
NAME:    FB_4

    LC    Z 1
    T    MW 22
        
    U    M 8.0    ;Wenn Anlauf beendet M8.0=0
    SPB    =W_2
    L    MW 20    ;min-wert fur Z1
    L    MW 22    ;aktueller wert Z1
    >F        ;MW20<MW22
    SPZ    =W_1    ;Ergniss muss 0 sein
    L    KZ 001
    S    Z 1
        
W_1 :    L    MW 30    ;max-wert Z1
    L    MW 22    ;aktueller wert Z1
    <F        ;MW21>MW22
    SPZ    =W_2    ;Ergniss muss 0 sein
    L    KZ 010
    S    Z 1
        
W_2 :    LC    Z 1    ;Zaehler 0..999 im BCD Format
    L    KH 1000    ;1 steht fuer 0,1sek
    OW        ;+F geht auch
    T    MW 12    ;variabler Zeitwert
    BE
Das funktioniert alles super.
Aber auf einmal habe ich das Problem, das mein Timer1 nicht mehr startet.
Der Code steht im Netzwerk6 im OB1. M1.1=1, T1=0 also UN T1=1.
Wo liegt mein fehler?
Code:
    U    M 1.1    ;Merker Start
    UN    T 1    ;Timer Lauflicht
    L    KT 001.2    ;Lade Zeitwert 0,5sek    
    SI    T 1    ;Start Timer Lauflicht
    ***
 
Zuletzt bearbeitet:
funktioniert alles super.
Hmm, Du solltest aufhören, Dir Dein Programm aus gefundenen Codeschnipseln zusammenzustoppeln ohne zu verstehen, was der Code tut. Bei ALLEN Dir unbekannten Anweisungen schaue in die Operationsbeschreibung und lies diese so oft, bis Du sie verstanden hast. Eine Steuerung muß kontrolliert steuern und nicht zufällig.

Wenn Du AWL nicht richtig beherrschst dann programmiere besser in KOP oder FUP, da kann man viele Fehler gar nicht erst machen.

Kommentare haben zwar keinen Einfluß auf das Programm, doch falsche Kommentare verwirren und erschweren das Verstehen des Programmcodes.


OB21: Wo ist die VKE-Bildung für das "S Z1" geblieben??? Ohne kontrollierte Beeinflussung des VKE wird der Code nicht mehr zuverlässig funktionieren, sobald VKE-beeinflussender Code davor gesetzt wird.
(Die Zuweisung an MW12 mußt Du nicht so umständlich machen, schließlich hast Du ja gerade Z1 auf 1 gesetzt. Ein "L KH 1001" (besser: "L KT 001.1") + "T MW 12" reicht - ist aber eine Geschmacksfrage.)


FB_4: Nach den Vergleichen (>F, <F) solltest Du "SPB =" statt "SPZ =" verwenden. Die SPZ "verschleppen" das VKE, weil sie das VKE nicht begrenzen. Die nicht-Begrenzung des VKE wird zu Fehlern bei nachfolgenden Verknüpfungen führen.


Aber auf einmal habe ich das Problem, das mein Timer1 nicht mehr startet.
Der Code steht im Netzwerk6 im OB1. M1.1=1, T1=0 also UN T1=1.
Wo liegt mein fehler?
Code:
    U    M 1.1    ;Merker Start
    UN    T 1    ;Timer Lauflicht
    L    KT 001.2    ;Lade Zeitwert 0,5sek    
    SI    T 1    ;Start Timer Lauflicht
    ***
Timer brauchen zum starten eine Flanke am Eingang. Ist M1.1 schon vor dem allerersten "SI T1" True? Dann erkennt "SI T1" keine Flanke und der Timer startet nicht.

Was steht vor dem "U M1.1"? Vielleicht ist auch das VKE nicht begrenzt.

Timer sollte man nicht mit sich selbst verriegeln. Da gehört immer ein Hilfsmerker hin. Wenn der Timer funktioniert, dann wird man ihn nach dem "SI T1" nicht abfragen können, weil er da fast immer True ist. Also schreibe besser:
Code:
    U    M 1.1       ;Merker Start
    UN   M 0.1       ;T1 Timer Lauflicht
    L    KT 001.2    ;Lade Zeitwert 1 sek    
    SI    T 1        ;Start Timer Lauflicht
    U     T 1
    =    M 0.1
    ***

Und im OB21 füge hinzu:
Code:
    U    M 0.1       ;muß hier 0 sein
    L    KT 001.2    ;irgendein gültiger Zeitwert
    SI    T 1        ;Timer mit VKE=0 aufrufen

Statt "SI" würde ich "SE" nehmen (Geschmacksfrage)

"KT 001.2" bedeutet nicht 0,5s sondern 1,0s

Harald
 
Hallo.
Ich versuche gerade mein AWL Programm in FUP umzuwandeln, damit ich es besser verstehe.
Nun bin ich auf das Problem gestoßen, das ich folgenden Code nicht in FUP programmiert bekomme.
Code:
          U M2.2
          SPB F4
Name:FB_4
          R M2.2

Ich arbeite mit "S5 für Windows".
Kann mir jemand sagen wie ich das machen kann?
 
Zurück
Oben