FIFO Puffer mit 32Bit

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich wollte mal fragen ob jemand weis ob es in der Step7 Software schon einen fertigen FIFO Puffer gibt indem ich Datensätze mit 32Bit breite speichern kann.
Ich habe es schon mit den Bausteinen FC84 und FC85 versucht, hab aber nur einen hinbekommen mit 16Bit pro Datensatz.

Vielen Dank schon im vorraus.
 
Hi,

voraus wird mit einem r geschrieben :D

Sorry, für die Klugscheißerei.

Hast Du schon mal an einen eigenen Datentypen gedacht? Die FC´s kenne ich gar nicht, aber mit einem UDT kannst Du Dir einen beliebigen FIFO zurechtbasteln.

Gruß, pt
 
FIFO 32-Bit

Hallo pt,
Die FC´s kenne ich gar nicht
Diese Bausteine findet man in der Standard Library im Ordner "TI-S7 Converting Blocks". Siehe auch Siemens Homepage unter Beitrags ID 11870247. Aber wie Whibloc schon geschrieben hat, leider nur für 16-Bit.
Gruss
Question_mark
 
Tagchen,

ich war mal im FAQ Bereich bei Siemens, da gibt es solche Bausteine. Aber leider nur gegen Geld.
Ich wollte nur mal wissen ob ich mir die Programmiererei für die Logik des FIFO Puffers sparen kann. Dann werd ich mal Versuchen einen FIFO Puffer selber zu schreiben.

Gruss

P.S.: Sorry für den Schreibfehler.
 
Danke schön Leute,

ich hab mir jetzt einen eigenen FIFO Puffer geschrieben, ist zwar alles mit festen DB´s und Merkern und dadurch nicht so einfach wiederzuverwenden, aber er funktioniert.

Danke für die Tipps.

Gruss
 
Hi plc_tippser,

Kannst Du mir nur ganz kurz beschreiben, wie man einen
FIFO selbst bastelt? Nur das Konzept...

danke
Maxdo
 
Zuviel Werbung?
-> Hier kostenlos registrieren
fifo...

beschreibung wie man einen schreiben könnte:

db:
1 dw anzahl der eintäge
dbb2 - dbbx werte

in fifo anfügen:
dw im eins erhöhen
dbb [dw] wert reinschreiben

aus fifo auslesen
dbb2 auslesen
schleife von 2 bis dw
dbb[x] = dbb[x+1]
zum schluss dw um eins reduzieren..



codebeispiele:
FC FIFOADD (FC1)
Parameter:
In DBNR
In WERT //Der wert welcher gespeichert werden soll

AUF #DBNR
L DBW 0
INC 1
T DBW 0
L 4
*D
SLW 3
T LD 0
L #WERT
T DBB [LD 0]

FC FIFOREAD(FC2)

In DBNR
Out WERT

AUF #DBNR
L DBD 2
T #WERT

srt: L LD 0
INC 1
T LD 0
L 4
*D
SLW 3
T LD 4
L P#4.0
+D
T LD 8
L DBD [LD 8]
T DBD [LD 4]
L DBW 0
L LD 0
<>I
SPB srt


so denke, das müsste als ansatz genügen, bi mir nicht mal sicher obs stimmt was ich da zusammengeschustert habe. sind ja auch noch keine überprüfungen drinn...
 
Ich habe meinen Puffer in einem FB geschrieben und er hat eine Feste grösse von 20 Einträgen. Einen Zähler benütze ich um die Einleseimpulse zu zählen und damit festzulegen auf welchen Speicherplatz ich den Wert eintrage.
Das Auslesen wird auch über einen Zähler gesteuert, mit dem ich mir merke welches der älteste Wert ist.
Das funktioniert aber nur bedingt, weil ich bei meiner Anwendung keinen Pufferüberlauf bekomme. Und mein Puffer so nicht im Kreis läuft und meinen ersten Wert überschreibt.
Deshalb ist meine Lösung nur bedingt einsatzfähig.

Gruss
 
ringlesen...

dann musst du halt, entweder so wie in meinem vorschlag immer wieder die datenwörter nach dem auslesen nach untern verschieben oder du lässt deie zweipointer auf die datenwörter im kreis laufen. musst halt bei ereichen des max wertes den pointer für schreiben wieder auf den anfang setzen und bei min wert auf den letzten dtenwert. und den lesepointer genau so.
 
Hallo Whibloc,

Whibloc schrieb:
...Das funktioniert aber nur bedingt, weil ich bei meiner Anwendung keinen Pufferüberlauf bekomme. Und mein Puffer so nicht im Kreis läuft und meinen ersten Wert überschreibt.
Deshalb ist meine Lösung nur bedingt einsatzfähig.
Gruss

