First In First Out

Golden Egg

Level-1
Beiträge
272
Reaktionspunkte
26
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.
Ich habe meinen eigenen Baustein zu First In First out geschrieben. Ich habe jetzt nur das Problem das beim Auslesen manchmal nicht nur ein Wert ausgelesen wird.

Das hängt irgendwie mit dem Flankenmerker beim Auslesen zusammen. Wenn ich einen globalen Merker als FM benutzte tritt dieser Fehler nicht auf...
Warum hat er aber Probleme mit einem Merker aus dem STAT-Bereich?

Den Programmtext findet ihr im Anhang.

Gruß Golden Egg
 

Anhänge

  • FB202.pdf
    5,8 KB · Aufrufe: 81
Zuviel Werbung?
-> Hier kostenlos registrieren
Versuch doch mal folgendes :
Code:
U #Wert_einlesen
UN #FM_Wert_einlesen
spbn M000
 
...
 
 
M000:
U #Wert_einlesen
= #FM_Wert_einlesen
Der FN bzw. FP harmoniert nicht mit den Sprungbefehlen ...

Gruß
LL
 
Hallo Vierlagig,
... :confused:

Ich meinte das, was ich geschrieben habe. Ich hatte mal ein ähnliches Problem - dort hatte ich auch zunächst in gleicher Weise den FP-Befehl eingesetzt und bekam ganz merkwürdige Ergebnisse.
Nun ist es bei mir (als alten S5-Programmierer) so, das ich mich wenn etwas nicht funktioniert, daran nicht lange aufhalte, sondern es so mache, wie ich weiß, dass es geht.
Die Flanke wie im Beispiel zu bilden stammt aus der S5-Zeit.

Ich konnte am Programm von Golden_Egg keinen Fehler erkennen und habe mich dann einfach meiner alten Sache entsonnen - das wars.

Hast du mit dem FP-Befehl in Verbindung mit Sprüngen wirklich andere Erfahrungen ?

Gruß
LL
 
Hast du mit dem FP-Befehl in Verbindung mit Sprüngen wirklich andere Erfahrungen ?

ja, er funktioniert, ich benutze ihn ja ständig als z.b. timer innerhalb von FB's oder start und reset-auswertungen und bisher ist es mir noch nicht untergekommen, dass es da ein problem gegeben hätte :confused: ... aber ich werd mir das mal merken, für den fall dass ein baustein mal nicht mehr will.

Danke Larry! :D
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke ... wofür ...?

So richtig logisch ist das für mich im Augenblick auch nicht - aber siehe obiges Beispiel ... Hatte Golden_Egg einen Fehler gemacht ? M.E. nicht ...
 

ich finde sein schleifenkonstrukt kritisch, kann es da nicht passieren, dass er das bit 14.0 überschreibt? dann dürfte es mit der anderen lösung aber auch nicht funktionieren :confused: ... bleibt das problem, dass die schleife nicht schön ist ;)


danke für den tipp, bei problemen an den richtigen stellen zu suchen!
 
Flanke und VKE

Hallo,

wenn eine Flanke über das VKE ohne Merkerzuweisung ausgewertet wird, kann die auch über mehrere Zyklen anstehen.
Siehe Erläuterungen von Siemens:


Beispiel einer VKE-Flankenauswertung der positiven und der negativen Flanke als Anweisungsliste.
Signalflanke_Flanke_07.gif

Beispiel eines Signaldiagramms bei der VKE-Flankenauswertung für steigende und fallende Flanken
Signalflanke_Flanke_08.gif


Also, erst die Merkerzuweisung (oder stat. Bit) macht sie zu einer echten Flanke.:p

MfG
FrankW
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hm.

Das Flankenbit ist hat natürlich über mehrere Zyklen den gleiche Zustand.
Aber die Zuweisung danach ja nicht. Also auch wenn danach ein Sprungbefehl ist, sollte dieser doch funktionieren oder? Denn NACH dem Flankenbit, hat hat VKE doch nur für einen Zyklus Zustand "1" als beispiel!?
 
