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

Ergebnis 1 bis 6 von 6

Thema: Stack verschieben im DB mittels SCL

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Community,

    ich stehe vor einem Problem.

    Ich habe einen DB in SCL Programmiert. Dieser DB soll als Puffer dienen.

    Mit meinem Programm bekomme ich von der Seite_X Integer Werte die ich weiterverarbeiten muss. Auf der Seite_Y muss ich auf die Freigabe zur weiterverarbeitung warten.

    Schickt jetzt Seite_X Werte, Seite_Y ist aber noch bereit, würde ich die Daten verlieren. Deswegen schreibe ich die Daten von Seite_X in den DB, und Seite_Y greift darauf zu.

    Hier der Auszug des DB:
    ----------------------------------------
    IF bef_abfuellen THEN

    // Ober bzw. Untergrenze vom Index abfragen
    IF index > 100 OR index < 1 THEN
    index:= 1;
    END_IF;

    // Messwert eintragen
    Zahlenwert_Farbe[index]:= akt_Farbe;

    // Index um 1 erhöhen
    index:= index+1;
    //-------------------

    END_IF;


    Das mit dem hineinschreiben funktioniert ganz gut. Ich schreibe den ersten Wert nun in DB66.DBX0.0. Den zweiten in DB66.DBX2.0. Den dritten Wert in DB66.DBX4.0......

    Ich möchte nun DB66.DBX0.0 auslesen. Wird DB66.DBX0.0 ausgelesen, soll der Rest im DB dann um die eine ausgelesene Stelle nachgerückt werden. (also DB66.DBX2.0 wird zu DB66.DBX0.0, DB66.DBX4.0 wird zu DB66.DBX2.0,..)

    Kann mir jemand weiterhelfen? Bin leider Neuling und ziemlich Planlos


    Dankeschön!!
    Zitieren Zitieren Stack verschieben im DB mittels SCL  

  2. #2
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von FAAT2011 Beitrag anzeigen
    Ich möchte nun DB66.DBX0.0 auslesen. Wird DB66.DBX0.0 ausgelesen, soll der Rest im DB dann um die eine ausgelesene Stelle nachgerückt werden. (also DB66.DBX2.0 wird zu DB66.DBX0.0, DB66.DBX4.0 wird zu DB66.DBX2.0,..)
    Du lässt dann einfach mit einer FOR Schleife alle Werte (1..100) um eins nach unten rutschen:
    Code:
       DB66.DBW[i] := DB66.DBW[i+1]
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  3. #3
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Paule Beitrag anzeigen
    Du lässt dann einfach mit einer FOR Schleife alle Werte (1..100) um eins nach unten rutschen:
    Code:
       DB66.DBW[i] := DB66.DBW[i+1]
    wohl eher nach oben, wah?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. #4
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    wohl eher nach oben, wah?
    Nein, er möchte DBW0 auslesen (FIFO)

    Ach ja, der Index für den Eintragszeiger muss natürlich auch rutschen
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

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

    Standard

    Ja genau, ich möchte immer nur das DBW0.0 auslesen...

    Dann werd ich mal versuchen dass hinzubekommen. Danke derweilen

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich würde die Daten nicht verschieben, sondern einen "Zeiger" zum Schreiben und einen zum Lesen nutzen. Der "Zeiger" ist dabei einfach nur ein Index, der auf die betreffende Zeile im Array weist. Genau wie beim Schieben müssen noch einige Sonderfälle behandelt werden:

    1. Schreiben am Ende --> Zeiger wieder auf Anfang
    2. Lesen am Ende --> Zeiger wieder auf Anfang
    3. Zeiger "Schreiben" --> "überholt" Zeiger "Lesen" (Buffer voll)
    4. umgekehrter Fall von 3. (Buffer leer)

    PS: Auch beim Schieben müßte ja zumindest ein Indexzeiger geführt werden und zwar für das Schreiben.

    PS2: Vielleicht findet sich noch was in der Suche, das Thema lief hier schon durch.

    PS3: Das wär mal was für den Programmierwettbewerb, ja nach Können in SCL und AWL lösbar.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. BLKMOV in Lokal-Stack
    Von Samiel im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 29.03.2011, 08:59
  2. Stack Erklärung
    Von AndiHN im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 02.04.2010, 23:32
  3. S5 U-Stack (S5-95U)
    Von Anwender im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 07.02.2007, 18:57
  4. Profibus: Stack initialisieren?
    Von herzn im Forum Feldbusse
    Antworten: 13
    Letzter Beitrag: 21.12.2006, 12:13
  5. V-Stack des OB´s
    Von Anonymous im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 03.11.2005, 13:02

Lesezeichen

Berechtigungen

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