Skalierung Frequenzumrichter

Zuviel Werbung?
-> Hier kostenlos registrieren
Habe gerade gesehen, dass der FU über einen PID gesteuert werden soll. Dann musst Du doch bei deinem PID Regler "nur" dafür sorgen, dass der Regelwert im Bereich 0 - 100% ausgegeben wird, welchen Bereich der FU braucht ist da ja erstmal egal, damit muss der Regler nicht arbeiten, da reichen die 0 - 100%.
Am Ende musst Du den Regelwert dann in Digits umrechnen. X ist dann 0 - 100% und Y dann 0 - 32767.
Das heißt du meinst jetzt, das ich den normalen FU wert als ausgang vom Regler schreibe und dann danach umrechne?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das heißt du meinst jetzt, das ich den normalen FU wert als ausgang vom Regler schreibe und dann danach umrechne?
Ich bin leider recht unerfahren, was Regler angeht. Der Regler bekommt ja den aktuellen Füllstand und den Soll- Füllstand übergeben und vom FU nichts, darum musst Du da auch erst nichts von skalieren. Dem Regler ist ja auch egal, wer den Istwert beeinflusst. Du musst dafür sorgen, dass der Regler Werte von 0 - 100 als Sollwert für den FU ausgibt und diesen Wert musst Du dann auf die Digits (0 - 32767) umrechnen/skalieren.
Nachtrag: Oder Du sorgst dafür, dass der Regler die Digits (0 - 32767) für den FU Sollwert direkt ausgibt, aber da fehlt mir leider die Erfahrung.
 
Code:
// Regler arbeitet in Prozent (0–100 %)
// =====================
Regler(
    fSetpointValue := Wasser1,              // Sollwert 0–100 %
    fActualValue   := Sensor1_Skaliert,     // Istwert 0–100 %
    fManSyncValue  := 0.0,
    bSync          := FALSE,
    eMode          := eMode,
    bHold          := FALSE,
    fOut           => Regler_Out,           // Reglerausgang 0–100 %
    bARWactive     => ,
    eState         => ,
    eErrorId       => ,
    bError         => ,
    stParams       := ParameterF);


// Reglerausgang 0–100 % -> 0–32767 Digits (FU)
FU := REAL_TO_INT(
    F_Skalieren(
        x:= Regler_Out,
        x_max:= 100,
        x_min:= 0,
        y_max:= 32767,
        y_min:= 0));

So?
 
Code:
// Regler arbeitet in Prozent (0–100 %)
// =====================
Regler(
    fSetpointValue := Wasser1,              // Sollwert 0–100 %
    fActualValue   := Sensor1_Skaliert,     // Istwert 0–100 %
    fManSyncValue  := 0.0,
    bSync          := FALSE,
    eMode          := eMode,
    bHold          := FALSE,
    fOut           => Regler_Out,           // Reglerausgang 0–100 %
    bARWactive     => ,
    eState         => ,
    eErrorId       => ,
    bError         => ,
    stParams       := ParameterF);


// Reglerausgang 0–100 % -> 0–32767 Digits (FU)
FU := REAL_TO_INT(
    F_Skalieren(
        x:= Regler_Out,
        x_max:= 100,
        x_min:= 0,
        y_max:= 32767,
        y_min:= 0));

So?
Wenn der Regler den neuen Sollwert in % ausgibt und nicht nur die Änderung, dann sollte das jetzt passen.
Wie gesagt, was Regler angeht bin ich recht unerfahren, sorry.
Übrigens Daumen hoch dafür, dass Du eine explizite Konvertierung von REAL nach INT angefügt hast, viele "nutzen" da eine implizite Konvertierung, die aber zu Problemen führen kann.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn der Regler den neuen Sollwert in % ausgibt und nicht nur die Änderung, dann sollte das jetzt passen.
Wie gesagt, was Regler angeht bin ich recht unerfahren, sorry.
Ich habe mich erneut mit der Regler Lektüre beschäftigt.


Der Reglerausgang fOut ist vom Typ FLOAT.
Der Regler gibt dabei keine fest definierte Einheit aus (z. B. nicht automatisch 0–100 %).


Die ausgegebene Einheit hängt ausschließlich von der Skalierung der Ein- und Ausgangsgrößen ab.


Arbeitet man beispielsweise mit einem skalierten Füllstand in Prozent (0–100 %), dann liefert der Regler ebenfalls einen Prozentwert — vorausgesetzt, die Parametrierung ist konsistent:
Code:
Sollwert: 0…100
Istwert:  0…100
fOutMinLimit := 0
fOutMaxLimit := 100


Add: Also eigentlich eh genauso wie ichs schon angewendet habe nur das ich die Skalierung und Umrechnung danach machen muss. Ich glaube jetzt ist der Knopf aufgegangen. :D
 
Oder Du sorgst dafür, dass der Regler die Digits (0 - 32767) für den FU Sollwert direkt ausgibt
Das ist in der Regel unpraktisch, vor allem beim Debugging. Die normierte Darstellung erfordert zwar hier und da Skalierungen, ist aber deutlich übersichtlicher.
Und mit der mangelnden Erfahrung: Du schaffst das ;)
Ein Regelbaustein liefert übrigens nie %, kg, UpM oder sowas, sondern einfach nur ein Berechnungsergebnis abhängig von den Eingangsdaten und den Grenzwerten.
Wenn Du also willst, kann der Reglerausgang genauso Prozent, Saarländer oder Badewannen bedeuten. Da kannste dranschreiben, was Du willst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist in der Regel unpraktisch, vor allem beim Debugging. Die normierte Darstellung erfordert zwar hier und da Skalierungen, ist aber deutlich übersichtlicher.
Und mit der mangelnden Erfahrung: Du schaffst das ;)
Ein Regelbaustein liefert übrigens nie %, kg, UpM oder sowas, sondern einfach nur ein Berechnungsergebnis abhängig von den Eingangsdaten und den Grenzwerten.
Wenn Du also willst, kann der Reglerausgang genauso Prozent, Saarländer oder Badewannen bedeuten. Da kannste dranschreiben, was Du willst.
Aber so wie es jetzt ist passt es??

