takte erzeugen

stan_keiler

Level-1
Beiträge
36
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
das durchsuchen des forums hat mir leider in keinster weise einen hinweis auf die lösung meines problems geliefert...

ich soll eine ampelsteuerung entwerfen... aha hab ich mir gedacht, fängste einfach mal an, allerdings steh ich nun vor einem problem! wie bekomme ich denn einen takt da rein? meinetwegen das es 5 sekunden dauert bis der nächste schritt ausgeführt wird? ich meine lass ich die schritte einfach so ablaufen is es ja voll sinnlos...XD man sieht ja nix ha ha... naja

vielleicht hat ja jemand einen lösungsansatz
 
Bau dir einen Timer der die Zeit resultierend aus einem Weckalarm ableitet.
Z.B. einen Zähler in 100ms-Zeitschleife der bis 50 zählt und dann eine Flanke generiert.
 
wie bekomme ich denn einen takt da rein? meinetwegen das es 5 sekunden dauert bis der nächste schritt ausgeführt wird?
Taktmerker Byte von der CPU aktivieren.
Mit einer Flanke vom Sekundentaktmerker ein Merker / Datenwort hochzählen.
Code:
     U #Sekundentakt
     FP #Flanke
     SPBN End
     L #Sekundenzähler
     + 1
     T #Sekundenzähler
End:NOP 0
 
Code:
ORGANIZATION_BLOCK OB35
VAR_TEMP
    // reserviert
    info : ARRAY[0..19] OF BYTE;
    // temporäre Variablen
END_VAR
FB900.DB900();
END_ORGANIZATION_BLOCK

FUNCTION_BLOCK FB900
VAR_TEMP
    // temporäre Variablen
END_VAR
VAR
    zaehler : INT;        
END_VAR
    zaehler := zaehler + 1;
    IF zaehler = 50 THEN
        M0.0 := 1;
        zaehler := 0;
    END_IF;

END_FUNCTION_BLOCK

Evtl. noch mit Eingangsparametern parametriebar machen, z.B. Zyklsuzeit des verwendeten OBs und Takt.
 
hmm sry jungs aber irgendwie mag es nicht klappen...

@ paule wie geb ich denn den sekundenzähler und takt an? cpu taktmerker hab ich merkerbyte 3 ausgewählt...

@ markus: sry aber egal was ich eingeb alles wird rot... also fehler zeigt es an...

@ buschmann... danke jetz hab ich zumindest den takt aktiviert... hoff ich...
 
hmm sry jungs aber irgendwie mag es nicht klappen...

@ paule wie geb ich denn den sekundenzähler und takt an? cpu taktmerker hab ich merkerbyte 3 ausgewählt...

@ markus: sry aber egal was ich eingeb alles wird rot... also fehler zeigt es an...

@ buschmann... danke jetz hab ich zumindest den takt aktiviert... hoff ich...
Hallo Stan_Keiler,
also wie der Link von Buschmann auch zeigt, Taktmerker in der Hardwarekonfig mit Häkchen aktivieren und Merkerbyte wählen und ganz wichtig, anschließend die Hardware übertragen.

Wenn Du Merkerbyte 3 wählst, dann ist der Sekundentakt der Merker M3.5

Das Beispiel von Markus ist in SCL geschrieben.
 
He He bike,
schlecht geschlafen? ;)

Danke der Nachfrage, eigentlich nicht. :D

Zuerst lesen,
dann denken,
dann versuchen
und wenn es dann nicht klappt fragen, so sollte doch die Reihenfolge sein.

Hier wird einfach gefragt: wer macht für mich Hausaufgaben oder mein Projekt, ich will nichts tun. So schaut es ab und an aus.

bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@bike naja nu... lesen kann ich aber so ne direkte antwort wär mir dann doch lieber... außerdem hab ich nie gesagt das du mir mein programm schreiben sollst XD wie dem auch sei: problem gelöst

kann mir jemand sagen was ich verkehrt mache wenn ich ein sprungbefehl setze und die die cpu dann immer auf sf springt?

Code:
      U     "Ampel_EIN"
