Pulssignal einfach programmieren

redtshirt

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

ich hab im Moment ein Brett vorm Kopf. Ich muss über einen digitalen Ausgang ein Signal erzeugen.
500ms 1; 500ms 0; 500ms 1; und 500ms 0 und dann als 2tes 500ms 1; 500ms 0; 500ms 1; und 500ms 0; 500ms 1 und 500ms 0
Hab schon verschiedene Ansätze ausprobiert aber nix funktioniert. Wie würdet ihr das machen?
 
Willst du sagen, du sollst ein Pulssignal erzeugen, das alle 500ms den Zustand wechselt? Ich nehem an das 2. Signal soll mit entgegengesetzter Phase laufen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Willst du sagen, du sollst ein Pulssignal erzeugen, das alle 500ms den Zustand wechselt? Ich nehem an das 2. Signal soll mit entgegengesetzter Phase laufen?


Steht da zwar so nicht aber man kann sich auch noch komplizierter ausdrücken ;-)

Nimm einen Taktmerker und einfach auf einen Ausgang verknüpfen und den gleichen Merker negiert auf den zweiten Ausgang wenn es so sein sollte
wie Rale es verstanden hat :ROFLMAO:

MFG
 
ob1_prev_cycle (oder wie das ding heißt) addieren ist hier die schönere lösung, wenn auch die abweichung + eine zykluszeit betragen könnte ...
 
...Wie würdet ihr das machen?
Da ich momentan nur die S7-200 programmiere und Du ja keine Hardware vorgegeben hast:
S7-200 Hilfe schrieb:
Die Funktion Impulsfolge (PTO) stellt einen Rechteckausgang (50 % relative Einschaltdauer) zur Verfügung, wobei der Anwender die Zykluszeit und die Anzahl der Impulse angeben kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Als CPU läuft eine 319 (Zykluszeit im Moment 2-3ms). Aber irgendwie bekomm ich die Signalfolge von 2 mal 500ms 1 und 0 und 3 mal 500ms 1 und 0 nicht gebacken. Das Signal kann maximal 10ms abweichen. Eine der beiden Signalfolgen soll alle paar Minuten einmal durchlaufen werden.
 
Als CPU läuft eine 319 (Zykluszeit im Moment 2-3ms). Aber irgendwie bekomm ich die Signalfolge von 2 mal 500ms 1 und 0 und 3 mal 500ms 1 und 0 nicht gebacken. Das Signal kann maximal 10ms abweichen. Eine der beiden Signalfolgen soll alle paar Minuten einmal durchlaufen werden.

im moment? kommt da noch mehr programm zu?
ansonsten: durchsuch das forum nach "blinker" (o.ä.) "ob1_prev_*"...
 
Als CPU läuft eine 319 (Zykluszeit im Moment 2-3ms). Aber irgendwie bekomm ich die Signalfolge von 2 mal 500ms 1 und 0 und 3 mal 500ms 1 und 0 nicht gebacken. Das Signal kann maximal 10ms abweichen. Eine der beiden Signalfolgen soll alle paar Minuten einmal durchlaufen werden.
Meine ersten Gedankengänge dazu:
Ich würd' den OB35 alle 500ms aufrufen.
Wenn keine Freigabe für die Impulsfolge(n) wieder abbrechen.
Ansonsten den Ausgang bei jedem Aufruf negieren und die negativen Flanken mitzählen. Bei 2 bzw. 3 dann die jeweilige Freigabe zurücksetzen.

Was hattest Du denn schon versucht?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Als CPU läuft eine 319 (Zykluszeit im Moment 2-3ms). Aber irgendwie bekomm ich die Signalfolge von 2 mal 500ms 1 und 0 und 3 mal 500ms 1 und 0 nicht gebacken. Das Signal kann maximal 10ms abweichen. Eine der beiden Signalfolgen soll alle paar Minuten einmal durchlaufen werden.
Ah, das Ganze soll also nicht endlos laufen, sondern 2x1-0 und 3x1-0.

