Danke.
Habe es für meine ersten Veruche zusammengezimmert.
Die Parameter werden über die serielle Schnittstelle einstellbar sein.
Da kann der Kunde experimentieren bis er eine gute Einstellung gefunden hat.
Lassen sich "iLimit" und "dIntVal" zur Laufzeit verändern?
Var Pid1 : PIDcontrol[iLimit, dIntVal];
Code
procedure pHK_Regelung;
begin
Case CASE_HK1_Regelung Of // HK1 Regelung.
0 : PID_HK1.pFactor:= 1000; // Verrechnungs-Faktor für den P-Wert.
PID_HK1.iFactor:= 2500; // Verrechnungs-Faktor für den I-Wert.
PID_HK1.dFactor:= 678; // Verrechnungs-Faktor für den D-Wert.
PID_HK1.sFactor:= 10000; // Verrechnungs-Faktor für den Stell-Wert (Ergebnis).
CASE_HK1_Regelung:= 1;
|
1 : If (HK1_EinAus = Ein) and (FehlerHK1 = Nein) Then
LED_HK1:= Ein;
CASE_HK1_Regelung:= 2;
ElsIf (HK1_EinAus = Ein) and (FehlerHK1 = Ja) Then
LED_HK1:= blinke;
HK1_Leistung:= 0;
Else
LED_HK1:= Aus;
HK1_Leistung:= 0;
EndIf;
|
2 : PID_HK1.Actual := Integer(fTempIstHK1*100); // Ist-Wert, 10,00°C = 10000.
PID_HK1.Nominal:= Integer(fTempSollHK1*100); // Soll-Wert, 10,00°C = 10000.
HK1_Leistung:= word(PID_HK1.Execute); // Ergebnis.
If HK1_Leistung > 1000 Then // 1000 = 100%
HK1_Leistung:= 1000;
EndIf;
CASE_HK1_Regelung:= 1;
|
EndCase;