Skalierung Frequenzumrichter

Zuviel Werbung?
-> Hier kostenlos registrieren
@Maximilian1: Ich habe gerade mal einen Blick in das von Dir verlinkte Handbuch geworfen.
Wenn ich es nicht missverstanden habe, musst Du bei dieser FU Serie den analogen Eingang über einen Jumper auf Strombetrieb stellen, in dem der Jumper zwischen 5 und 6 gesteckt wird und über den Parameter wird dann zwischen 0-20mA und 4-20mA umgeschaltet. Ist bei Dir der Jumper richtig gesteckt?
1000016457.jpg
 
Zuletzt bearbeitet:
Wenn ein Aktor in Spannungseinstellung am Stromausgang hängt, werden sich am Aktor immer 100% einstellen, da der Stromausgang den Spannungsausgang immer auf 100% bringt.

Im übrigen bin ich mir nach erneuter Lektüre garnicht sicher, ob man bis zum Ausgang denken muss. Mir scheint es um ein programminternes Problem zu gehen.
Bei einem Ventil funktioniert das exakt wie erwartet:
Wenn ich das Ventil 0–32767 force (Variable Ventil), wird es automatisch durch den Code auf 0-100% umgerechnet (Variable Ventil_Skalliert.


Beim Frequenzumrichter funktioniert dieses Prinzip allerdings nicht.
Ich kann zwar wieder die Variable Frequenzumrichter mit 0-32767 force, bekomme aber nicht die erwartete 0–100 % Skalierung .
@Maximilian1
Oder liege ich falsch und die Anzeige am FU Display stimmt nich?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Maximilian1: Ich habe gerade mal einen Blick in das von Dir verlinkte Handbuch geworfen.
Wenn ich es nicht missverstanden habe, musst Du bei dieser FU Serie den analogen Eingang über einen Jumper auf Strombetrieb stellen, in dem der Jumper zwischen 5 und 6 gesteckt wird und über den Parameter wird dann zwischen 0-20mA und 4-20mA umgeschaltet. Ist bei Dir der Jumper richtig gesteckt?
Anhang anzeigen 94295
Danke für die Info. Ich kanns leider erst am Dienstag prüfen, aber nehmen wir mal an der Jumper ist richtig eingestellt: Dann sollte es ja eigentlich mit 4-20mA funktionieren oder was wären dann die nächsten Schritte?
 
Hängt an dem analogen Ausgang immer der FU oder hingen da auch mal die von Dir erwähnten Ventile dran?
Falls da immer nur der FU dran hing wäre die Hardware Konfiguration, also die Klemmenreihenfolge, eventuell interessant. Bei den EL Klemmen gibt es welche, die den Powerbus nicht weiterleiten, falls es solche auch bei den KL Klemmen gibt könnte das eine Ursache sein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Maximilian1: Ich habe mir Deinen ersten Beitrag nochmals angesehen und wenn ich nicht völlig falsch liege, liegt die Ursache für Dein Problem in der Skalierung. Du rechnest da in die falsche Richtung. Das haben wir alle aber anscheinend bisher übersehen.
Der analoge Ausgang gibt bei einem Wert von 0 einen Strom von 4mA aus und bei einem Wert von 32767 einen Strom von 20mA. Der Wert 0 entspricht 0% und der Wert 32767 entsprechend 100%, alles dazwischen muss durch die Skalierung berechnet werden, nur tut das Deine Skalierung nicht. Statt einen Prozentwert in Digits umzurechnen, rechnest Du Digits in Prozent um. Bei Deiner Formel käme bei einem Wert von 16383 für x ein Wert von ca. 50% raus.
Wenn Du für x jetzt einen Wert von 0 - 100 vorgibts kommen da sehr kleine Werte raus. Du musst die Werte von X/Y min/max austauschen, dann sollte es klappen.
Also x_max = 100 und y_max = 32767.
 
Zuletzt bearbeitet:
Hängt an dem analogen Ausgang immer der FU oder hingen da auch mal die von Dir erwähnten Ventile dran?
Falls da immer nur der FU dran hing wäre die Hardware Konfiguration, also die Klemmenreihenfolge, eventuell interessant. Bei den EL Klemmen gibt es welche, die den Powerbus nicht weiterleiten, falls es solche auch bei den KL Klemmen gibt könnte das eine Ursache sein.
Auf der 4022 Klemme hängt wir makiert der Fu. Auf den anderen 2 Anschlüssen hängt das ventil. Ich kann aber auch wenn nötig den "improvisierten" Schaltplan übermitteln.
 
@Maximilian1: Ich habe mir Deinen ersten Beitrag nochmals angesehen und wenn ich nicht völlig falsch liege, liegt die Ursache für Dein Problem in der Skalierung. Du rechnest da in die falsche Richtung. Das haben wir alle aber anscheinend bisher übersehen.
Der analoge Ausgang gibt bei einem Wert von 0 einen Strom von 4mA aus und bei einem Wert von 32767 einen Strom von 20mA. Der Wert 0 entspricht 0% und der Wert 32767 entsprechend 100%, alles dazwischen muss durch die Skalierung berechnet werden, nur tut das Deine Skalierung nicht. Statt einen Prozentwert in Digits umzurechnen, rechnest Du Digits in Prozent um. Bei Deiner Formel käme bei einem Wert von 16383 für x ein Wert von ca. 50% raus.
Wenn Du für x jetzt einen Wert von 0 - 100 vorgibts kommen da sehr kleine Werte raus. Du musst die Werte von X/Y min/max austauschen, dann sollte es klappen.
Also x_max = 100 und y_max = 32767.
Sehr interessant. Das heißt wenn man die Maximalwerte umdreht, rechnet man in die richtige Richtung und die Skalierung sollte Funktioniern? Dann muss ich auch noch die anderen Skalierungen umrechnen.

Was ich jedoch noch nicht ganz verstehe ist: Warum die Sensoren die richtige Umrechnung anzeigen. Die sind nämlich genauso mit der gleichen Umrechnung Skaliert und 50% sind auch wirklich 50% und so weiter.
Ich schätze aber ich hab da noch einen kleinen Denkfehler, klärt mich gerne auf!
 
Was ich beim erneuten durchlesen noch immer nicht verstehe ist, wofür die Skalierung verwendet werden soll.
Beim Ventil schreibst Du, dass Du den Ausgangswert der Klemme forcest und die Formel Dir dann den Sollwert für den Öffnungsgrad des Ventils in % angibt. Dafür wären die Werte für x/y min/max auch richtig.
Soll beim FU denn auch der Sollwert der Klemme in % umgerechnet werden oder aber ein % Wert in Digits umgerechnet und über die Klemme an den FU gegeben werden?
 
Ich schick in ca. einer Stunde mal den Ganzen Code rein, ich denke so ist es leichter zu verstehen und erklär dann was ich genau machen will. Ich versteh schon das es vielleicht etwas undeutlich erklärt war, sorry.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sehr interessant. Das heißt wenn man die Maximalwerte umdreht, rechnet man in die richtige Richtung und die Skalierung sollte Funktioniern? Dann muss ich auch noch die anderen Skalierungen umrechnen.

Was ich jedoch noch nicht ganz verstehe ist: Warum die Sensoren die richtige Umrechnung anzeigen. Die sind nämlich genauso mit der gleichen Umrechnung Skaliert und 50% sind auch wirklich 50% und so weiter.
Ich schätze aber ich hab da noch einen kleinen Denkfehler, klärt mich gerne auf!
Weil bei den Sensoren die Richtung eine andere ist.
Hier willst Du einen Istwert von Digits in eine physikalische Größe umrechnen. Bei der Vorgabe eines Sollwertes ist es aber andersherum, hier willst Du eine physikalische Größe (z.B. Drehzahl, %) in Digits (Hier 0 - 32767) umrechnen.
Wie gesagt, ließ Dir hier im Forum mal den FAQ Beitrag zum Thema Skalierung durch, dann wird vielleicht vieles klarer.
Nachtrag: Mir fällt gerade mit Schrecken auf, dass der Beitrag nur die Umrechnung von Digits in eine physikalische Größe behandelt, aber nicht die andere Richtung. Das muss ich die Tage mal ändern. Die Anpassung der Formel sollte aber nicht so kompliziert sein.
 
Zuletzt bearbeitet:
Verstehe! Habe mir jetzt den Beitrag durchgelesen und jetzt wird einiges etwas klarer. Anbei übermittle ich noch den restlichen Code:
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);



