Tastverhältnis von Digitaleingang messen/berechnen

toto45

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

ich möchte von einem Digitaleingang das Tastverhältnis (Verhältnis zwischen Ein/- Ausschaltzeit eines Rechtecksignals) messen bzw. berechnen. Gibt es dafür fertige Bausteine? Wenn nicht wie macht man das am besten?
 
Ziemlich global gefragt...

Wie ist denn das Puls/Pause Verhältnis?

Geht es um mS, S oder Stunden?

Ich wüsste nicht das es fertige BST dafür gibt.

Du kannst z.B. im Sekundentakt Merkerwörter hochzählen oder die Systemzeit auslesen und voneinander abziehen oder oder oder.
 
Es geht um Sekunden.
Ich habe so angeffangen, dass ich ein Taktmerker mit 10 Hz angelegt habe.
Dazu zwei Zähler. Einer für die Periodendauer einer nur für die Einschaltzeit.
Bei positiver Flanke fangen beide Zähler an zu zählen.
Sie zählen dann die Takte des 10Hz Signals. Bei negativer Flanke sttoppt der erste Zähler (T_ein) bei der nächsten Flanke der Zähler T2. Dann möchte ich zunächst berechnen. Zählerstand geteilt durch die 10Hz ergibt jeweils die Zeit.
Habe aber noch das Problem, dass der Zählwert in Word (BCD Format ist). Wie kann ich diesen in REAL konvertieren.

Oder ist diese Methode generell unbrauchbar?
 
Hallo,
was ist daraus geworden ?
Ich bin über die Suche hier gelandet
Ich bräuchte auch eine "Tastverhältnis Messung" für ein (max.) 30 Hz Signal.
Ich hatte auch schon im Siemens Forum gefragt aber noch leider gar keine Antwort erhalten,
ich möchte als Neuling in beiden Foren nicht gleich als Crossposter abgestempelt werden deshalb schreibe ich das dazu.
https://www.automation.siemens.com/...spx?PageIndex=1&PostID=396554&Language=de#top

Bräuche aber zumindest mal ein Tipp ob das überhaupt geht in einer
S7-1200

Danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bräuche aber zumindest mal ein Tipp ob das überhaupt geht in einer
S7-1200
Hallo Hesse,
falls die 1200er überhaupt die Zykluszeit ausgibt, würde ich es so machen wie Manfred in #3 schrieb.
  1. Mit der Flanke von der ersten Taste einen Merker setzen.
  2. Mit diesem Merker in jedem Zyklus die Zykluszeit auf ein Merkerwort addieren.
  3. Mit der Flanke von dem zweiten Taster den Merker zurücksetzen.
  4. Ergebnis == Merkwort = Zeit in Millisekunden.
 
Hallo,
danke für die Antwort :razz:
falls die 1200er überhaupt die Zykluszeit ausgibt,
Wie bekomme ich das raus?
Habe das Handbuch schon einige mal vor und zurück durchsucht .
Finde einiges zur Zykluszeitüberwachung, aber keine Anhaltspunkt wo
Ich die aktuelle Zykluszeit abzapfen könnte.

OB1_PREV_CYCLE scheint es nicht zu geben oder ich mach
es falsch …. ohne AWL


Gruß
 
Die 12xxC Modelle haben doch schnelle Zähler die sich auch zur Frequenzmessung nutzen lassen. Hast du dir das schonmal angesehen?