Code:
//Sensor 1 Umrechnung (Behälter 1)
Sensor1_Skaliert := F_Skalieren(
    x:= TO_REAL(Sensor1),
    x_max:= 32767,
    x_min:= 0,
    y_max:= 100,
    y_min:= 0);
    
//Ventil Umrechnung
Ventil_Skaliert := F_Skalieren(
    x:= TO_REAL(Ventil),
    x_max:= 32767,
    x_min:= 0,
    y_max:= 100,
    y_min:= 0);

//Durchfluss Umrechnung
//Durchfluss_Skaliert := F_Skalieren(
    //x:= TO_REAL(Durchfluss),
    //x_max:= 910,
    //x_min:= 0,
    //y_max:= 100,
    //y_min:= 0);

//Regler
Regler(
    fSetpointValue:= Wasser1,             //Sollwert in Prozent
    fActualValue:= Sensor1_Skaliert,     //Ist Wert von Sensor in Prozent
    fManSyncValue:= ,
    bSync:= ,
    eMode:= eMode,
    bHold:= ,
    fOut=> Regler_Out,                    //Regler Ausgang in 0-100 Prozent wegen Grenzen und Ist Wert
    bARWactive=> ,
    eState=> ,
    eErrorId=> ,
    bError=> ,
    stParams:= ParameterF);
    
    
// Reglerausgang 0–100 % -> 0–32767 Digits (FU)
FU := REAL_TO_INT(
    F_Skalieren(
        x:= Regler_Out,
        x_max:= 100,
        x_min:= 0,
        y_max:= 32767,
        y_min:= 0));

Add: sollte glaub ich noch Regler_Out als Lreal definieren da es blau unterstrichen ist und steht das Informationen verloren gehen können. Habs gerade als real definiert.
 
Zuletzt bearbeitet:
Ich denke ja. Allerdings hab ich bisher immer den Oscat-PID benutzt. Den Beckhoff Baustein hab ich damals bei meinen ersten Gehversuchen erstmal an die Seite getan - und nie wieder angeschaut ;)
Tipp für die schnelle Überprüfung eines P(ID) (Ergebnis, Regelrichtung etc:
Reglerausgang = Proportionalfaktor * (Sollwert - Istwert) zB. Heizen, Füllen bzw.
Reglerausgang = Proportionalfaktor * (Istwert-Sollwert) z.B Kühlen, Entleeren etc

Viel spannender ist aber die eigentliche Frage: Passiert jetzt, was Du erwartest?

PS: Wenn ich jetzt die Control-Parameter richtig deute, hat der Regler eine Abtastrate von 10ms. Das kann insbesondere ungünstig sein, wenn Du wirklich PID und nicht nur PI benutzen willst. Der D-Anteil wirkt nur für einen Abtastzyklus. Aber das ist schon ein spezielles Thema.
 
Ich denke ja. Allerdings hab ich bisher immer den Oscat-PID benutzt. Den Beckhoff Baustein hab ich damals bei meinen ersten Gehversuchen erstmal an die Seite getan - und nie wieder angeschaut ;)
Tipp für die schnelle Überprüfung eines P(ID) (Ergebnis, Regelrichtung etc:
Reglerausgang = Proportionalfaktor * (Sollwert - Istwert) zB. Heizen, Füllen bzw.
Reglerausgang = Proportionalfaktor * (Istwert-Sollwert) z.B Kühlen, Entleeren etc

Viel spannender ist aber die eigentliche Frage: Passiert jetzt, was Du erwartest?
Kann ich leider erst am Dienstag testen...... Aber ich HOFFE das es endlich funktioniert. Danke auch für die Merksätze.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
PS: Wenn ich jetzt die Control-Parameter richtig deute, hat der Regler eine Abtastrate von 10ms. Das kann insbesondere ungünstig sein, wenn Du wirklich PID und nicht nur PI benutzen willst. Der D-Anteil wirkt nur für einen Abtastzyklus. Aber das ist schon ein spezielles Thema.
Sowieso komisch ist, das der P-Anteil 3,3*10^-5 beträgt laut Sprungantwort...
 
Ich hab schon seit Jahren für 08/15 PID keinen automatischen Optimierungsbaustein benutzt.

Mit obigen Merksätzen parametrier ich mir immer erst einen PI und optimiere dann mit D. Immer nach der Praktikermethode, also am lebenden Objekt.

Allerdings sind das langsame Druck, Füllstands oder Temperaturregelungen für Kompressor, Lüftungs und Heizungsanwendungen. Da hab ich meistens ein passendes Bauchgefühl....
 
Ich hab schon seit Jahren für 08/15 PID keinen automatischen Optimierungsbaustein benutzt.

Mit obigen Merksätzen parametrier ich mir immer erst einen PI und optimiere dann mit D. Immer nach der Praktikermethode, also am lebenden Objekt.
Aso verstehe! Ja dann probier ichs dann vielleicht sogar mit der anderen methode dann auch. (wenn es nicht funktioniert.
Danke an alle für die Hilfe! ich melde mich am dienstag !!
 
Zurück
Oben