//Frequenzumrichter Umrechnung

FU_Skaliert := F_Skalieren(
    x:= TO_REAL(FU),
    x_max:= 32767,
    x_min:= 0,
    y_max:= 6553,
    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,
    fActualValue:= Sensor1_Skaliert,
    fManSyncValue:= ,
    bSync:= ,
    eMode:= eMode,
    bHold:= ,
    fOut=> FU_Skaliert,
    bARWactive=> ,
    eState=> ,
    eErrorId=> ,
    bError=> ,
    stParams:= ParameterF);





GVL:

VAR_GLOBAL

 
//Behälter 1
    Sensor1_Skaliert: REAL;
    Sensor1 AT %I*: INT;

 

//Behälter 2
    Sensor2_Skaliert: REAL;
    Sensor2 AT %I*: INT;

 

//Durchfluss
    Durchfluss_Skaliert: REAL;
    Durchfluss AT %I*:INT;

 

//Ventil+Frequenzumrichter
    FU_Skaliert: LREAL;
    FU AT %Q*: INT;

    Ventil_Skaliert : LREAL;
    Ventil AT %Q*:INT;



//..
    Wasser1 AT %I*: REAL;
    Wasser2 AT %I*: REAL;



//PID Parameter
    F_Kp:INT;
    F_Tn:TIME;
    F_Tv:TIME;

 