Was für eine Zuweisung ist doch egal. Òb Sprungbefehl, Merker oder sonst was. Selbst eine TempVariable wäre ok. Nur der Flankenmerker ansich, darf nicht im temporären liegen.

Hauptsache der Befehl danach "reagiert" auf VKE.

Oder lieg ich da falsch!?
 
@Vierlang

bin auch darauf gestoßen das mein Flankenproblem mit dem überschreiben des IDB´s 14 zu tun hatte:cool:.....aber erst heute früh:rolleyes:

Ich habe jetzt nur noch das Problem das nachdem ich die Bausteine in meine SPS (PLCSIM) hoch geladen habe beim ersten Flankenwechsel (0->1) von "Wert einlesen" der Wert nicht eingelesen wird.
Simuliere ich einen Netzausfall funktioniert alles normal ....nur beim ersten mal will es nicht wirklich klappen.

Habt ihr eine Idee?
 

Anhänge

  • FB202.pdf
    8,2 KB · Aufrufe: 9
nochn Erklärungsversuch... (gehe von Fehler beim AUSlesen aus...)

Code:
         L DIB 13
         T #AusgelesenerWert
 
         L 9
schb: SLD 3    
         LAR1                    // Adresse ist jetzt 9
         NOP 0
         L DIB[AR1, P#4.0]  // 9 + Offset 4 = 13
         T DIB[AR1, P#5.0]  // 9 + Offset 5 = 14, Merker sind bei 14.0+14.1
         TAR1
         SRD 3
         LOOP schb

Überschreibt er an der Stelle so nicht sein Byte 14 wo auch seine Merker stehen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Überschreibt er an der Stelle so nicht sein Byte 14 wo auch seine Merker stehen?

hatten wir schon festgestellt ;)


zu dem "erstes einlesen" funktioniert nicht problem fällt mir eigentlich nur der OUT Pufferspeicher_voll auf ... nimm den mal als IN_OUT oder zusätzlich als STAT ...
 
@VL,

ebend nicht.

//Wert in Pufferspeicher einlesen
U #Wert_einlesen
FP #FM_Wert_Einlesen
= #Flankenmerker
u #Flankenmerker
SPBN m000

So wär's richtig

MfG
FrankW
 
Ich habe jetzt nur noch das Problem das nachdem ich die Bausteine in meine SPS (PLCSIM) hoch geladen habe beim ersten Flankenwechsel (0->1) von "Wert einlesen" der Wert nicht eingelesen wird.
Simuliere ich einen Netzausfall funktioniert alles normal ....nur beim ersten mal will es nicht wirklich klappen.

Habt ihr eine Idee?
Hier ist nochmal mein Programm im Anhang....

@VL,

ebend nicht.

//Wert in Pufferspeicher einlesen
U #Wert_einlesen
FP #FM_Wert_Einlesen
= #Flankenmerker
u #Flankenmerker
SPBN m000

So wär's richtig

MfG
FrankW
Das ist auch richtig aber eigentlich überflüssig.

ZyklusA:

Erkennt Flankenwechsel 0->1 von Wert einlesen und gibt ihn im VKE aus

ZyklusB:

Signalzustand von #Wert_einlesen ist high -> kein Signalwechsel -> VKE =0

Wie es auch in der Hilfe steht:
Während eines jeden Programmzyklus wird der Signalzustand des VKE-Bits mit dem Signalzustand des VKE-Bits des vorherigen Zyklus verglichen, um Änderungen des Zustands festzustellen. Um den Vergleich ausführen zu können, muß der vorherige VKE-Zustand in der Adresse des Flankenmerkers (<Bit>) gespeichert werden. Unterscheidet sich der aktuelle Signalzustand des VKE-Bits vom vorherigen Zustand ("0") (Erkennung einer steigenden Flanke), ist das VKE-Bit nach dieser Operation "1".
 

Anhänge

  • bubso_fifo_lifo.zip
    305,1 KB · Aufrufe: 5
Zuletzt bearbeitet:
Zurück
Oben