Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Ampelsteurung

  1. #1
    lrsschtt Gast

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Nabend!

    Für euch wahrscheinlich ein eher einfaches Problem. Ich habe in einem Modul zur Zeit die Aufgabe eine Ampelsterung in S7 zu programmieren. Eigentlich ist das ganze auch eindeutig beschrieben, dennoch habe ich probleme.


    Hier ein Auszug aus der Aufgabenstellung

    Es soll zunächst bei Betätigung des Tasters 1 ein Timer T1 als Verlängerter Impuls von 2 Sekunden gesetzt werden.

    – Timer T1 soll Ampelphase 1 schalten bzw. FB1 aufrufen. FB1 soll dabei einen Merker z.B. M0.1 setzen.

    – Timer T2 soll gestartet werden, wenn Timer T1 nicht läuft und M0.1 gesetzt ist. Somit ist sichergestellt, dass der Timer T2 erst dann gestartet wird, wenn Ampelphase 1 abgeschlossen ist. Wird M0.1 vergessen, würde Timer T2 immer gesetzt werden, wenn T1 nicht läuft also auch z.B. am Anfang, wenn Taster 1 noch nicht gedrückt ist.

    – Timer T2 soll Ampelphase 2 schalten bzw. FB2 aufrufen. FB2 soll dabei einen anderen z.B. Merker M0.2 setzen. Das Problem ist nur, das durch das zyklische Hauptprogramm T2 auch sofort wieder gestartet werden würden, da die Bedingungen für den Start von T2 immer noch erfüllt sind. Deshalb ist es notwendig die Startbedingung von T2 zu erweitern bzw. eindeutiger zu formulieren: Der Timer soll nur starten, wenn M0.2 noch nicht gesetzt wurde.


    – Timer T3 soll gestartet werden, wenn Timer T2 nicht läuft und M0.2 gesetzt ist bzw. M0.3 noch nicht gesetzt ist. Somit ist sichergestellt, dass der Timer T3 erst dann gestartet wird, wenn Ampelphase 2 abgeschlossen ist. Wird M0.2 vergessen, würde Timer T3 immer gesetzt werden, wenn T2 nicht läuft also auch z.B. am Anfang, wenn Taster 1 noch nicht gedrückt ist oder wenn T1 läuft.

    – Timer T3 soll Ampelphase 3 schalten bzw. FB3 aufrufen. FB3 soll dabei einen anderen z.B. Merker M0.3 setzen.

    U "Taster 2"
    R M 0.1
    R M 0.2
    R M 0.3
    UN M 0.1
    UN M 0.2
    UN M 0.3
    L S5T#2S
    SV T 1
    U T 1
    UC FB 1
    S M 0.1




    UN T 1
    U M 0.1
    UN M 0.2
    UN M 0.3
    SV T 2
    U T 2
    UC FB 2
    S M 0.2






    UN T 2
    UN T 1
    U M 0.2
    UN M 0.3
    SV T 3
    UC FB 3
    S M 0.3

    Nun habe ich folgende Probleme. Bis zum Einfügen des letzten Partes ging es einigermaßen. Nun leuchten allerdings keinerlei Ausgänge mehr auf, und der T1 wird auch nur ca. 2x ausgeführt (beim simulieren). Wenn ich nun den Taster 1 erneut betätige bleibt der Code dort hängen weil der T1 nicht ausgeführt wird.

    Eventuell könnt ihr mir da ein wenig weiterhelfen
    Geändert von lrsschtt (05.04.2014 um 19:03 Uhr)
    Zitieren Zitieren Ampelsteuerung  

  2. #2
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard

    Zitat Zitat von lrsschtt
    U "Taster 2"
    R M 0.1
    R M 0.2
    R M 0.3
    UN M 0.1
    UN M 0.2
    UN M 0.3
    L S5T#2S
    SV T 1
    U T 1
    UC FB 1
    S M 0.1
    Ich denke dein Fehler beginnt schon an dem ersten Netzwerk.
    Hast du dir das Konstrukt schon einmal genauer angeschaut?
    Da wäre vermutlich ein Flanke sinnvoller.
    Und eine FB mit UC aufrufen ist schlechter Stil.


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  3. #3
    lrsschtt Gast

    Standard

    Hallo!

    Ich habe das ganze nunmal ein wenig bearbeitet. Wo genau liegt der Fehler?
    Ich habe anstatt der Set Methode jetzt deine FP Methode verwendet. Nun läuft der T1 zwar immer wieder an, allerdings scheinen die Bedingungen des weiteren Codes !aus mir unverständlichen Gründen! nicht zu stimmen.

    U "Taster 2" UN M 0.1
    UN M 0.2
    UN M 0.3
    L S5T#2S
    SV T 1
    U T 1
    UC FB 1
    S M 0.1




    UN T 1
    FP M 0.1
    UN M 0.2
    UN M 0.3
    SV T 2
    U T 2
    UC FB 2
    S M 0.2






    UN T 2
    UN T 1
    FP M 0.2
    UN M 0.3
    SV T 3
    UC FB 3
    S M 0.3
    R M 0.1
    R M 0.2
    R M 0.3

    Geändert von lrsschtt (05.04.2014 um 22:32 Uhr)

  4. #4
    Registriert seit
    13.04.2008
    Ort
    Großraum KA
    Beiträge
    963
    Danke
    52
    Erhielt 128 Danke für 112 Beiträge

    Standard

    So ist das gut. Mache um gotteswillen ja keine Kommentare an dein Programm. Sonst könnte man es ja auf den ersten Blick verstehen.
    Und was passiert im FB 1, 2 und 3 ??

    peter(R)
    The difference between theory and practice in practice is bigger than
    the difference between theory and practice in theory.

  5. #5
    Registriert seit
    16.01.2009
    Beiträge
    24
    Danke
    1
    Erhielt 9 Danke für 9 Beiträge

    Standard

    Die Online-Ansicht hilft in solchen Fällen eigentlich immer weiter.
    Sieh' Dir in der step 7 Hilfe an wie man eine
    Flanke erzeugt. Bei M0.1 und M0.2 handelt es sich nicht um die Flanke, sondern den Flankenmerker, den Du unten wieder platt machst.
    Für T3 und T2 wir kein Zeitwert geladen.


    Sent from my iPad using Tapatalk

  6. #6
    lrsschtt Gast

    Standard

    Vielen Dank für die Hilfe!

    Habe mein Programm nun soweit hinbekommen, dass alle FB's angesteuert werden


    R M 0.1
    R M 0.2
    R M 0.3

    U "Taster 2"


    UN M 0.1
    UN M 0.2
    UN M 0.3
    L S5T#2S
    SV T 1
    U T 1
    UC FB 1
    S M 0.1




    UN T 1
    U M 0.1
    SV T 2
    U T 2
    UC FB 2
    S M 0.2


    UN T 2
    U M 0.2
    SV T 3
    U T 3
    UC FB 3
    S M 0.3




    R M 0.1
    R M 0.2
    R M 0.3

    FB1 steht nur für
    = A 0.1
    = A 0.3

    Und FB2 für

    = A 0.1
    = A 0.4


    Nun habe ich noch ein letztes Problem. Wenn in aufeinander folgenden FB's zweimal die selben Ausgänge angesteuert werden, wird der Ausgang bei FB1 nicht angezeigt.
    Das heißt bei FB1 leuchten dann anstatt 2 LEDS dann nur eine.

    Liegt das am UC ?

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    OK, Du hast Dir bisher eigene Mühe gegeben, deshalb hier mal eine komplett-Lösung.

    Ich weiß nicht, was sich der Aufgabensteller gedacht hat, doch die Aufgabenstellung ist wie üblich nur eine akademische Programmierübung - weit weg von der Realität, weit weg von perfekt und weit weg von korrekt.
    Auch was sich der Aufgabensteller mit der Forderung der FB-Aufrufe gedacht hat kann ich nicht nachvollziehen - ich finde darin nichts sinnvolles, außer das Programm künstlich zu verkomplizieren und vom Schüler unsaubere Programmierung zu verlangen.
    In dem zitierten Teil der Aufgabenstellung steht nichts davon, daß die Lampenausgänge in den FB geschaltet werden sollen. Falls doch, dann beachte, daß die FB nur BEDINGT aufgerufen werden! Jeder FB müsste dann alle Lampenausgänge schalten (unsauber!). Und es müßte noch zusätzlich ein Ausschalten aller Ausgänge am Ende der Sequenz programmiert werden.

    Ich sehe nicht, daß die Lösung in AWL gefordert wäre --> also wenn man AWL noch nicht richtig beherrscht, dann sollte man KOP oder FUP wählen. Man kann ja danach die Ansicht in AWL umstellen um zu sehen, wie man es in AWL programmieren könnte.

    Hier mal meine 1:1-Übersetzung der Aufgabenstellung:

    Damit man die Ampelsequenz mehrmals starten kann muß man die Hilfsmerker löschen. (dazu steht nichts in der Aufgabenstellung. Mein Code hier funktioniert zwar halbwegs, muß aber noch verbessert werden.)
    Code:
    // Netzwerk 1: Reset Hilfsmerker für Neustart Ampelsequenz
          U     "Taster_1"
          R     M0.1
          R     M0.2
          R     M0.3

    Es soll zunächst bei Betätigung des Tasters 1 ein Timer T1 als Verlängerter Impuls von 2 Sekunden gesetzt werden.

    – Timer T1 soll Ampelphase 1 schalten bzw. FB1 aufrufen. FB1 soll dabei einen Merker z.B. M0.1 setzen.
    Code:
    // Netzwerk 2: Timer Ampelphase 1
    
                     T1
                +----------+
    "Taster_1"  |  S_VIMP  |        "Ampelphase_1"
    ---| |------|S        Q|------+------( )
                |          |      |
        S5T#2S -|TW    DUAL|-     |
                |          |      |         DB1
               -|R      DEZ|-     |     +---------+
                +----------+      |     |   FB1   |
                                  +-----|EN    ENO|-
                                        +---------+
    Code:
    // Code im FB1
    
       M0.1     M0.1
    ---|/|------(S)

    – Timer T2 soll gestartet werden, wenn Timer T1 nicht läuft und M0.1 gesetzt ist. Somit ist sichergestellt, dass der Timer T2 erst dann gestartet wird, wenn Ampelphase 1 abgeschlossen ist. Wird M0.1 vergessen, würde Timer T2 immer gesetzt werden, wenn T1 nicht läuft also auch z.B. am Anfang, wenn Taster 1 noch nicht gedrückt ist.

    – Timer T2 soll Ampelphase 2 schalten bzw. FB2 aufrufen. FB2 soll dabei einen anderen z.B. Merker M0.2 setzen. Das Problem ist nur, das durch das zyklische Hauptprogramm T2 auch sofort wieder gestartet werden würden, da die Bedingungen für den Start von T2 immer noch erfüllt sind. Deshalb ist es notwendig die Startbedingung von T2 zu erweitern bzw. eindeutiger zu formulieren: Der Timer soll nur starten, wenn M0.2 noch nicht gesetzt wurde.
    (Wie lang soll die Timerzeit sein?)
    Code:
    // Netzwerk 3: Timer Ampelphase 2
    
                                       T2
                                  +----------+
        T1      M0.1     M0.2     |  S_VIMP  |        "Ampelphase_2"
    ---|/|------| |------|/|------|S        Q|------+------( )
                                  |          |      |
                          S5T#2S -|TW    DUAL|-     |
                                  |          |      |         DB2
                                 -|R      DEZ|-     |     +---------+
                                  +----------+      |     |   FB2   |
                                                    +-----|EN    ENO|-
                                                          +---------+
    Code:
    // Code im FB2
    
       M0.2     M0.2
    ---|/|------(S)

    – Timer T3 soll gestartet werden, wenn Timer T2 nicht läuft und M0.2 gesetzt ist bzw. M0.3 noch nicht gesetzt ist. Somit ist sichergestellt, dass der Timer T3 erst dann gestartet wird, wenn Ampelphase 2 abgeschlossen ist. Wird M0.2 vergessen, würde Timer T3 immer gesetzt werden, wenn T2 nicht läuft also auch z.B. am Anfang, wenn Taster 1 noch nicht gedrückt ist oder wenn T1 läuft.

    – Timer T3 soll Ampelphase 3 schalten bzw. FB3 aufrufen. FB3 soll dabei einen anderen z.B. Merker M0.3 setzen.
    (Wie lang soll die Timerzeit sein?)
    Code:
    // Netzwerk 4: Timer Ampelphase 3
    
                                       T3
                                  +----------+
        T2      M0.2     M0.3     |  S_VIMP  |        "Ampelphase_3"
    ---|/|------| |------|/|------|S        Q|------+------( )
                                  |          |      |
                          S5T#2S -|TW    DUAL|-     |
                                  |          |      |         DB3
                                 -|R      DEZ|-     |     +---------+
                                  +----------+      |     |   FB3   |
                                                    +-----|EN    ENO|-
                                                          +---------+
    Code:
    // Code im FB3
    
       M0.3     M0.3
    ---|/|------(S)

    Im Aufgabenstellungs-Zitat steht nichts darüber, wie die Lampenausgänge geschaltet werden sollen. Vielleicht einfach so:
    Code:
    // Netzwerk 5: Lampe 1
          U     "Ampelphase_1"
          =     A0.1
    
    // Netzwerk 6: Lampe 2
          U     "Ampelphase_2"
          =     A0.2
    
    // Netzwerk 7: Lampe 3
          U     "Ampelphase_3"
          =     A0.3
    Ich weiß nicht, ob der Aufgabensteller mit dieser ungenauen Lösung zufrieden ist, doch sie entspricht genau der zitierten Aufgabenstellung. Verbessern kannst Du die Lösung nun selber. Vor allem entscheide, wie lange der Taster gedrückt werden darf und ob die Ampelsequenz beim Drücken oder beim Loslassen des Tasters starten soll. Ggf. brauchst Du dann zusätzlich Flankenerkennung.


    Liebe Kinder! Bitte nicht nachmachen und gewöhnt Euch solche stümperhafte Programmierung garnicht erst an.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #8
    lrsschtt Gast

    Standard

    Vielen Dank für diese ausführliche Antwort. Ich habe die Aufgabenstellung nur zum Teil zitiert, dort ist natürlich noch eine Zeit von 2s angegeben und auch welcher Ausgang dann später (im Labor) welche LED ansteuern soll.

    Mein Code lässt sich mittlerweile auch immer wieder starten ohne dass es dort zu Problemen kommt. Mein einziges Problem besteht zur Zeit darin, dass beim ansteuern von FB1 keine LED leuchtet. Beim ansteuern von FB2 und FB3 gehen die LED'S tadellos an.

    FB1
    = A 0.1
    = A 0.3

    FB2
    = A 0.1
    = A 0.4


    und FB3
    = A 0.0
    = A 0.3


    Ich gehe mal davon aus, dass die Ausgänge 0.1 und 0.3 nicht aufleuchten, das sie jeweils erst bei FB2 und FB3 angeschaltet werden.
    Nun bleibt die Frage wie das zu beheben ist. Wie im Code zusehen, steuere ich diese jeweils mit UC an.

    Da diese Aufgabe ein Teil meine 1. Laborversuches ist, gehe ich davon aus, dass die "sauberkeit" des Programmierens im Laufe der Veranstaltung ansteigen wird .

    Gruß

  9. #9
    Registriert seit
    16.01.2009
    Beiträge
    24
    Danke
    1
    Erhielt 9 Danke für 9 Beiträge

    Standard

    Ihr solltet vor der Zuweisung das VKE auf 1 setzen
    (SET)
    Ausgänge, die nicht angesteuert werden sollen solltet ihr auch zuweisen. Vorher das VKE auf 0 setzen
    (CLR)


    Sent from my iPad using Tapatalk

  10. #10
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ändere UC in CC
    Wobei das immer noch echter Mist ist, nach meiner Meinung.


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

Ähnliche Themen

  1. Ob100 Frage / Thema Ampelsteurung
    Von PrinzZ im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 20.04.2011, 11:51

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •