Fifo Bit

@Jordy:
meine Meinung zu deinem Thema hatte ich ja in Beitrag #7 schon dargestellt.

@alle Anderen:
Ich hatte mal ein Programm gesehen (leider nicht selbst erstellt), da konnte der Maschinenführer über die Reihenfolge der Handbetriebs-Tasten auf dem Bediengerät das Ablauf-Programm der Maschine selbst festlegen. Ich könnte mir vorstellen, dass Jordy mit seinem "FIFO" etwas ganz ähnliches bezweckt. Falls nicht ... es ist nicht immer alles sinnlos, dessen Sinn man nicht sofort versteht ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Larry:
Ja, dank dir. War ja auch ne Antwort genau wie ich sie hören wollte, bzw. das ich weiß, es geht besser, oder halt nicht wie ichs gemacht hab! Danke.

Hätte mich halt nur interessiert, wie es mit dem SFB32 gehen soll. Kenne den SFB garnicht...

Zu dem Sinn meines "FIFOS": (Warum nicht "FIFO"? Ist doch quasi die gleiche funktion)

Als Beispiel, es gibt 10 Behälter in denen Granulat oder sonstiges drinnen ist. Alle Behälter haben einen Min-Sensor.
Es gibt jedoch nur EINEN Saugförderer womit diese Befüllt werden.

Also, um zu verhindern, das einige paar mal befüllt werden, weil sie am Anfang vom Programm stehen, andere nie befüllt werden, dachte ich mir wäre so ein Fifo Speicher das richtige.
"Wer zuerst kommt, mahlt zuerst!" ;)
 
der FIFO speicher ist auch der richtige weg.

du kannst auch direkt die INT im speicher rotieren/abarbeiten lassen wobei dir ein wert "n" im integerformat aussagt welche anforderung sich in der warteschleife befindet.


ums bildlich zu umschreiben

Code:
[COLOR=SeaGreen]bearbeitete Anforderung[/COLOR]
[COLOR=SeaGreen]37 Anforderung 0[/COLOR]
9   Anforderung 1
13 Anforderung 2
29 Anforderung 3
3   Anforderung 4
[COLOR=DarkOrange]33 Anforderung 5
eingegangene Anforderung
[/COLOR]
dazu legt man in einem DB 6 integerwerte (oder auch Doppelinteger, real oder was auch immer) an. Anforderung null wird ausgelesen, zugewiesen und bearbeitet. wenn dieser vorgang fertig ist schiebst du mit BLKMOV Anforderung 1-5 in den bereich 0-4 und setzt Anforderung 5 auf null. kommt eine neue anforderung schreibt sie sich in die anforderung 5 im DB.
du kannst auch gleich eine anforderung überspringen wenn sie den wert 0 enthält. diesen fifo kannst du dir ohne weiteres auch mit FUP bauen.
wichtig ist nur der einsatz eines pointers für den verschiebe-bereich im DB.

aber es kann auch sein dass ich immer noch nicht verstandenhabe was du da vorhast.

grüsse
grüsse
 
Eine kleine Anmerkung von mir zu dem Problem.

der FIFO speicher ist auch der richtige weg.
Dem stimme ich zu.



ums bildlich zu umschreiben

Code:
[COLOR=SeaGreen]bearbeitete Anforderung[/COLOR]
[COLOR=SeaGreen]37 Anforderung 0[/COLOR]
9   Anforderung 1
13 Anforderung 2
29 Anforderung 3
3   Anforderung 4
[COLOR=DarkOrange]33 Anforderung 5
eingegangene Anforderung
[/COLOR]
dazu legt man in einem DB 6 integerwerte (oder auch Doppelinteger, real oder was auch immer) an. Anforderung null wird ausgelesen, zugewiesen und bearbeitet. wenn dieser vorgang fertig ist schiebst du mit BLKMOV Anforderung 1-5 in den bereich 0-4 und setzt Anforderung 5 auf null. kommt eine neue anforderung schreibt sie sich in die anforderung 5 im DB.
Auch bis hierher gehe ich konform.
Doch das System bekommt dann Probleme wenn der Bereich nur die Anzahl der Anforderungen = Anzahl der Silo +1 (Zeiger) halten kann.
Wenn die Anforderungen schneller kommen als die Silos befüllt werden können., wird ein zusätzlicher Speicherbereich benötigt.
Daher muss der Speicher mit den Datenworten für die Anforderungen doppelt so gross wie Anzahl der Silos sein.