NEXT: S     "Ampel_3_rot"
      S     "Ampel_rot_2"
      U     "Ampel_3_rot"
      L     S5T#2S
      SE    T      1
      U     T      1
      S     "Ampel_3_gelb"

      U     "Ampel_3_rot"
      U     "Ampel_3_gelb"
      L     S5T#3S
      SE    T      2
      U     T      2
      R     "Ampel_3_rot"
      R     "Ampel_3_gelb"
      S     "Ampel_3_gruen"
      L     S5T#5S
      SE    T      3
      U     T      3
      R     "Ampel_3_gruen"
      S     "Ampel_3_gelb"
      L     S5T#3S
      SE    T      4
      U     T      4
      R     "Ampel_3_gelb"
      S     "Ampel_3_rot"
      L     S5T#2S
      SE    T      5
      U     T      5
      S     "Ampel_gelb_2"
      L     S5T#3S
      SE    T      6
      U     T      6
      R     "Ampel_rot_2"
      R     "Ampel_gelb_2"
      S     "Ampel_gruen_3"
      L     S5T#5S
      SE    T      7
      U     T      7
      R     "Ampel_gruen_3"
      S     "Ampel_gelb_2"
      L     S5T#3S
      SE    T      8
      U     T      8
      R     "Ampel_gelb_2"
      S     "Ampel_rot_2"
      U     "Ampel_EIN"
      =     "Merker"
      SPBN  NEXT

      UN    "Ampel_EIN"
      R     "Ampel_3_rot"
      R     "Ampel_3_gelb"
      R     "Ampel_3_gruen"
      R     "Ampel_rot_2"
      R     "Ampel_gelb_2"
      R     "Ampel_gruen_3"
die ganzen adressen sind willkürlich gewählt und im wincc flex danne angelegt also des klappt nur der sprung nie...

ich hab schon etliche andere positionen und andere arten von sprungmarken ausprobiert, da schaff ich es zwar das es nicht stoppt, aber das programm läuft halt nie noch mal ab... kein plan... sry

also ich will quasi das das programm einfach wieder von neuen startet, wenn nicht der button ampeln aus betätigt wird... (es ist alles nur im wincc flexible gestaltet und halt mit plcsim ne sps simuliert...)
 
Das nennt man eine Endlosschleife.
Du darfst nicht immer wieder zum Anfang springen.

er springt ja nicht immer wieder zurück, dafür müßte er ja einen absoluten Sprung benutzen ;)

also ist es keine Endlosschleife, sondern viel mehr eine Abarbeitung die innerhalb der eingestellten Zykluszeitgrenzen nicht ausführbar ist. :rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
oh ok... da muss ich direkt noch mal schauen.. quasi wenn eine endlosschleife programmiert wird, gibt die cpu auf Xd ne also zeigt nen fehler an... hmm... thnx

@vierlagig... aber ich habe doch keine zykluszeit eingestellt? oder kann ich die irgendwo einstellen?

EDIT: Bekomme ich das denn mit LOOP geregelt? der ist ja eigentlich für schleifen gedacht oder?
 
Zuletzt bearbeitet:
Das nennt man eine Endlosschleife.
Du darfst nicht immer wieder zum Anfang springen.

Schau Paule, das ist was ich meine. :confused:
Wenn kein Wissen von der Funktion der PLC vorhanden ist, dann kommt so etwas raus.
Dass der Aufruf und das Weiterbearbeiten des Programms vom OB1 oder in einem Zeit- oder einem AlarmOB erfolgt, ist doch Grundlage und das muss doch zuerst im Hirn sein.

bike


P.S: hilft es die Zyklusuzeit zu erhöhen oder sollte nicht besser das Programm richtig programmiert werden?
 
er springt ja nicht immer wieder zurück, dafür müßte er ja einen absoluten Sprung benutzen ;)

also ist es keine Endlosschleife, sondern viel mehr eine Abarbeitung die innerhalb der eingestellten Zykluszeitgrenzen nicht ausführbar ist. :rolleyes:
Der angeforderte Fehler OB ist der gleiche. ;-)
Ich hoffe Du gibst jetzt nicht den Tipp die Zykluszeitüberwachung auf den Grenzwert von 6 Sekunden zu stellen, falls das denn reichen sollte. :rolleyes:
 
Zurück
Oben