Für die Zeitmessung zu Fuß ist die 1200er schlecht ausgerüstet. An die Zykluszeit des OB1 kommt man nicht heran, und eine Funktion um einen internen Time-Tick zu lesen scheint es auch nicht zu geben.
Je nach Anforderung an die Genauigkeit würde ich einen TON-Timer verwenden der möglichst lange durchläuft. Über die Differenz der abgelaufenen Zeit des TON vom aktuellen und vorigen Aufruf kann man die Zykluszeit berechen. Die Auflösung beträgt zumindest 1ms, über die Genaugkeit der Timer gibt das Handbuch keine Auskunft.
Wenn du den TON-Timer neustartest (was spätestens nach 24 Tagen notwendig ist) ist zu beachten dass dir bei üblicher Programmierung die Dauer von einer Zykluszeit verloren geht, da du den Timer mindestens einmal mit false am Eingang aufrufen musst. In dem Fall müsste man den Timer dann zweimal direkt hintereinander aufrufen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo und Danke
Die 12xxC Modelle haben doch schnelle Zähler die sich auch zur Frequenzmessung nutzen lassen. Hast du dir das schonmal angesehen?

Ja habe ich. Die Frequenzmessung nutze ich auch, und die funktioniert auch.

Nur ist eine Frequenzmessung halt keine „Bestimmung des Tastverhältnisses“.

In die Richtung einen Timmer zu missbrauch habe ich auch schon gedacht,
aber eine Auflösung von 1ms ist halt lang für eine
Periodenzeit von (30Hz 1000ms/ 30 = 33,3ms)


Das heißt also: Eine S7-1200 ist dafür ungeeignet, wenn eine Auflösung des Tastverhältnis von 1% erreicht werden soll?
 
Ja habe ich. Die Frequenzmessung nutze ich auch, und die funktioniert auch.

Nur ist eine Frequenzmessung halt keine „Bestimmung des Tastverhältnisses“.

Direkt scheint sich das Tastverhältnis nicht bestimmen zu lassen.

Aber mit einer Trick-Schaltung könnte man das realisieren (Achtung, nicht getestet, aber laut Handbuch sollte es so funktionieren):
Du benötigst dazu nur ein externes Taksignal mit einer höheren Frequenz als dein Signal das du messen willst, beispielsweise 1 kHz. Wenn du eine Steuerung mit PWM Transistorausgängen hast, kannst du dir dieses Signal mit der SPS selber generieren.

Dann konfigurierst du den Zähler als "Einphasenzähler mit externer Richtungsumkehr.

Auf Eingang 1 legst du den Takt vom Ausgang der SPS, mit z.B. 1 kHz.
Auf Eingang 2 legst du dein Messsignal. Dieser Eingang legt die Zählrichtung des Zählers fest.

Daraus ergibt sich die gewünschte Funktion. Wenn dein Messignal high ist zählt der Zähler vorwärts, ist es low so zählt er rückwärts. Bei einem Tastverhältnis von 50% sollte der Zähler somit bei 0 stehen, bei kleiner als 50% im negativen und bei größer 50% im positiven Bereich. Zusammen mit der Frequenz des Taktsignals kannst du aus den Zählerständen die Zeiten für high und low bestimmen.

Du wirst aber über eine Mindestanzahl an Perioden messen müssen, weil du es nicht hinbekommst den Zähler direkt auf den Anfang einer Periode zu triggern. D.h. es würde zwar prinzipiell über den Eingang 3 gehen (welcher den Zähler zurücksetzt), aber du bekommst den Zähler bei 30 Hz wohl nicht schnell genug im Programm ausgelesen.
Wenn es die Aktualisierungsrate zulässt, würde ich entsprechend der gewünschten Genauigkeit lange messen und dann mitteln.
 
Hallo,
ein 30 Hz Signal hat eine Periode von 33,33 ms. Das bedeutet dass, man es mindestens in einem 3ms (1/10) Zyklus abtasten muss um ein etwas aussagefähiges Ergebnis mit 10% Genauigkeit zu bekommen. Also wenn Du das Signal zyklisch abtasten möchtest sollte das Programm im 1ms Zyklus (Weckalarm) laufen. Dies ergibt jedoch eine gigantische CPU Belastung.
Die zweite Möglichkeit ist das Signal über einen Alarm-OB zu bearbeiten und nur bei steigender und fallender Flanke aufrufen. Im Programm werden dann anhand der CPU-Zeit oder der Laufzeit eines Systemtimers die tatsächlichen Zeiten errechnet.

