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

Ergebnis 1 bis 6 von 6

Thema: Prioritätsproblem FIFO

  1. #1
    Registriert seit
    03.05.2010
    Beiträge
    19
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    In meinem Programm benutze ich einen Fallregister, in dem Befehle für Dosierbandwaage geschrieben und von einem Kommunikationsbaustein gelesen werden. Es gibt die Befehle mit der höheren Priorität (zBsp. "STOPP"), d.h. die müssen so schnell wie möglich gelesen werden bzw. auf der ersten Stelle geschrieben und dann zu erst gelesen werden. Aber ich will keinen Befehl überschreiben, sondern einfach einmal hoch schieben und dann Befehl auf der ersten Stelle rein schreiben.
    Ich weiß nicht genau wie ich das machen soll ? Kann mir jemand ein Tipp geben ?
    Hier ist Teil von dem Programm (in SCL):

    Register_schreiben:
    Schreibzeiger1:=Schreibzeiger;
    IF Fuellstand = Registerlaenge - 1
    THEN Voll := TRUE;
    ELSE
    Akt_Fuellstand:=Fuellstand;

    IF Eingang.Befehl = Stopp THEN
    Schreibzeiger := 0;
    Register[Schreibzeiger].Befehl := Eingang.Befehl;

    Fuellstand := Fuellstand + 1;
    IF Schreibzeiger = Registerlaenge
    THEN Schreibzeiger := 0;
    ELSE Schreibzeiger := Schreibzeiger + 1;
    END_IF;
    Leer := False;

    ELSE
    Register[Schreibzeiger].Befehl := Eingang.Befehl;
    Fuellstand := Fuellstand + 1;
    IF Schreibzeiger = Registerlaenge
    THEN Schreibzeiger := 0;
    ELSE Schreibzeiger := Schreibzeiger + 1;
    END_IF;
    Leer := False;
    END_IF;
    END_IF;
    END_IF;
    Zitieren Zitieren Prioritätsproblem FIFO  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.788
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Hallo,
    mir fehlen da noch so einige Zeilen in deinem Konstrukt ...
    Ich würde da wie folgt vorgehen :
    Du machst dir zunächst einen Eingangs-Parameter "Daten_Uebernehmen".
    Wenn der kommt, dann übernimmst du die Eingangs-Daten in dein FiFo. Für dieses Übernehmen mußt du dir auch noch eine Flanke bauen, die verhindert, dass für einen Impuls in einer Sekunde gleich mehrere Dutzend (vielleicht so Hundert) datensätze in dein FiFo geschrieben werden.
    Den Flankenmerker (STAT-Variable kannst du auch dafür benutzen um deinem aufrufenden Programm zu "sagen", dass die Daten abgelegt worden sind.

    Also etwa so :
    Code:
    IF neue_Daten and not RM_neue_Daten_OK then
       // hier das FiFo von Ende-1 bis Anfang Schrittweite -1 einen nach hinten aufrücken
       // hier die Daten in dein FiFo an Platz 1 schreiben
    end_if ;
    RM_neue_Daten_OK := neue_Daten ;
    Bau das erstmal so ein und dann schauen wir mal weiter ...

    Gruß
    Larry

  3. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    romanz (07.09.2010)

  4. #3
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Prinzipiell müsstest du ja nur dein Fallregister nach Prioritäten sortieren...

    Wenn du bei jedem Eintrag einen Prioritätswert ergänzt (1 sehr hoch, 99 sehr niedrig) kannst du zyklisch prüfen ob die Priorität in Eintrag 1 größer ist als die in 2. Wenn ja tauscht du die Einträge aus, wenn nicht alles ok.
    Dann vergleichst du 2 mit 3 usw.
    mfG Aventinus

  5. Folgender Benutzer sagt Danke zu Aventinus für den nützlichen Beitrag:

    romanz (07.09.2010)

  6. #4
    romanz ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.05.2010
    Beiträge
    19
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Larry,
    Eingangs-Parameter "Daten_Uebernehmen" brauche ich nicht , wiel ich in FB vor FIFO das berücksichtigt habe.
    Ich habe folgendes Programmiert:
    - Fuellstand zeigt wieviel Befehlen ich schon in FIFO habe

    Könnte das funktionieren?

    [Register_schreiben:
    IF Fuellstand = Registerlaenge - 1
    THEN Voll := TRUE;
    ELSE
    IF Eingang.Befehl = Stopp THEN
    Register[Schreibzeiger].Befehl := Register[Fuellstand].Befehl;
    Register[Fuellstand].Befehl := Eingang.Befehl;
    Fuellstand := Fuellstand + 1;
    IF Schreibzeiger = Registerlaenge
    THEN Schreibzeiger := 0;
    ELSE Schreibzeiger := Schreibzeiger + 1;
    END_IF;
    Leer := False;

    ELSE
    Register[Schreibzeiger].Befehl := Eingang.Befehl;
    Fuellstand := Fuellstand + 1;
    IF Schreibzeiger = Registerlaenge
    THEN Schreibzeiger := 0;
    ELSE Schreibzeiger := Schreibzeiger + 1;
    END_IF;
    Leer := False;
    END_IF;
    END_IF;]

  7. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.788
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Zitat Zitat von romanz Beitrag anzeigen
    Könnte das funktionieren?
    Das kann ich dir nicht sagen.
    Was sagen denn deine Versuche dazu ?
    Du solltest auf jeden Fall (das hatte ich ja schon geschrieben) berücksichtigen, dass du für die Funktion "Daten einlagern" eine Flankensteuerung programmieren mußt. Wenn du das extern (außerhalb des FB's) machst ist das auch OK - allerdings nur bei bedingter Bearbeitung des Bausteins möglich. Wird dein Baustein bedingt bearbeitet, so meldet er dir keinen Status.
    Meiner Vorstellung einer Aufgaben-Kapselung würde das so nicht entsprechen ...

    Gruß
    Larry

  8. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    romanz (07.09.2010)

  9. #6
    romanz ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.05.2010
    Beiträge
    19
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Larry,

    Sie haben recht, mit Aufgaben-Kapselung ist besser.
    Das was ich geschrieben habe, scheint zu funktionieren. Ich muss nur einpaar
    Testreihen durchführen, dann wird sich ergeben, ob das Programm falsch oder nicht.

    Gruß
    Roman

Ähnliche Themen

  1. FIFO mit S7 ????
    Von moclam im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 24.10.2013, 10:43
  2. Fifo Bit
    Von Jordy im Forum Simatic
    Antworten: 28
    Letzter Beitrag: 28.06.2008, 22:11
  3. Fifo S7
    Von stevexxx im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 18.03.2008, 14:45
  4. Scl-fifo
    Von johnij im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 12.11.2007, 08:16
  5. Fifo
    Von sweber im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 14.06.2007, 15:06

Lesezeichen

Berechtigungen

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