TIA Wie kann man eine Variable deklarieren, die zwischen 0-10V liegt?

Zuviel Werbung?
-> Hier kostenlos registrieren
Ein wenig irritiert mich allenfalls die identische Reihenfolge von "erst normieren ... und dann skalieren" bei der Vor- und Nachbereitung.
Ich muss wohl doch noch etwas mehr gegen meine BildungsLücke tun ... ;)

TIA:
Die Normierung NORM_X wandelt einen Wert von einem frei definierbaren Bereich zum normierten Bereich von 0.00 - 1.00 (0 - 100%).
Die Skalierung SCALE_X wandelt einen normierten Wert zu einen frei definierbaren Bereich.

S7-Classic (@Mok_1988: und wenn vorhanden bei TIA "Legacy"):
SCALE und UNSCALE "überspringen" den Zwischenschritt der Normierung und wandeln direkt zwischen den beiden Bereichen.


Bei SCALE ist der Eingangs- und bei UNSCALE der Ausgangsbereich bereits auf die Bereiche der Analogkarten voreingestellt.
Das muss man bei TIA selbst erledigen. Je nach Wandlungsrichtung ob von oder zur Analogkarte halt entweder am Eingang NORM_X oder am Ausgang SCALE_X. Dementsprechend findet man die Bereiche der "realen" Werte am jeweils am anderen Baustein.
Es wechseln also die Wertebereiche je nach Richtung zw. den Bausteinen, nicht die Reihenfolge der Bausteine selbst.

Dafür sind NORM_X und SCALE_X etwas freier nutzbar, da man zwischen beliebigen Bereichen und nicht nur von/zu den Bereichen der Analogkarten wandeln kann.
Z.B. zw. °C und °F, wenn man lieber mit 2 bekannten Punkten statt 'ner Formel hantieren möchte:

1658143573146.png



Ob man das Freiere gegenüber dem klarer Definierten braucht/bevorzugt, ist dann wohl 'ne andere Frage.
🤷‍♂️
 
Zuletzt bearbeitet:
Zusätzlich gibt es in TIA doch die "Legacy" Bausteine Scale und Unscale. Die skalieren die Werte auch direkt auf eine Analogbaugruppe wie in Classic
 
Moin Mario,
ich sehe da bei beiden Bausteinen ("Norm_X" und "Scale_X") "Real to Real". Kann man hier wahlweise auch z.B. "Int to Real" oder "Real to Int" anwählen? Oder sind diese Bausteine auf "Real to Real" festgenagelt und man muss "extern" noch die ggfs nötigen DatenTypKonvertierungen vornehmen?
NORM_X:
INT, DINT, SINT, USINT, UINT, UDINT, REAL, LREAL
TO
REAL, LREAL

bzw. umgekehrt bei SCALE_X.
Zu erkennen an den Auswahlkästchen vor und hinter dem "to" der Bausteine.
 
Aber bei SCL kann ich mir diese Auswahlkästchen nicht wirklich vorstellen. ;)
Bei SCL ist das selbsteinstellend je nach Typ der Ein- bzw. Ausgangsvariablen.
Normalerweise wird da keine explizite Wandlung benötigt.

PS:
Die FUP/KOP-Bausteine stellen sich auch automatisch nach der Auswahl der Variablen ein, wenn man vorher noch nix explizit ausgewählt hat.
 
Die Auswahlkästchen kann ich nicht wirklich erkennen,
Beim Bearbeiten sind dann da noch gelbe Ecken dran, dann erkennt man's etwas besser.

Aber wie gesagt, auch die sind selbsteinstellend nach Typ der Ein-/Ausgangsvariablen.
Bei nicht unterstützen Typen bekommt man halt 'ne Fehlermeldung.

