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

Ergebnis 1 bis 6 von 6

Thema: SCL Ampel Problem

  1. #1
    Registriert seit
    30.01.2015
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,
    ich hoffe mir kann jemand helfen. Ich programmiere (oder versuche es zumindest) eine Ampelsteuerung mit Fußgängerübergang in SCL.
    Allerdings hängt sie sich mitten im Programm auf und ich schaffe es nicht den Fehler zu beheben.
    Er läuft ganz normal bis Fußgänger, sowie die Autos, Rot angezeigt bekommen. Bei dem Übergang von Rot auf Rot-Gelb hängt er sich dann auf.
    Ich habe schon diverse Sachen versucht, aber nichts hilft ohne den Ablauf zu verändern.

    Über einen Rat von euch würde ich mich sehr freuen!

    Code:
    // Netzwerk 1: Ampelmerker
    IF (NOT "Auto_Rot_Gelb_Phase_temp" AND ("Ampel_Merker" OR (NOT "Fusg_Verz_Gruen_temp" AND ("Schalter_links" OR "Schalter_rechts"))))=1
    THEN
        "Ampel_Merker" := 1;
      END_IF;
      
      // Netzwerk 2: Grün für Autos
      IF (NOT "Ampel_Merker") =1
    THEN
        "Auto_Grün":=1;
      END_IF;
      
      // Netzwerk 3: Dauer Gelbphase
      #Dauer_Gelbphase := S_ODTS(T_NO := "Auto_Gelb_Phase",
         S := "Ampel_Merker",
         TV := t#3s,
         Q => "Auto_Gelb_temp");
    
    
    // Netzwerk 4: Gelb für Autos
    IF ("Ampel_Merker" AND ("Auto_Verz_Rot_temp" OR NOT "Auto_Gelb_temp")) =1
    THEN
      "Auto_Gelb" := 1; "Auto_Grün":=0;
      
    END_IF;
    
    
    // Netzwerk 5: Rot für Autos
    IF ("Ampel_Merker" AND "Auto_Gelb_temp") =1
    THEN
      "Auto_Gelb" := 0; "Auto_Rot" := 1; 
    END_IF;
    
    
    // Netzwerk 5.1: Rot-Gelb
    IF ("Ampel_Merker" AND "Auto_Rot_Gelb_Phase_temp") =1
    THEN
      "Auto_Rot" := 1; "Auto_Gelb" := 1;
    END_IF;
    
    
    // Netzwerk 5.2: Rot-Gelb-Reset
    // test negative Flanke
    "RG_neg_FL" := "Auto_Rot_Gelb_Phase_temp" AND NOT "Auto_Rot_Gelb_Phase_temp_alt";
    "Auto_Rot_Gelb_Phase_temp_alt" := "Auto_Rot_Gelb_Phase_temp";
    
    
    IF "RG_neg_FL" =1
    THEN
      "Auto_Rot" := 0; "Auto_Gelb" := 0;
    END_IF;
    
    
    
    
    // Netzwerk 6: Dauer der Grünphase für Fußgänger
    #Dauer_Grünphase_Fußgänger := S_ODTS(T_NO := "Fusg_Gruen_Phase",
         S := "Auto_Rot",
         TV := t#10s,
         Q => "Fusg_Gruen_Phase_temp");
    
    
    // Netzwerk 7: Grün für Fußgänger
    IF (NOT "Fusg_Gruen_Phase_temp" AND "Auto_Rot") =1
    THEN
      "Fusg_Gruen" := 1; "Fusg_Rot" := 0;
    END_IF;
    
    
    // Netzwerk 8: Auto-Rotphase-Verzögerung
    #Auto_Rotphase_verzögern := S_ODTS(T_NO := "Auto_Verz_Rot",
         S := ("Ampel_Merker" AND "Fusg_Gruen_Phase_temp"),
         TV := t#6s,
         Q => "Auto_Verz_Rot_temp");
    
    
    // Netzwerk 9: Rot für Fußgänger
    IF (NOT "Ampel_Merker" OR ("Ampel_Merker" AND ("Fusg_Gruen_Phase_temp" OR NOT "Auto_Gelb_temp"))) =1
    THEN
      "Fusg_Rot" := 1; "Fusg_Gruen" := 0;
      END_IF;
    
    
    // Netzwerk 10: Dauer der Rot-Gelb-Phase
    #Dauer_rot_gelb := S_ODTS(T_NO := "Auto_Rot_Gelb_Phase",
         S := ("Ampel_Merker" AND "Auto_Verz_Rot_temp"),
         TV := t#5s,
         Q => "Auto_Rot_Gelb_Phase_temp");
    
    
    // Netzwerk 11: Verzögerung für die nächste Grünanforderung
    #Nächste_Fusg_Grün_Verzögerung := S_ODTS(T_NO := "Fusg_Verz_Gruen",
         S := ("Ampel_Merker" AND "Auto_Grün"),
         TV := t#1s,
         Q => "Fusg_Verz_Gruen_temp");
    Zitieren Zitieren SCL Ampel Problem  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.717
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Hallo,
    mir würde für diese Problematik als Erstes das Stichwort "Schrittkette" einfallen - ohne deinen Code jetzt näher analysiert zu haben.
    So etwas liesse sich in SCL auch schön umsetzen und gibt dir die Möglichkeit, deinen Ablauf so zu strukturieren, dass du auch verstehst, warum es irgendwo nicht mehr weiter geht.

    Gruß
    Larry

  3. #3
    Registriert seit
    16.12.2014
    Beiträge
    14
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo,

    was bedeutet genau: sie hängt sich mitten im Programm auf?

  4. #4
    Aithir ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.01.2015
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Erstmal entschuldige ich mich für die späte Rückmeldung, ich hatte viel zu tun.
    Danke für die schnelle Antwort Larry, ich habe mich mal etwas über Schrittketten schlau gemacht und werde dies mal austesten.

    Zum aufhängen mitten im Programm: Wie oben beschrieben verläuft alles in Ordnung bis die Phase kommt in der die Autos wieder fahren dürfen, das wird im Regelfall mit einer Rot-Gelb Phase realisiert.
    Allerdings meint mein Programm anstatt wie ich will von Rot über Rot-Gelb nach Grün einfach in der gedachten Rot-Gelb Phase bei Rot zu bleiben. Und nach der abgelaufenen Zeit für Rot-Gelb springt er erst dann darauf.
    Und anstatt danach auf Grün zu springen lässt er die beiden letzten Timer aus.

  5. #5
    Aithir ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.01.2015
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ok das Thema hat sich erledigt. Die Nutzung von Speichernden Einschaltverzögerungen (S_ODTS) war schon komplett falsch, normale S_ODT wären da richtig gewesen. Dazu musste ich eigentlich einen verlängerten Impuls für die Rot-Gelb_Phase nehmen.
    Mit der Schrittkette habe ich noch nicht experimentiert, aber trotzdem danke für den Ratschlag...

  6. #6
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Du solltest Dir gleich angewöhnen, boolsche Variablen nicht mit 0 oder 1 sondern mit FALSe bzw. TRUE zuzuweisen bzw. abzufragen.
    Erstere Variante ist zwar auf Grund der impliziten Typumwandlung möglich, aber eine saubere Programmierweise ist das bei Weitem nicht.

    Thomas_v2.1 hat in diesem Thread dazu einiges geschrieben und auch die folgendenden Posts sind sicher nicht uninteressant.

Ähnliche Themen

  1. Lichtschranke an LOGO - Lesezustand per Ampel/Leuchte
    Von simano im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 18.03.2014, 18:13
  2. Ampel in AS
    Von Fresh0909 im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 27.11.2010, 01:12
  3. AMPEL Steuerung Fehler
    Von hellrazz im Forum Programmierstrategien
    Antworten: 3
    Letzter Beitrag: 27.05.2010, 22:36
  4. Antworten: 16
    Letzter Beitrag: 17.08.2009, 14:57
  5. Ampel-Kreuzung
    Von Jackjackson im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 20.02.2009, 13:50

Lesezeichen

Berechtigungen

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