Flankenauswertung eines Analogsignals

Homer1290

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich brauche hilfe um den Nullduchgang, bei steigender Flanke eines 50Hz analog Signals, zu detektieren.

Nach der Erfassung sollen eine bestimmte Anzahl an Messwerten aufgenommen und gespeichert werden bis eine neue Flanke kommt.

Zur Verfügung habe ich eine CPU 314-6CF02 von Vipa und damit über den Speedbus verbunden die Analogebaugruppe SM331-7BF70.

Ich habe erst vor kurzen mit Step7 angefangen daher wäre es gut wenn mögliche Lsg. etwas ausführlicher beschrieben werden.

Danke für die Hilfe.
 
:confused: Programm für dich schreiben ist nicht ...

Aber ein Ratschlag ... kein Problem :
Du überprüfst, ob der aktuelle Eingangswert größer als "0" ist und ob der vorherige Eingangswert <= "0" ist. Dann hast du dein Flanken-Bit. Nach jeder Auswertung (ob erfolgreich oder nicht) liest du den aktuellen Eingangswert in den Hilfsspeicher für den vorherigen Eingangswert ein ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für den Tipp Larry.

So war das auch nicht gemeint, ich schreib schon das Programm selber!!

Mir geht es auch in erster Linie um Anregungen und Ansätze.


Gibt es so eine Art Interrupteingang oder -fkt. wie z.B. bei einen µcontroller? Nach der Flanken Erkennung soll möglichst schnell der erste Messwert aufgenommen werden und innerhalb von 20ms ca. 10-15 weitere Werte bevor die nächste Flanke kommt. Mein Programmteil soll in ein bestehendes Progamm eingebunden werden was eine Zykluszeit von ca. 4ms hat. Dieses Programm sollte nur kurzzeitig für die Messung unterbrochen werden oder wenn möglich zwischen zwei Messungen weiter bearbeitet werden.
Für Tipps bin ich wieder sehr Dankbar.
 
Hallo,

diese CPU-Analog-Modul Kombination hat die Fähigkeit einen
Interrupt bei Überschreiten eines Grenzwertes zu generieren oder
aber eine Aufzeichnung der Analogwerte innerhalb des Analogmoduls bei Überschreiten eines Grenzwertes mit bis zu 40 kHz für bis zu 64000 Werte durchzuführen (alles parametrierbar). Bei Bedarf können auch alle 8 Kanäle gespeichert werden!


Grüße

Longbow
 
Du kannst einen Zeit-Interrupt programmieren. Dafür ist der OB35 da, dessen Intervall du in der HW-Config - CPU festlegen kannst. Ich würde dir bei der CPU aber nicht empfehlen mit dem Intervall unter 4ms zu gehen (es geht aber auch 1 ms). Entscheidend hier ist, dass die Abarbeitung des OB nicht länger dauern darf, wie sein Intervall. Bei einem schnellen OB geht deine Zykluszeit aber ggf. hoch.

Ich würde die Funktion entweder bei Bedarf freigeben oder grundsätzlich im Hintergrund mitlaufen lassen ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du kannst einen Zeit-Interrupt programmieren. Dafür ist der OB35 da, dessen Intervall du in der HW-Config - CPU festlegen kannst. Ich würde dir bei der CPU aber nicht empfehlen mit dem Intervall unter 4ms zu gehen (es geht aber auch 1 ms). Entscheidend hier ist, dass die Abarbeitung des OB nicht länger dauern darf, wie sein Intervall. Bei einem schnellen OB geht deine Zykluszeit aber ggf. hoch.

Ich würde die Funktion entweder bei Bedarf freigeben oder grundsätzlich im Hintergrund mitlaufen lassen ...

Gruß
LL

Bei dieser CPU gehen bei aufmerksamer Programmierung auch 250 µs! (500µs realistisch wenn keine aufwendigen SFCs laufen)

Man kann aber auch den FIFO-Mode in dem Analog Modul benutzen:
z.B. Analogmodul zeichnet alle 100µs für alle Kanäle einen Wert auf und man fragt dann im OB35 alle 10ms alle bis dahin aufgesammelten Werte in einem Aufruf ab.
 
Zuletzt bearbeitet:
diese CPU-Analog-Modul Kombination hat die Fähigkeit einen
Interrupt bei Überschreiten eines Grenzwertes zu generieren oder
aber eine Aufzeichnung der Analogwerte innerhalb des Analogmoduls bei Überschreiten eines Grenzwertes mit bis zu 40 kHz für bis zu 64000 Werte durchzuführen (alles parametrierbar). Bei Bedarf können auch alle 8 Kanäle gespeichert werden!


Longbow


Hallo Longbow,