Und wenn man 'ne Vorauswahl getroffen hat, wird's IMHO nicht mehr automatisch angepasst sondern die Variable muss dann passen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
#x_loc := SCALE_X(MIN:= 0, VALUE:=NORM_X(MIN := 0, VALUE := #X, MAX := 27648), MAX:=10); // Eingangsgröße der Karte (0-27648) erst normieren(0..1) und dann skalieren(0..10) #y_loc := 2.5 + 0.075 * #x_loc * #x_loc; // Formel, was auch immer #Y := SCALE_X(MIN := 0, VALUE := NORM_X(MIN := 0, VALUE := #y_loc, MAX := 10), MAX := 27648); // Ergebnis (2.5..10) erst normieren (0.25..1) und dann skalieren (xxx..26748)
Hi, ich bin es wieder nach ein paar Tagen 😅 Als du X der Variable x_loc zugewiesen hast, hast du von 0-27648 normiert und dann von 0-10V skaliert. Bei Y hast du das genau umgekehrt gemacht, also von 0-10V normiert und von 0-27648 skaliert. Kannst du mir vielleicht den Zusammenhang erklären? Habe bei diesem Thema so meine Schwierigkeiten leider.
 
Hi, ich bin es wieder nach ein paar Tagen 😅 Als du X der Variable x_loc zugewiesen hast, hast du von 0-27648 normiert und dann von 0-10V skaliert. Bei Y hast du das genau umgekehrt gemacht, also von 0-10V normiert und von 0-27648 skaliert. Kannst du mir vielleicht den Zusammenhang erklären? Habe bei diesem Thema so meine Schwierigkeiten leider.
Na ja, ist doch eigentlich ganz einfach. Der analoge Eingang liefert einen Wert von 0 bis 27648. Nach der Normierung entspricht die 0 der 0,0 und die 27648 der 1,0 und alle anderen Werte liegen dazwischen. Daraus errechnet der Skalierungsbaustein jetzt eine Spannung von 0 bis 10V. 0,0 entspricht 0,0V und 1,0 eben 10,0V. Wenn Du jetzt eine Spannung wieder ausgeben möchtest musst Du in die andere Rechnung rechnen. Erst die auszugebenden 0 bis 10V normieren, dass 0 bis 1,0 herauskommt und das dann auf 27648 skalieren, damit Du den Integerwert für die Ausgangskarte erhälst.
 
@oliver.tonn Das heißt der Skalierungsbaustein berechnet nach der Normierung eine Spannung von 0-10V, um diese x_loc zuzuweisen? Hat diese Spannung von 0-10V, die der Varibale x_log zugewiesen wird, auch direkt was mit dem analogen Eingang 0-27648 zu tun? Weil aus anderen Beispielen kenne ich das so, dass 0-27648 normiert wird und diese für eine physikalische Größe skaliert wird, z.B. Drehzahl. Nun wird in diesem Beispiel scheinbar für die Spannung 0-10V skaliert, was ich etwas verwirrend finde.

Ich habe beispielsweise diese Aufgabe, die folgendermaßen gelöst wurde. Ich denke mal die 100-1000 hier sind analog zu den 0-10V für x_loc in der anderen Aufgabe oder? Und der Analogwert zwischen 0-10V hier wäre unser X in der anderen Aufgabe? Vielleicht verstehe ich das durch den Vergleich etwas besser.

1658246858295.png
1658246899126.png
 
Norm_x wandelt den Wert des Analogeingangs 0_10 V (0-27648) in eine Realzahl zwischen 0.00 und 1.00. Scale_x wandelt diesen Wert in eine frei skalierbare Zahl (real, int dint ...) um. Mit Deiner Skalierung entspricht 0,0V der realzahl 100.00 und 10V 1000.00.
 
Zuletzt bearbeitet:
@dekuika Das heißt in der ursprünglichen Aufgabe entspricht 0V der Realzahl 0V und 10V der Realzahl 10V? Weil da haben wir statt den 100.00 und 1000.00 nochmal die Spannung 0V und 10V.
 
Zurück
Oben