Im Downloadbereich von www.sps-net.de findest du ein FiFo-Beispiel für INT-Werte, bei dem "umlaufende" Zeiger für Schreiben und Lesen verwendet werden. Du kannst das Beispiel ganz einfach auf 32-Bit-Werte ändern. Oder suche hier im Form nach "MOD".

http://www.sps-forum.de/phpBB2/viewtopic.php?t=613&highlight=mod

Gruß, Onkel
 
ich hab hier einen fb für s5 den ich vor einiger zeit mal geschrieben habe.

funktioniert folgendermassen:

mit der steigenden flanke daten eintragen werden alle dw's um eins nach unten geschoben und der neue wert oben eingetragen. der unterste wert fällt raus.

Code:
FB 101                               E:EIGENEST.S5D                    LAE=88   
                                                                       Blatt   1
Netzwerk 1                   Ein Wort in Fifo speichern

===============================================================================
Beschreibt einen DB beginnend ab DW3 (beschreibt jedes Wort)

EINT = Daten eintragen anstossen.
FIDB = FIFO-DB
DADB = Daten-DB
FLAN = Flankenmerker zum Daten eintragen
IMPU = Impulsmerker zum Daten eintragen
DATE = Daten zum Ablegen
NUWO = Anzahl der Nutzworte
===============================================================================
Name :FIFO-EIN
Bez  :EINT      E/A/D/B/T/Z: E  BI/BY/W/D: BI
Bez  :FIDB      E/A/D/B/T/Z: B
Bez  :DADB      E/A/D/B/T/Z: B
Bez  :FLAN      E/A/D/B/T/Z: A  BI/BY/W/D: BI
Bez  :IMPU      E/A/D/B/T/Z: A  BI/BY/W/D: BI
Bez  :DATE      E/A/D/B/T/Z: E  BI/BY/W/D: W
Bez  :NUWO      E/A/D/B/T/Z: D  KM/KH/KY/KC/KF/KT/KZ/KG: KF
 
     :                                           EINT=Daten eintragen anstossen
     :                                           FIDB=FIFO-DB
     :                                           DADB=Daten-DB
     :                                           FLAN=Flankenmer.zum Daten eint>
     :                                           IMPU=Impulsmer.zum Daten eintr.
     :                                           DATE=Daten zum ablegen
     :                                           NUWO=Anzahl der Nutzworte
     :***

Netzwerk 2
     :AWL
     :UN  =EINT                                  Daten eintragen anstossen
     :RB  =FLAN                                  Flankenmerker ruecksetzen
     :U   =EINT
     :UN  =FLAN
     :S   =FLAN
     :=   =IMPU                                  Impulsmerker
     :
     :UN  =IMPU
     :SPB =M001
     :
     :B   =DADB                                  Daten - DB
     :L   =DATE                                  Daten zum abspeichern
     :T   MW 202
     :
     :B   =FIDB                                  fifo-db
     :LW  =NUWO                                  Anzahl nutzworte
     :L   KF +2                                  endadresse -1 erzeugen
     :+F
     :T   MW 200                                 index
     :
M002 :L   MW 200                                 lade index dw x
     :T   DW   0
     :B   DW   0
     :L   DW   0                                 lade dw x
     :T   DW   1                                 zwischenspeichern in dw1
     :L   MW 200
     :L   KF +1
     :+F                                         erzeuge index +1
     :T   DW   0                                 neuer index
     :L   DW   1                                 zwischengespeichertes dw x
     :B   DW   0
     :T   DW   0                                 im neuen index speichern
     :
     :L   MW 200                                 index -1
     :L   KF +1
     :-F
     :T   MW 200
     :L   MW 200
     :L   KF +2                                  erstes nutzwort erreicht
     :><F
     :SPB =M002                                  sprung bei nein
     :L   MW 202                                 ablagedaten
     :T   DW   3                                 im dw 3 speichern
M001 :BE

für doppelworte hab ich einen ähnlichen, aber im mom nicht zur hand.
falls interesse besteht.....

siehe auch in meinem downloadbereich
 
Zuviel Werbung?
-> Hier kostenlos registrieren
volker schrieb:
ich hab hier einen fb für s5 den ich vor einiger zeit mal geschrieben habe.

funktioniert folgendermassen:

mit der steigenden flanke daten eintragen werden alle dw's um eins nach unten geschoben und der neue wert oben eingetragen. der unterste wert fällt raus.

Code:
FB 101                               E:EIGENEST.S5D                    LAE=88   
                                                                       Blatt   1
Netzwerk 1                   Ein Wort in Fifo speichern

===============================================================================
Beschreibt einen DB beginnend ab DW3 (beschreibt jedes Wort)