verstehe ich das richtig, dass ich nach einen Grenzwertalarm die letzten 10 Werte vor dem Alarm aus den internen Speicher lesen kann?
Hast du Unterlagen wo beschrieben wird wie man das Modul parametrien muß damit es intern die Werte speichert? Im Handbuch zum Modul wird nur beschrieben das bei Grenzwertüberschreitung der OB40 aufgerufen wird und wenn ich dort den Programmcode für das messen der Werte reinschreibe wird das Hauptprogramm zu lange Unterbrochen.

mfg Homer J.
 
Hallo Longbow,

verstehe ich das richtig, dass ich nach einen Grenzwertalarm die letzten 10 Werte vor dem Alarm aus den internen Speicher lesen kann?
Hast du Unterlagen wo beschrieben wird wie man das Modul parametrien muß damit es intern die Werte speichert? Im Handbuch zum Modul wird nur beschrieben das bei Grenzwertüberschreitung der OB40 aufgerufen wird und wenn ich dort den Programmcode für das messen der Werte reinschreibe wird das Hauptprogramm zu lange Unterbrochen.

mfg Homer J.

Ich muss zugeben, dass ich das nicht in den beiden vorherigen Beiträgen geschrieben habe, weil ich es vergessen hatte.
Es so etws in der Art geht aber auch:
Es ist die sogenannte "Pretriggerung"

Einschränkung:
-Aufgzeichnet wird immer bis der Speicher voll ist, bei 8 Kanälen 8000 Werte pro Kanal.
-Wenn die Aufzeichnungsfunktion aktiv ist, gibt es keinen OB40 Alarm.
-Es gibt einen SFC, mit dem ermittelt werden kann, ob eine Flanke erkannt wurde und mann dann eine gewünschte Anzahl an Werten in die SPS holen kann.
Als Parameter gibt es steigende/fallende Flanke, Aufzeichnungsintervall und
Pretriggeranteil in Prozent (z.B. 10% Pretrigger bei 100µs Abtastzeit bei 8 Kanälen sind 80ms mit 800 Werten VOR dem Triggerereignis) Wenn man sich jetzt nur 10 Werte aus dem Speicher holt ist es auch ok!

Handbuch:
www.vipa.de
Service, Handbücher, System 300S, SM - SPEED-Bus Signalmodule


Bitte darauf achten, dass das Analog-Modul noch nicht zu alt ist, sonst ist ein Update notwendig.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Oszilloskopfkt. habe ich schon ausprobiert und dort stört mich gerade die Eigenschaft das man den Speicher erst auslesen kann wenn er voll ist.
Dazu kommt das man den Pretrigger nur ganzzahlig angeben kann,das heißt min. 1%. Bei 8 Überwachten Kanälen sind das also 80Werte. Da ich nur etwa 10-15 Werte über 20ms verteilt brauche habe ich die Zykluszeit des Moduls auf 1000µs gestellt. Dadurch ist der Speicher also erst nach 80ms voll und dann kann ich erst auslesen.Das ist einfach zu lange.
Ich habe auch schonmal die Zykluszeit auf 25µs gestellt daduch brauche ich aber, um die 20ms ab zudecken, 400Wert. Die auszulesen hat auch zu lange gedauert und meine anschließende Effektivwertberechnug aus den Werten dauert ebenfalls länger.
 
... du hast ja immer noch die Möglichkeit, dir entsprechend deiner ursprünglich formulierten Aufgabenstellung selber etwas zu erstellen ...
Das hätte dann auch den Vorteil, dass es (irgendwann) genau das tut, was du willst ...
 
Die Oszilloskopfkt. habe ich schon ausprobiert und dort stört mich gerade die Eigenschaft das man den Speicher erst auslesen kann wenn er voll ist.
Dazu kommt das man den Pretrigger nur ganzzahlig angeben kann,das heißt min. 1%. Bei 8 Überwachten Kanälen sind das also 80Werte. Da ich nur etwa 10-15 Werte über 20ms verteilt brauche habe ich die Zykluszeit des Moduls auf 1000µs gestellt. Dadurch ist der Speicher also erst nach 80ms voll und dann kann ich erst auslesen.Das ist einfach zu lange.
Ich habe auch schonmal die Zykluszeit auf 25µs gestellt daduch brauche ich aber, um die 20ms ab zudecken, 400Wert. Die auszulesen hat auch zu lange gedauert und meine anschließende Effektivwertberechnug aus den Werten dauert ebenfalls länger.

Diese Funktion ist eigentliche für schnelle Anwendugen ausgelegt bei denen die 25µs Abtastzeit notwendig sind.

Für den aktuellen Fall wäre dann entweder die von Larry Laffer vorgeschlagene Variante mit OB35 (alle 1 ms aufrufen) und dort jeweils einen Wert auslesen oder

man nutzt den FIFO mode des Moduls:

z.b. Abtastzeit alle 1000µs und OB35 z.b. auf 10ms.

Dann in jedem OB35 die bis dorthin aufgelaufenen Werte auslesen (ca. 10) und die Flankenauswertung in AWL ausführen.
 
Zurück
Oben