Gruß
Johannes
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Darum ja auch den internen Zähler der SPS dazu verwenden.
An die 33ms hab ich eben garnicht gedacht, das ist ja garnicht so schnell. Da kann man ja ohne Probleme bei steigender Flanke den Zähler zurücksetzen lassen und sich damit auch gleich das Ergebnis der letzten Messung auslesen.
 
Hallo,
Danke für eure Antworten
Im Programm werden dann anhand der CPU-Zeit oder der Laufzeit eines Systemtimers die tatsächlichen Zeiten errechnet.
Das ist aber doch wohl das Problem in der S7-1200, es ist keine Systemzeit erreichbar,
und eine künstlich erzeugte hat dann nur eine Auflösung von 1ms


@Thomas_v2.1

Die Idee ist gut , kommt sehr meinem Ursprungsgedanke nahe .
Der war; Ein schnellen Takt auf Zähler geben und nur
in der Highzeit vom Meßsignal ein Tor zum Zählereingang öffnen,
da das aber wohl aus Hardware Gründen in der S7-1200 nicht geht
ist der Vor/Rückeingag eine gute Idee

Danke

Schade dass es keine Möglichkeit gibt einen internen schnellen Takt an eine Zähler zu binden.
Meine Sps ist eine Relaisausführung, somit muss ich zum erzeugen eines PWM Signal noch ein
Signalboad anschaffen.
In dem Fall darf ich leider nix basteln muss alles mit Zulassung und „Kaufbar“ sein

Gruß Hesse
 
Da wäre es sicher am günstigsten ein Zusatzmodul für die 1200er zu kaufen welches man direkt auf die CPU oben aufstecken kann, um sich damit das Taktsignal zu generieren.

Ich habe das mit den Zählern gestern mal kurz ausprobiert und mir das Taktsignal mit einem AVR generiert.
Die Doku zu den Zählereingängen im Handbuch ist auch nicht so ganz vollständig. Der optionale Rücksetzeingang reagiert z.B. nicht auf eine Flanke sondern auf Dauersignal. Darum könnte man diesen Eingang auch als Torsignal (also Freigabe für den Zähler) verwenden. Wenn du es hinbekommst dein Zählsignal normal auf den einen und invertiert einen anderen Eingang zu bekommen, kannst du direkt mit zwei Zählern die Ein- und die Ausschaltdauer messen.
Man kann dann bei einem Zähler einen Interrupt bei einem Rücksetzsignal generieren, und dann im Interrupt die Zählerstände für die Auswertung auslesen und zurücksetzen.

Unabhängig von den Zählern kann man sich auch noch ein Interrupt bei Flankenwechsel eines beliebigen Eingangs generieren lassen. Dieses ist aber für so schnelle Signale nicht zu gebrauchen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
....................... ausprobiert und mir das Taktsignal mit einem AVR generiert.

:):D

Ich würde am allerliebsten die ganze Tastverhältnis Messung
in eine AVR stecken und dann per Frequenzsignal oder analog
zur SPS geben.

Mal sehen, im Laufe der Woche wird sich der Weg entscheiden,
es ist jetzt zumindest schon mal geklärt wie es geht.
 
Ich würde am allerliebsten die ganze Tastverhältnis Messung
in eine AVR stecken und dann per Frequenzsignal oder analog
zur SPS geben.

Manchmal wundere ich mich auch, dass Dinge die in einem Mikrocontroller trivial sind in einer SPS sehr viel Aufwand benötigen.
Wobei die 1200er für die Verarbeitung von "schnellen" Signalen im schon nicht schlecht ausgestattet ist. Was man bräuchte wäre ein einfacher Logik-Block für 24V Signale in Hardware für AND, NAND, OR usw., aber da gibt es nichts fertiges.
 
Zurück
Oben