"Abarbeitungspuffer" programmieren

S7Sync

Level-1
Beiträge
76
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich möchte Impuls-Signale an einem Eingangsbyte (DI) einlesen und im weiteren Programmverlauf verwenden.
Ich habe die Befürchtung das die Impulse auch mal schneller sind als die Zykluszeit des OB1 (aktuell ca.20ms/Zyklus) und mir somit der ein oder andere Impuls durch die Lappen geht.
Um das zu verhindern würde ich gern so eine Art Zwischenspeicher programmieren.
In diesem Speicher werden die Impulse, die mittels Weckalarm OB vom PEW in ein MW geschrieben werden, abgelegt oder gezählt. Im Zyklischen Programmverlauf würde die CPU diesen Speicher abarbeiten. Und demzufolge würden alle Impulse erfasst werden - so die Theorie.

Nun mein eigentliches Problem:
wie kann ich so einen "Puffer" programmieren oder bietes eine Systemfunktion ähnliches an?
Hat vielleicht jemand von Euch so etwas als fertige Quelle parat?

Vielen Dank

mfg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hmm,
warum braucht er dafür ein FIFO wenn er im Weckalarm schon die Anzahl der Impuls zählt?

@ S7Sync, ich sehe dein Problem nicht, wenn du es umsetzt wie du es beschrieben hast, sollte es doch passen:
In diesem Speicher werden die Impulse, die mittels Weckalarm OB vom PEW in ein MW geschrieben werden, abgelegt oder gezählt. Im Zyklischen Programmverlauf würde die CPU diesen Speicher abarbeiten.

Für was brauchst du eine Systemfunktion?
Zum
a: die Impulse erfassen
b: zum Zählen
c: doch FIFO
Dann noch ganz wichtig: In welcher Programmiersprache
 
Dachte dafür gibt es eine Systemfunktion, also für so einen Puffer.

Das Erfassen der Impulse bereitet mir keine Probleme, aber das Zählen.
Ich muss ja die Impulse hochzählen und die bereits erfassten Impulse runterzählen - genau das ist mein Problem.
Es darf nicht doppelt gezählt werden und es sollen keine Impulse "verlohren" gehen....

Programmiersprache: AWL oder FUP
Programmierumgebung: Step7 V5.5
 
Was zählst du denn damit? Statt den Impuls zu speichern und später einen Wert damit zu erhöhen, kannst du es auch gleich im weckalarm ob tun. Ich mache das ständig, zb gepumpt mengen oä.
Zum Thema fifo gibt's etliche Themen und ich glaube die oscat bibljothek hat da ne funktion parat. Ich baue mir die Dinger immer selbst, ist auch nicht wirklich schwer.

Also ohne zu wissen was du zahlen willst, behaupte ich mal, du kannst es ohne fifo genau so gut im weckalarm zählen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo S7Sync,
der Weckalarm unterbricht ja das zyklische Programm und deshalb geht doch nichts verloren.
In dem Weckalarm zählst du einfach mit jedem kommenden Ereignis eine Variable (MW, DW) hoch. Anschließend geht es ja mit dem zyklischen Programm weiter und dort kannst du mit der erfolgten Aktion die Variable wieder runterzählen.
Am schönsten und einfachsten wäre es natürlich wenn du eine Interuptkarte /Eingänge hättest, aber das ist halt schon eine Kostenfrage.
 
Hallo Paule,

alles macht sich einen Kopf. Aber der TE teilt noch nicht einmal die Frequenz seines Eingangssignals mit. Eventuell geht es sowieso nur mit einer Zählerkarte. ;)
 
Solange der Zyklus bei "ca. 20ms" liegt, muss man weder über aufwendige Interrupts oder Zählerkarten nachdenken. Schließlich hat der TE ja erklärt, dass es ihm genügt die Signale zu zählen und im "normalen Zyklus" auszuwerten.
Einfach den "Weck-OB" nehmen und dort die Zählung machen.
Bei den meisten CPU´s ist das der OB35. (In den CPU-Eigenschaften den Takt auf 10ms einstellen)
Achtung: Den Refresh des Eingangsabbildes nicht vergessen, da die Eingänge sonst nur bei Aufruf des OB1 aktualisiert werden.
Code:
// z.B.: Zählbit liegt an Eingang 13.1
L PEW 13 
T EW13
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Einfach den "Weck-OB" nehmen und dort die Zählung machen.
Bei den meisten CPU´s ist das der OB35. (In den CPU-Eigenschaften den Takt auf 10ms einstellen)
Achtung: Den Refresh des Eingangsabbildes nicht vergessen, da die Eingänge sonst nur bei Aufruf des OB1 aktualisiert werden.
Code:
// z.B.: Zählbit liegt an Eingang 13.1
L PEW 13 
T EW13

So in etwa hab ich das vor. Dann mach ich die Zählung im OB35 und nicht im Zyklus.
Danke für den Hinweis mit dem Refresh.

mfg
 
Es ist keine feste Frequenz und die Impulslänge ist mir (noch)unbekannt.
Es handelt sich um eine S0 Schnittstelle eines Stromzählers.
Die Impulsfrequenz und Dauer solltest Du aber schon kennen, bevor Du die benötigte Hardware festlegst. Wenn der Peak zu kurz ist oder die Impulse zu schnell kommen geht das in die Hose...
 
Ich kenne zwei Arten Stromzähler mit S0-Schnittstelle (es mag noch mehr geben, keine Ahnung).
Einmal mit 1000 und einmal mit 2000 Imp/kWh.

Kleines Rechenbeispiel:

Verbraucher = 6 kW, bedeutet nach 10 Minuten (600s) ist ein 1 kW verbraucht.
Bei 1000 Imp/kWh kommt alle 0,6 Sekunden ein Impuls, bei 2000 Imp/kWh alle 0,3 Sekunden.

Wenn es um eine Hausinstallation geht, solltest Du also mit der Zykluszeit hinkommen. Die Frage, die sich jetzt noch stellt: Wie lang steht dieser Impuls an ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also mit all Euren Beiträgen kommt Licht ins Dunkel.
Impulse pro 1000/kwh somit ist die Impulsfrequenz von der momentanen Stromabnahme abhängig.
Impulsdauer 90ms/Impuls.

Anhand der Impulsdauer denke ich das die CPU es auch mit dem OB1 schafft alles zu zählen, da die Zykluszeit sich um 20-25ms bewegt...

Danke für Eure Hilfe!

mfg
 
Hallo S7Sync,

tu Dir beim nächsten Mal selber einen Gefallen und beschreibe Dein Vorhaben/Fragestellung von Anfang an doch ziemlich genau. ;)
Hättest Du gleich gepostet daß es um einen Stromzähler mit S0-Schnittstelle geht, wäre Dir sicher schneller geholfen worden.
 
Hallo S7Sync,

tu Dir beim nächsten Mal selber einen Gefallen und beschreibe Dein Vorhaben/Fragestellung von Anfang an doch ziemlich genau. ;)
Hättest Du gleich gepostet daß es um einen Stromzähler mit S0-Schnittstelle geht, wäre Dir sicher schneller geholfen worden.

Ja OK, das habe ich gemerkt. Jedoch war die Fragestellung erst allgemein, das detailierte kam dann erst noch...
ich Danke Euch für Eure Geduld und Mühe!

mfg
 
Zurück
Oben