Dadurch wird der Endwert bereits deutlich vor den acht Stunden erreicht. Das ist genau so falsch, wie wenn man von 0°C Starttemperatur ausgeht.
Was hier wirklich falsch oder richtig ist, das entzieht sich unserer Kenntnis.
Ist es richtig, die AnstiegsGeschwindigkeit genau einzuhalten oder ist es richtiger, die Dauer der Aufheizung genau einzuhalten?
Oder wäre es noch viel richtiger, einen bestimmten "KomproMix" aus beiden Anforderungen zu finden?
Oder muss die StartTemperatur immer reproduzierbar dieselbe sein? Das scheint mir alles nicht Gegenstand der Aufgabenstellung zu sein.
Aber es kann nicht schaden, bei der Umsetzung der Aufgabe auch solche Aspekte im Auge zu behalten. Desto flexibler und leichter anzupassen dürfte der gefundene Lösungsweg dadurch werden.
Wenn man erfährt, worauf es ankommt, kann man die Parameter für die RampenBildung entsprechend berechnen.
Ich sehe es aber nach wie vor nicht als Aufgabe eines RampenBausteins, selbst die Parameter zu ermitteln/manipulieren, passend zu irgendwelchen beliebig festzulegenden Szenarios.
Wer das gerne/unbedingt möchte, darf aber gerne diesen Weg beschreiten. Vielleicht fehlt ja in der ProgrammBibliothek noch eine eierlegende Wollmilchsau zu diesem Thema.
Um die Möglichkeit, einen Startwert für den Rampenwert zu übernehmen, könnte man den RampenBaustein problemlos erweitern, ohne ihn zu verkomplizieren. Z.B.:
Code:
IF ixIstwertUebernehmen THEN // Istwert-Übernahme
iorSetRmp := irIstwert ;
ELSIF irSetpIn > iorSetRmp THEN // Ansteigen des Sollwertes
iorSetRmp := MIN(IN1:=iorSetRmp + irPosGrd, IN2:=MIN(IN1:=irMaxVal, IN2:=irSetpIn)) ;
ELSIF irSetpIn < iorSetRmp THEN // Abfallen des Sollwertes
irSetRmp := MAX(IN1:=iorSetRmp + irNegGrd, IN2:=MAX(IN1:=irMinVal, IN2:=irSetpIn)) ;
END_IF;
Zeile 1 und 2 sind hinzu gekommen. In der nächsten Zeile wurde IF in ELSIF geändert.
Edit (2022-03-26 11:15):
'ixIstwertUebernehmen' ist eine BOOLesche InputVariable, die am Baustein prametiret wird.
Solange an diesen Eingang 'TRUE' angelegt wird, wird 'iorSetRmp := irIstwert ;' ausgeführt und damit ein weiterer Eingang des Bausteins, nämlich 'irIstwert' direkt auf die IN_OUT-Variable 'iorSetRmp' (das RampenSignal an den Regler) kopiert.
Ist 'ixIstwertUebernehmen' 'FALSE', so wird 'iorSetRmp' vom Istwert "abgekoppelt" und enthält dann stattdessen den aktuellen Wert für die Rampe.
Zugabe für die Berechnung eines fehlenden Parameters für die Rampe:
Code:
// wahlweise 1 von 4 Werten aus den 3 anderen berechnen
IF ixCalcStartVal THEN
iorStartVal := iorEndValue - iorGradient * iorDuration ;
ELSIF ixCalcEndValue THEN
iorEndValue := iorStartVal + iorGradient * iorDuration ;
ELSIF ixCalcGradient THEN
iorGradient := (iorEndValue - iorStartVal) / iorDuration ;
ELSIF ixCalcDuration THEN
iorDuration := (iorEndValue - iorStartVal) / iorGradient ;
END_IF ;
Edit (2022-03-26 11:30):
Mit den BOOLeschen InputVariablen 'ixCalcStartVal', 'ixCalcEndValue', 'ixCalcGradient' und 'ixCalcDuration' sagt man, welche der 4 verschiedenen Berechnungen ausgeführt werden soll. Ist keine dieser Variablen 'TRUE', so tut der Baustein nichts.
Ist 1 der Variablen 'TRUE', so wird die entsprechende Berechnung ausgeführt.
Normalerweise sollten nicht mehrere der 4 Variablen gleichzeitig 'TRUE' sein. Ist dies trotzdem der Fall, so wird trotzdem nur 1 der 4 Berechnungen ausgeführt. Welche dies ist, darüber entscheidet die Reihenfolge, in der die Variablen abgefragt werden. Die erste Bedingung, die erfüllt ist, erhält den Zuschlag.
Aber, wie gesagt, der Normalfall ist "NichtsTun" (alle 4 Bits 'FALSE') bzw. in Ausnahmefällen 1 der 4 Bits ist 'TRUE' und es soll die so gewählte Berechnung ausgeführt werden und man sollte tunlichst vermeiden, dass 2 oder mehr der Bits gleichzeitig zu 'TRUE' gemacht werden.
Vermeiden nur deshalb, damit man noch den Überblick behält.
Sooo, die 4 Berechnungen sollten eigentlich gut lesbar und verständlich sein.
'iorStartVal' ist der Startwert, der aus dem Endwert, der Steigung und der Dauer berechnet wird.
'iorEndValue' ist der Endwert, der aus dem Startwert, der Steigung und der Dauer berechnet wird.
'iorGradient' ist die Steigung, die aus dem Endwert, dem Startwert und der Dauer berechnet wird.
'iorDuration' ist die Dauer, die aus dem Endwert, dem Startwert und der Steigung berechnet wird.
Damit kann man aus 3 der 4 Variablen die jeweils fehlende berechnen. Z.B. die Dauer aus Anfangs- und Endwert der Temperatur sowie der Steigung.