Undeffinierter Schaltzustand durch "Versatz" von SPS-Zykluszeit und PWM-Zeit?

Begonnen von Gebo, 12. August 2014, 10:46:40

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

Gebo

Hallo Zusammen,

vorweg: Ich kenne mich wirklich nur am Rande mit SPS aus, möchte aber dennoch eine Versuchsanlage wie gewünscht zum Laufen bringen. Vielen Dank für Eure Hilfe!!!

Zur Leistungssteuerung einer Heizung in einer Versuchsanlage würde ich gerne eine Pulsweitenmodulation im SPS (BC9000) einsetzten. Inzwischen ist es gelungen den Baustein PWM_PW der Oscat Library einzubinden (über TwinCat 2).
Für die Gesamtpulsweite sind 5s (bzw. F=0,2Hz) vorgesehen, wobei die Leistung im Prozentbereich (sprich ganzzahlig Werte von 0-100 als "Leistungsvorgabe") gesteuert werden soll. Sprich der Puls würde in 100 Schritte, also 50ms unterteilt, bei welchen geschaltet werden soll. Der Ausgang der PWM soll also innerhalb des 5s-Pulses genau "Leistungsvorgabe*50ms" ein sein, die restliche Zeit des Pulses aus.

Nun Stellt sich die Frage wie deffiniert der Schaltzustand sein wird, bzw. inwieweit es zur Zykluszeitüberlappung kommt:

Die Messung des SPS-Zyklus ergab bis ca. max 30ms Zykluszeit. Sicherheitshalber würde ich die Zykluszeit deshalb auf 50ms einstellen (gibt es nebenbei für den BC9000 eine Möglichkeit einen Fehlermeldung bei überschreitung dieser 50ms zu generieren?)

Erreiche ich nun, wenn die Pulsweite (Eingang PW des PWM_PW Bausteins) über "Leistungsvorgabe*50ms" eingestellt wird, einen deffinierten Schaltzustand?
Sprich beziehen sich Zykluszeit und PWM Zeit auf die gleiche "Zeitbasis"?
Bzw. habe ich nach jedem SPS-Zyklus einen genau deffinierten Schaltzustand, oder kann es passieren, dass die Zeitbasis einen minimalen Versatz hat also bei einer "Leistungsvorgabe" von beispielsweise 63 es sein kann, dass wie gewünscht nach genau 63 SPS-Zyklen (63*50ms) der PWM-Ausgang abfällt, aber es ebenso sein kann, dass dieser erst nach dem 64sten Zyklus abfällt?
Dadurch ergäbe siche eine Ungewissheit der Leistungssteuerung von +/-1%, das würde ich gerne vermeiden. Leider kann ich den Schaltzustand nichtmal wirklich überprüfen (auf 50ms genau).

Falls der Schaltzustand undeffiniert ist, gibt es eine Möglichkeit dies zum umgehen oder zu verbressern? Z.B. über eine PWM die nicht eine bestimmte Zeit, sondern einen bestimmte "SPS-Zyklenzahl" an ist? (-> lässt sich die "SPS-Zyklenzahl" auslesen/als Variable verwenden?)


Ich hoffe meine laienhafte Erklärung ist verständlich genug!

Vielen herzlichen Dank für Eure Hilfe!!
Beste Grüße
Gebo

Omalik

Hallo Gebo

Ich würde es so machen:

Lösung 1:
Einen Task der alle 50ms aufgerufen wird. in diesem Task machst du das Ein- uns Ausschalten (PWM) selber. Dann hast du deine Zweifel erschlagen.

Lösung 2:
Die Leistung für die Heizung muss du auch berechnen (PID Regelung oder so was) Dann ist es eigentlich egal ob es einen Zyklus daneben ist, oder?

Ich würde Lösung 2 testen...

Gruss


Gebo


Erstmal vielen Dank Omalik!!

Deine "Lösung 2" trifft nicht zu, da keine Temperaturregelung stattfindet. Beim geplanten Versuch sind Temperaturschwankungen tunlichst zu vermeiden, deshalb soll tatsächlich nur die Heizleistung direkt gesteuert werden, die Temperatur stellt sich dann selbst ein (nicht nachgeregelt). Deshalb wäre auch wichtig das die Zykluszeit stimmt.

Zu Vorschlag "Lösung 1":
Entsteht ein Unterschied ob ich den Haupt SPS-Zyklus auf 50ms einstelle oder einen extra Task für die PWM mit 50ms anlege? Sollte die Rechenzeit des Haupttasks (höhere Priorität) die 50 ms überschreiten wird auch der extra angelegte PWM Task versetzt (oder garnicht) durchlaufen, oder nicht?
Unabhängig davon wäre dein Vorschlag (ähnlich wie eingangs beschrieben), dass die PWM nicht nach einer gewissen Zeit, sondern nach einer bestimmten Anzahl durchlaufener Tasks (bzw. eben SPS-Zyklen) schaltet, wobei die Tasks bzw. SPS-Zyklen eine fixe Zeitvorgabe hätten.

Um das so umsetzten zu können müsste ich aber die Zyklen/Taskdurchläufe mitzählen.
Geht das? Bzw. wie müsste man das aufbauen?
Und lässt sich eine Fehlermeldung generieren wenn die vorgegebene SPS-Zyklus- bzw. Taskzeit überschritten werden sollte?


Und noch eine Frage, für welche ich mich gleich entschuldige, aber ich hatte bisher noch nie was mit SPS zu tun:
Wie lege dich denn überhaupt einen gesonderten Task an (BC9000, TwinCat2)?

Vielen Dank!!

Beste Grüße
Gebo