//Regler

    Regler: FB_CTRL_PID;
    eMode: E_CTRL_MODE := E_CTRL_MODE.eCTRL_MODE_ACTIVE;
    ParameterF: ST_CTRL_PID_PARAMS := (tCtrlCycleTime := TIME#10MS, tTaskCycleTime := TIME#10MS, tTd := TIME#10S, fOutMaxLimit := 100, fOutMinLimit := 0);

 

//Visualisierung

    P_Enable: BOOL := FALSE;
    I_Enable: BOOL := FALSE;
    D_Enable: BOOL := FALSE;
    V_An: BOOL := FALSE;
    V_LED: BOOL := FALSE;
    V_switch : BOOL := FALSE;

END_VAR


Das Skalierungsprgrogamm habe ich im ersten Post übermittelt.
Hierbei handelt es sich um eine Füllstandsregelstrecke, wo man 2 Behälter mit Störgliedern (Ventile) unten angebracht hat. Man hat ebenso einen Durchflussmesser (welcher noch nicht verkabelt ist, deswegen wurde er erstmal noch außenvor gelassen), ein Hauptventil, welches man öffnen muss damit entweder Behälter 1 oder 2 gefüllt wird und einen Frequenzumrichter welcher eine Pumpe ansteuert. Die Füllstandssensoren der Behälter werden umskaliert von 0-100% und in einer Visualisierung angezeigt. Weiters gibts eben eine Visualisierung wo man die PID Regler Parameter einstellen kann und den factual Wert, also den gewünschten Füllstand in % angibt. Das Ziel ist dann eben, das man z.B. einstellt 50% Füllstand und die Pumpe dann mit einem Frequenzumrichter und einem PID Regler auf diesen Wert regelt.

Ich bin das ganze so angegangen, das ich mal die Sensoren skaliert habe. Danach wollte ich eben den FU umskalieren auf 0-100% und diesen Wert dann dem Regler als Ausgangswert geben. Aber die Frequenzumrichter Skalierung geht nicht und der Regler regelt ebenso nicht.

War das verständlich??? Wenn nicht bitte nachfragen dann versuche ich es auszuführen. Und wenn noch was benötigt wird bitte ebenso melden!! Danke!

Add: anbei sind noch paar Bilder, leider habe ich keines von der ganzen Anlage
 

Anhänge

  • 20250918_074756210_iOS.jpg
    20250918_074756210_iOS.jpg
    2 MB · Aufrufe: 11
  • 20250918_101205511_iOS.jpg
    20250918_101205511_iOS.jpg
    1,9 MB · Aufrufe: 11
  • 20250918_100820747_iOS.jpg
    20250918_100820747_iOS.jpg
    1,8 MB · Aufrufe: 11
Zuletzt bearbeitet:
Screenshot 2026-02-14 150754.png

@Maximilian1
Du bekommst hier qualifizierte Antworten z.B. von @oliver.tonn . Im Gegenzug darf man schon erwarten, dass Du Deine Fragestellung und weitere Posts einfach lesbar strukturierst. Einen Rücksprung pro Codeschnipsel zu verschiedenen Posts halte ich für unnötig. Einmal das ganze gepostet, eingehüllt in Code-Tags erleichtert das Leben für die ehrenamtlichen Helfer ungemein.
Bedenke: das ist für die meisten hier Freizeitvergnügen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Grenzwerte für den FU sind immer noch falsch, wenn der skalierte Wert als Digit an die Klemme gehen soll.
Du nutzt immer noch die selbe Aufteilung der Grenzwerte wie bei den Sensoren
Soweit der skalierte Wert beim FU den FU steuern soll, sprich ihm den Sollwert vorgeben soll müssen die Grenzwerte vertauscht werden.
Wie bereits erwähnt läuft es hier andersherum als beim Sensor. X ist der Wert der skaliert werden soll, bei den Sensoren ist das der Wert des Digits der bei der Beckhofklemme von 0 - 32767 geht und Y die physikalische Größe, im Fall der Sensoren 0 - 100%. Der Rückgabewert Deiner Funktion liefert dann die physikalische Größe.
Beim FU möchtest Du aber eine physikalische Größe in Digits skalieren. Also z.B. eine Drehzahl in Digits. Da müssen bei X nun nicht die Werte für die Digits angegeben werden, sondern der physikalischen Größe, z.B. 0RPM - 6000RPM und bei Y dann die Digits, z.B. 0 - 32767, dann kommt was sinnvolles raus.
 
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.
 
Zuletzt bearbeitet:
Anhang anzeigen 94301

@Maximilian1
Du bekommst hier qualifizierte Antworten z.B. von @oliver.tonn . Im Gegenzug darf man schon erwarten, dass Du Deine Fragestellung und weitere Posts einfach lesbar strukturierst. Einen Rücksprung pro Codeschnipsel zu verschiedenen Posts halte ich für unnötig. Einmal das ganze gepostet, eingehüllt in Code-Tags erleichtert das Leben für die ehrenamtlichen Helfer ungemein.
Bedenke: das ist für die meisten hier Freizeitvergnügen.
Da ich das erste mal hier poste wusste ich gar nicht das es so geht bzw übersichtlicher ist. Soll ich nochmal alles posten?
 
Zurück
Oben