EINT = Daten eintragen anstossen.
FIDB = FIFO-DB
DADB = Daten-DB
FLAN = Flankenmerker zum Daten eintragen
IMPU = Impulsmerker zum Daten eintragen
DATE = Daten zum Ablegen
NUWO = Anzahl der Nutzworte
===============================================================================
Name :FIFO-EIN
Bez  :EINT      E/A/D/B/T/Z: E  BI/BY/W/D: BI
Bez  :FIDB      E/A/D/B/T/Z: B
Bez  :DADB      E/A/D/B/T/Z: B
Bez  :FLAN      E/A/D/B/T/Z: A  BI/BY/W/D: BI
Bez  :IMPU      E/A/D/B/T/Z: A  BI/BY/W/D: BI
Bez  :DATE      E/A/D/B/T/Z: E  BI/BY/W/D: W
Bez  :NUWO      E/A/D/B/T/Z: D  KM/KH/KY/KC/KF/KT/KZ/KG: KF
 
     :                                           EINT=Daten eintragen anstossen
     :                                           FIDB=FIFO-DB
     :                                           DADB=Daten-DB
     :                                           FLAN=Flankenmer.zum Daten eint>
     :                                           IMPU=Impulsmer.zum Daten eintr.
     :                                           DATE=Daten zum ablegen
     :                                           NUWO=Anzahl der Nutzworte
     :***

Netzwerk 2
     :AWL
     :UN  =EINT                                  Daten eintragen anstossen
     :RB  =FLAN                                  Flankenmerker ruecksetzen
     :U   =EINT
     :UN  =FLAN
     :S   =FLAN
     :=   =IMPU                                  Impulsmerker
     :
     :UN  =IMPU
     :SPB =M001
     :
     :B   =DADB                                  Daten - DB
     :L   =DATE                                  Daten zum abspeichern
     :T   MW 202
     :
     :B   =FIDB                                  fifo-db
     :LW  =NUWO                                  Anzahl nutzworte
     :L   KF +2                                  endadresse -1 erzeugen
     :+F
     :T   MW 200                                 index
     :
M002 :L   MW 200                                 lade index dw x
     :T   DW   0
     :B   DW   0
     :L   DW   0                                 lade dw x
     :T   DW   1                                 zwischenspeichern in dw1
     :L   MW 200
     :L   KF +1
     :+F                                         erzeuge index +1
     :T   DW   0                                 neuer index
     :L   DW   1                                 zwischengespeichertes dw x
     :B   DW   0
     :T   DW   0                                 im neuen index speichern
     :
     :L   MW 200                                 index -1
     :L   KF +1
     :-F
     :T   MW 200
     :L   MW 200
     :L   KF +2                                  erstes nutzwort erreicht
     :><F
     :SPB =M002                                  sprung bei nein
     :L   MW 202                                 ablagedaten
     :T   DW   3                                 im dw 3 speichern
M001 :BE

für doppelworte hab ich einen ähnlichen, aber im mom nicht zur hand.
falls interesse besteht.....

siehe auch in meinem downloadbereich
oder meinen hääää :idea:
 
Anonymous schrieb:
oder meinen hääää :idea:

muss ich das jetzt verstehen?


übrigens habe ich den fifo für s7 angepasst.

im fifo_blk sind jetzt drin:
blockfifo,fifo für 1 byte, fifo für 1 wort, fifo für 1 doppelwort.

auf meiner hp.
 
Hallo,
ist doch immer wieder schön, wenn jemand was zu meckern hat, bloß zu 99% als anonymer Gast, ist doch merkwürdig, oder sollte System dahinterstecken :p .

:roll: Man sollte schon genung Mut haben, wenn man solche Äußerungen hier losläßt, sich mit Namen einzuloggen.

mfg

dietmar
 
Zuviel Werbung?
-> Hier kostenlos registrieren
FIFO S7

Wenn es schnell gehen soll!!


:shock: :shock: :shock: :lol:
DB12 und DB13 anlegen.

UN Bedingung
SPB ENDE

CALL SFC 20
SRCBLK :=P#DB12.DBX0.0 BYTE 100
RET_VAL:=MW206
DSTBLK :=P#DB13.DBX0.0 BYTE 100

CALL SFC 20
SRCBLK :=P#DB13.DBX0.0 BYTE 100
RET_VAL:=MW208
DSTBLK :=P#DB12.DBX1.0 BYTE 100

L 0
T DB12.DBB 1

ENDE: NOP0


Gruss Rainer
 
muss ich das jetzt verstehen?


übrigens habe ich den fifo für s7 angepasst.

im fifo_blk sind jetzt drin:
blockfifo,fifo für 1 byte, fifo für 1 wort, fifo für 1 doppelwort.

auf meiner hp.

Hallo volker,
es ist nun zwar schon 6 Jahre her aber deine Hompage besteht ja noch ;)
Nur finde ich leider den Fifo Download nicht.

Grüße Robin T.
 
Zuletzt bearbeitet:
Zurück
Oben