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

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

Thema: Reihenfolge einer Abarbeitung nach Reihenfolge der Abarbeitung

  1. #1
    Registriert seit
    12.07.2007
    Beiträge
    38
    Danke
    7
    Erhielt 11 Danke für 8 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Forum User,
    habe ein kleines Lösungsproblem beim Arbeiten mit indirekter Adressierung bzw. Schleifen.
    Folgende Aufgabe soll ich realisieren:
    4 versch. Anlagen greifen auf eine Peripherie zu und es darf immer nur eine Anlage gerade auf die Peripherie zugreifen.
    Die Reihenfolge des Zugriffs soll durch die Reihenfolge der Anmeldung erfolgen.
    Ich wollte diese Aufgabe mit einer Pointer Adressierung und einem Db mit 4 DW`s lösen. Der gültige Wert der Reihenfolge soll immer im DW0 stehen. (z.B. dbx0.0 für Anlage 1 , dbx0.1 für Anlage 2 , dbx0.2 für Anlage 3 und dbx0.3 für Anlage 4).
    Nach Fertigmeldung einer Anlage soll der nächst gültige Wert ins DW 0 rutschen.
    Ich habe es mit einem Filo aus dem Forum versucht, welcher aber die Eigenschaft hat zuerst das letze wort zu
    beschreiben und danach die Wörter aufrücken zu lassen, sa dass erst nach dem 4. Mal beschreiben der gültige Wert Im DW0 liegt.
    Mein Schleifen und Pointer Know How ist nun mal sehr begrenzt, deshalb wende ich mich mal ans Forum. Vielleicht kann jemand meinen Filo mal tunen bzw. mir auf die Sprünge helfen.
    Gruß bludie
    Geändert von bludie (19.05.2009 um 09:42 Uhr)
    Zitieren Zitieren Reihenfolge einer Abarbeitung nach Reihenfolge der Abarbeitung  

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

    Standard

    Hallo,
    ich würde das Problem gar nicht so kompliziert lösen.

    Du hast einen DB mit 5 Speicherplätzen (im 5. Platz steht eine 0 drin).
    Meldet sich eine Anlage an, so sucht sie die erste Stelle im Speicher, wo eine "0" drin steht. Dort trägt sie dann ihre Index-Nummer ein.
    Arbeiten darf die Anlage mit der Index-Nummer an Platz 1.
    Ist diese Anlage fertig, so überträgst du die Daten von Platz 2-> 1, Platz 3 -> 2 , Platz 4 -> 3 , Platz 5 -> 4.
    Hat der erste Speicherplatz "0", so hat keine Anlage etwas zu tun ...
    Das wars ...

    Gruß
    LL

  3. #3
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    Eine Version ohne Pointer, wo immer der aktuelle Wert(MW10) ins DBW 2 geschrieben wird und die anderen Werte weitergeschoben werden.
    Geht natürlich auch mit indirekter Adressierung

    Code:
    U     E      0.0
          O(    
          L     MW    10
          L     0
          ==I   
          )     
          SPB   end1
          AUF   DB 1
          L     DBW    8
          T     DBW   10
          L     DBW    6
          T     DBW    8
          L     DBW    4
          T     DBW    6
          L     DBW    2
          T     DBW    4
          L     MW    10
          T     DBW    2
    end1: U     E      0.0
          FN    M     20.0
          SPBN  end2
          L     0
          T     MW    10
    end2: NOP   0
    Mußt ihn halt auf deine Bedürfnisse anpassen.
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

  4. Folgender Benutzer sagt Danke zu Gerhard K für den nützlichen Beitrag:

    bludie (19.05.2009)

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

    Standard

    Nachtrag :
    Das Anmelden der Anlage bzw. deren Abmelden kann man dann natürlich mit einer Schleife machen - aber vielleicht später ...

  6. #5
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    larry´s vorschlag ist noch besser.
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

  7. #6
    bludie ist offline Benutzer
    Themenstarter
    Registriert seit
    12.07.2007
    Beiträge
    38
    Danke
    7
    Erhielt 11 Danke für 8 Beiträge

    Standard

    Ja Gerhard,
    die Idee mit dem Schieberegister ist in diesem Fall wahrscheinlich besser. Aber der neueste Wert wird immer ins DW2 geschrieben und wenn ich den Inhalt vom DW8 auslese, dann habe ich aber erst nach dem 4. mal schieben dort einen Wert stehen. Muss ich mir denn einen Pointer bauen, der vorher die Inhalte der Daten wörter auf "Null" vergleicht und dann evtl. erst bei 8 anfängt reinzuschreiben oder wie kann man das am elegantesten lösen?
    mfg bludie

  8. #7
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    larry hat das ja schon gut beschrieben.
    Arbeiten darf die Anlage mit der Index-Nummer an Platz 1.
    Ist diese Anlage fertig, so überträgst du die Daten von Platz 2-> 1, Platz 3 -> 2 , Platz 4 -> 3 , Platz 5 -> 4.
    Hat der erste Speicherplatz "0", so hat keine Anlage etwas zu tun ...
    Das wars ...
    wenn du dich daran hältst kann nichts passieren.
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

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

    Standard


    wie ich es geschrieben habe ...
    Meldet sich eine Anlage an, so sucht sie die erste Stelle im Speicher, wo eine "0" drin steht. Dort trägt sie dann ihre Index-Nummer ein.
    das könnte dann so aussehen :
    Code:
    Chk1:L DB10.DBw 2
    L 0
    >I
    SPBN Chk2
     
    L #Anlagen_Nummer
    T DB10.DBW2
    SPA Ende
     
    Chk2:L DB10.DBw 4
    L 0
    >I
    SPBN Chk2
     
    L #Anlagen_Nummer
    T DB10.DBW4
    SPA Ende
     
    usw.
    und
    Arbeiten darf die Anlage mit der Index-Nummer an Platz 1.
    Also das erste Speicherplatz-DBW auslesen und die Nummer da drin gibt die Anlagen-Freigabe ...

    Gruß
    LL

  10. Folgende 2 Benutzer sagen Danke zu Larry Laffer für den nützlichen Beitrag:

    bludie (20.05.2009),Gerhard K (19.05.2009)

  11. #9
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Du wirst beim Eintragen, auch in das SR, eine Prüfung auf "0" vornehmen müssen um die Reihenfolge halten zu können.

    Gerhard hat ja schon geschrieben das Du das SR noch anpassen musst.

    Ich würde der Einfachheit halber so vorgehen:

    1. Eingangswert auf Änderung prüfen
    2. Bei erfolgter Änderung freien Platz im SR suchen
    3. dort eintragen
    4. Mit dem "ENDE"-Signal das SR eins weitertakten.

    Probiers mal und poste Deinen Code, dann schau'n mer mal

    dtsclipper
    Das Grauen lauert in der Zwischenablage !!

  12. #10
    bludie ist offline Benutzer
    Themenstarter
    Registriert seit
    12.07.2007
    Beiträge
    38
    Danke
    7
    Erhielt 11 Danke für 8 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Larry,
    ich stell mich da noch ein bisschen doof an.
    Der Indexschreibauftrag funktioniert soweit solange bis alle DW´s gefüllt sind. Er beginnt bei DW8 und nach dem 4. mal schreiben ist auch DW 2 gefüllt. Soweit wunderbar.
    Wenn jetzt wieder ein Auftrag kommt soll er das SR einfach weiter schieben und das DW2 mit dem neuen Indexwert belegen.
    In meinem code wird nach dem vollen Eintrag ( DW2 bis DW8 gefüllt) bei einem neuen Schreibauftrag sofort DW 2 und DW 4 gefüllt.
    Code:
          AUF   "DB 110"
          UN    M    113.4                  //Flankenmerker für Index eintragen
          O(    
          L     MW   114                    // Indexwert
          L     0
          ==I   
          )     
          SPB   end1
    
    m000: L     DBW    8
          L     0
          >I    
          SPB   m001
          L     MW   114
          T     DBW    8
          SPA   ende
    m001: L     DBW    6
          L     0
          >I    
          SPB   m002
          L     MW   114
          T     DBW    6
          SPA   ende
    m002: L     DBW    4
          L     0
          >I    
          SPB   m003
          L     MW   114
          T     DBW    4
          SPA   ende
    m003: L     DBW    2
          L     0
          >I    
          SPB   m004
          L     MW   114
          T     DBW    2
          SPA   ende
    
          L     DBW    8
          T     DBW   10
          L     DBW    6
          T     DBW    8
          L     DBW    4
          T     DBW    6
          L     DBW    2
          T     DBW    4
    m004: L     MW   114
          T     DBW    2
    
    ende: NOP   0
    end1: U     M    113.4
          FN    M    113.5
          SPBN  end2
          L     0
          T     MW   114
    end2: NOP   0
    Wenn alles gefüllt ist, soll er aber nur noch Dw 2 mit dem neuen Schreibauftrag beschreiben. DW 4 soll dann den alten Wert aus DW 2 erhalten.
    Wahrscheinlich ganz einfach, aber habe irgendwie den Kopf vernagelt.
    Vielleicht kann ja einer die Nägel herausziehen.
    Gruß bludie

Ähnliche Themen

  1. Step7 Abarbeitung eines FB
    Von SEAL im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 02.09.2011, 11:13
  2. Frage zur Abarbeitung
    Von Fetzi im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 04.05.2011, 20:57
  3. Abarbeitung von Rufen
    Von Blanky04 im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 11.08.2010, 11:57
  4. Antworten: 0
    Letzter Beitrag: 19.05.2009, 09:33
  5. FC Abarbeitung im OB1
    Von K3ul3 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 17.11.2008, 08:55

Lesezeichen

Berechtigungen

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