Stack verschieben im DB mittels SCL

FAAT2011

Level-1
Beiträge
3
Reaktionspunkte
0
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!!
 
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]
 
Ja genau, ich möchte immer nur das DBW0.0 auslesen...

Dann werd ich mal versuchen dass hinzubekommen. Danke derweilen
 
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. :ROFLMAO:
 
Zurück
Oben