Zur Erklärung:
Silo 1 wurde befüllt und aus dem fifo gestrichen, nextes Silo ist Silo 5, nach dem Befüllen wird aus dem Silo 1 wieder entnommen. Silo 1 wird leer und es sind noch nicht alle befüllt, dann kommt dieses Silo wieder in Warteschlange. Dies kann bei jedem Silo passieren, ausser bei dem das gerade befüllt wird.
Der Speicher für die Anzahl der Anforderungen muss min Anzahl der Silo x2 -1 gross sein.
Das muss dabei beachtet werden, sonst geht der Zeiger für die neunen Anforderungen ins leere und das kommt nicht so ganz gut ;-)


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das ist mir schon klar...
anforderung 0-5 war nur als beispiel gedacht... wiegross der fifo stapel dann wirklich sein muss, muss man dem prozess entnehmen.

so betrachtet: soll es wirklich eine warteschleife sein die nach oben hin offen ist, ist der fifo der falsche weg, da er nur x elemente in seinem stapel aufnehmen kann. ist die abarbeitungszeit wesentlich grösser als die zeitspanne zwischen den eingehenden anforderungen wirst du auf kurz oder lang sowieso probleme bekommen. selbst bei offenen speicherstrukturen kann es sein dass nach tagen/wochen oder monaten der speicher schon so gross ist, dass er einen pufferoverflow erzeugt und irgendwann die cpu steht.

man müsste also bei meinem beispiel die eintragende anforderung so programmieren:
trag dich in anforderung 5 ein, wenn anforderung 5 auch auf null ist. wenn nicht starte eine beliebige zeit, nachdem das eintragen wieder versucht wird.

so kann man verhindern dass sich die anfoerderungen gegenseitig im DB auf anforderung 5 überschreiben solange anforderung 0 noch nicht abgearbeitet wurde.

im prinzip gilt hier:
abarbeitungszeit sollte immer kleiner sein als die durchschnittliche zeitspanne zwischen den eingehenden anforderungen.
ansonsten wäre hier ein fifo die falsche wahl.

grüsse
 
Zuletzt bearbeitet:
Doch das System bekommt dann Probleme wenn der Bereich nur die Anzahl der Anforderungen = Anzahl der Silo +1 (Zeiger) halten kann.
Wenn die Anforderungen schneller kommen als die Silos befüllt werden können., wird ein zusätzlicher Speicherbereich benötigt.
Daher muss der Speicher mit den Datenworten für die Anforderungen doppelt so gross wie Anzahl der Silos sein.

Zur Erklärung:
Silo 1 wurde befüllt und aus dem fifo gestrichen, nextes Silo ist Silo 5, nach dem Befüllen wird aus dem Silo 1 wieder entnommen. Silo 1 wird leer und es sind noch nicht alle befüllt, dann kommt dieses Silo wieder in Warteschlange. Dies kann bei jedem Silo passieren, ausser bei dem das gerade befüllt wird.
Der Speicher für die Anzahl der Anforderungen muss min Anzahl der Silo x2 -1 gross sein.
Das muss dabei beachtet werden, sonst geht der Zeiger für die neunen Anforderungen ins leere und das kommt nicht so ganz gut ;-)


bike

Das erklärst du bitte nochmal, weil, ich bin zu dämlich das zu verstehen :confused:!

Kein Silo soll zur gleichen Zeit 2 Mal in der Liste stehen, das brächte ja überhaupt nichts, also warum 2x+1???
 
kinners, also für mich ist die nummer schon lange abgehakt - ich frag mich grad: was habt ihr vor? ..wenn ihr schon anfangt so kompliziert zu denken, dann vergesst doch bitte nicht prioritäten einzupflegen .... also weiterhin viel spaß mit einem thema, das schon lange über seine eigentlichen grenzen hinaus schießt :rolleyes:
 
Zurück
Oben