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

Ergebnis 1 bis 8 von 8

Thema: Problem ARRAY/Schieberegister

  1. #1
    Registriert seit
    27.08.2009
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe folgendes Problem. Ich habe in einem Programm ein großes ARRAY erstellt in das REAL Werte abgelegt werden soll. Dieses Array ist 7500 Felder lang. Ich möchte jetzt das dieses ARRAY als FIFO ausgeführt werden soll. Das funktioniert aber mit dem Befehl:

    STACK[1..7499] := STACK[0..7498];

    nicht so ganz. Ich will aber auch kein LOOP einfügen, da sonst meine Zykluszeit ins unendliche geht.

    Kann mir jemand eine geeignete Lösung vorschlagen?
    Vielen Dank!

    Gruß Barni
    Zitieren Zitieren Problem ARRAY/Schieberegister  

  2. #2
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    Hallo Barni,

    wie wäre es Dein FIFO als Ringpuffer auszulegen, statt ein Schieberegister zu benutzen?

    Grüße
    Gebs

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    Zitat Zitat von Gebs Beitrag anzeigen
    Hallo Barni,

    wie wäre es Dein FIFO als Ringpuffer auszulegen, statt ein Schieberegister zu benutzen?

    Grüße
    Gebs


    Und zwei Zeiger, ein Zeiger auf den aktuellen Input und einer auf den aktuellen Output. Dort fügt man dann Daten ein oder entnimmt sie und verändert nur den Wert des Zeigers.
    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

  4. #4
    Barni ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.08.2009
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Lächeln

    Wie ich das mache ist prinzipiell egal, nur an der Ausführung scheitert die Sache bei mir

    Ich muss die ganze Sache in SCL realisieren und da ich da zeimlicher Neuling bin, weiß nicht genau wie ich das umsetzen soll. Am liebsten wäre mir ein einfacher Push-Befehl damit die Zykluszeit weitestgehend geschont wird

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    Ich schreib jetzt aber nicht den Code auf, sondern nur mal die Verfahrensweise, ganz grob:

    1. Du hast ein Array 0..100
    2. Du hast einen In-Zeiger, der steht am Anfang auf -1 (leer)
    3. Du hast einen Out-Zeiger, der steht am Anfang auf -1 (leer)
    4. ein Wert kommt
    Eintrag in 0, In-Zeiger auf 1, Out-Zeiger auf 1
    5. noch ein Wert kommt
    Eintrag in 1, In-Zeiger auf 2, Out-Zeiger bleibt 1
    6. noch ein Wert kommt
    Eintrag in 2, In-Zeiger auf 3, Out-Zeiger bleibt 1
    .
    .
    .
    7. ein Wert wird abgeholt
    Auslesen aus 1 (Out-Zeiger), Out-Zeiger auf 2, wenn In-Zeiger <> -1 also nicht leer, In-Zeiger bleibt auf 3
    8. ein Wert wird abgeholt
    Auslesen aus 2 (Out-Zeiger), Out-Zeiger auf 3, wenn In-Zeiger <> -1 also nicht leer, In-Zeiger bleibt auf 3
    9. ein Wert wird abgeholt
    Auslesen aus 3 (Out-Zeiger), Out-Zeiger auf 4, wenn In-Zeiger <> -1 also nicht leer, In-Zeiger bleibt auf 3, Da In-Zeiger nun < Out-Zeiger, beide einfach wieder auf -1

    Einige Sonderfälle sind zu beachten:
    Wenn der In-Zeiger die 100 überschreitet macht er bei 0 weiter, ebenso der Out-Zeiger. Der In-Zeiger darf den Out-Zeiger nicht "überholen". Wenn doch, gehen Werte verloren und der Out-Zeiger muß "mitgezogen" werden. Umgekehrt ist das ähnlich, sonst werden Werte ausgelesen, die nicht mehr gültig sind. Man kann z.Bsp. einen vereinbarten Wert, den es sonst nicht gibt auf "leere" Zellen schreiben, z.Bsp. -1, wenn diese ausgelesen wurden. Dann erkennt man einfach am Inhalt der Zelle, daß diese leer ist.

    Es gibt sicher irgendwo schon fertigen Code für so was, vielleicht in der Oscar-Lib?

    PS: Wenn es nur um das Einlesen geht, reicht sogar ein Zeiger, der immer erhöht wird. Wenn du am Ende des Array bist, einfach den Zeiger wieder auf Null. Dann ist mein Beispiel schon fast zu viel des Guten.

    In SCL kannst du auf ein Array mit einem Index (Int) zugreifen.

    Test := MyArray[i]
    Geändert von Ralle (27.08.2009 um 12:18 Uhr)
    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

  6. #6
    Barni ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.08.2009
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja ok, ich werds mal versuchen.

    Vielen Dank schon mal!

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard

    Hallo Barni,

    was hast Du für eine CPU? Nicht alle S7-CPUs unterstützen DB mit 30kB.
    Ob die Ziel-CPU das kann würde ich vor dem ausprogrammieren abklären.

    Mit DB max 16kB wird das ganz Programm etwas verzwickter.

    Gruß
    PN/DP
    Zitieren Zitieren unterstützte DB-Größe ausreichend?  

  8. #8
    Barni ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.08.2009
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hab ne WINAC RTX...da ist das wohl kein Problem

Ähnliche Themen

  1. Array Schieberegister
    Von SPSOS im Forum CODESYS und IEC61131
    Antworten: 11
    Letzter Beitrag: 22.04.2015, 21:25
  2. Schieberegister mit Array und Variablem Index
    Von bluebird277 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 30.03.2011, 12:05
  3. kleines Problem mit Schieberegister
    Von Klaus.Ka im Forum Programmierstrategien
    Antworten: 10
    Letzter Beitrag: 31.08.2008, 16:49
  4. Problem mit Schieberegister
    Von danielch im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 25.01.2007, 16:35
  5. Compact Logix Problem mit Schieberegister
    Von BMLLER6758 im Forum Sonstige Steuerungen
    Antworten: 2
    Letzter Beitrag: 25.09.2006, 20:16

Stichworte

Lesezeichen

Berechtigungen

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