in diesem Falle würde ich zuerst ein Taktsignal erzeugen, das für deinen Zwecke hinreichend genau ist. Wenn die CPU bei 2-3 ms bleibt, geht das schon mit SPS-Timern, wenn das zu ungenau sein sollte, dann kann man ja immer noch den Vorschlag von 4L umsetzen. Diesen Takt auf den Rückwärts-Zähleingang eines Zählers legen, der mit 2 oder 3 vorbesetzt ist, den Ausgang des Zählers auf einen Merker.

So lange der Zähler >0 ist der Merker True.
Nun kann man den Takt und den Merker verknüpfen.

So sieht das etwa in FUP aus:

attachment.php


M2.0 Startet das Ganze.
Der Zählwert entspricht der Anzahl der Signalwechsel.
M1.2 ist das gewünschte Ausgangssignal.
 

Anhänge

  • Takt1.jpg
    Takt1.jpg
    63,1 KB · Aufrufe: 100
Zuletzt bearbeitet:
das problem am taktmerker ist, dass er asynchron läuft!
Wenn man den Taktmerker am Anfang des Zyklus einem anderen Merker zuweist und dann nur noch diesen Merker weiterverknüpft,
dann gibt es kein asynchron-Problem mehr. Die Abweichung ist maximal 1 Zyklus. Genauer geht es bei CPU ohne integrierte Peripherie
nur in OB3x, und auch nur dann, wenn man direkt im OB3x auf den Peripherie-Ausgang schreibt.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
vierlagig hat Recht ...

Mal wieder zurückrudern :-(

Weil vierlagig immer nur so kurze Sätze schreibt, dachte ich, er spielt auf die Asynchronität der Taktmerker zum OB1-Zyklus an.
Tatsächlich meint er wohl die Asynchronität zur gewünschten Impulsfolge. Wenn die Impulsfolge sofort beim aktivieren der Freigabe
beginnen soll, dann kann man natürlich keinen Taktmerker benutzen. So gesehen hat vierlagig natürlich vollkommen recht.
redtshirt kann das Danke bei meinem Beitrag wieder zurücknehmen. ;)

Und VL hat auch recht damit, daß man die Zeitmessung mit OB1_PREV_CYCLE (und einem Addierer mit Weiterverarbeitung des Übertrags)
realisieren sollte. Mit normalen Timern erzeugt, werden alle Impulse immer 1 bis 2 OB1-Zykluszeiten zu lang.

Harald
 
Mal wieder zurückrudern :-(

Weil vierlagig immer nur so kurze Sätze schreibt, dachte ich, er spielt auf die Asynchronität der Taktmerker zum OB1-Zyklus an.
Tatsächlich meint er wohl die Asynchronität zur gewünschten Impulsfolge. Wenn die Impulsfolge sofort beim aktivieren der Freigabe
beginnen soll, dann kann man natürlich keinen Taktmerker benutzen. So gesehen hat vierlagig natürlich vollkommen recht.
redtshirt kann das Danke bei meinem Beitrag wieder zurücknehmen. ;)

Und VL hat auch recht damit, daß man die Zeitmessung mit OB1_PREV_CYCLE (und einem Addierer mit Weiterverarbeitung des Übertrags)
realisieren sollte. Mit normalen Timern erzeugt, werden alle Impulse immer 1 bis 2 OB1-Zykluszeiten zu lang.

Harald

geht doch, und ich hab mir die mühe gespart, das ganze nochmal zu erklären :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, die langen Erklärungen sind mein Part und Deiner ist das Recht haben ;)

Harald

wenn ich mehr als deine büro-nummer hätte würd ich dich jetzt anrufen und sagen: "jopp"

aber um noch mal auf den ob1_prev_cycle zurück zu kommen, wenn man die funktion lange genug betreibt kann man damit eine +-1/2 zyklus genaue taktung hinbekommen, man bilde nur den mittelwert und entscheide, ob man im nächsten zyklus weit über dem zielwert liegen würde...
 
Zurück
Oben