Autor Thema: Skalierung nicht liniear  (Gelesen 12038 mal)

Offline HKW

  • Jr. Member
  • **
  • Beiträge: 91
  • I love easy-Forum.net
Skalierung nicht liniear
« am: August 19, 2008, 10:30:46 Vormittag »
Hallo,

habe ein kleines Problem mit Baustein LS Werteskalierung für Easy 820.

Die benötigten Sollwerte sind jedoch nicht linear. (siehe Tabelle)
   0 - 0
 10 - 3
 20 - 7
 30 - 13
 40 - 20
 50 - 27
 60 - 32
 70 - 36
 80 - 38
 90 - 40
100 - 41

Gibt es eine Möglichkeit, eine solche Kurve einzugeben?

Gruß
Bruno


Offline veltins54

  • easy god
  • *****
  • Beiträge: 1199
Re: Skalierung nicht liniear
« Antwort #1 am: August 19, 2008, 11:11:28 Vormittag »
Hallo HKW,

schau mal ob das was nutzt.



Gruß veltins54
Für die Richtigkeit der Beispiele wird keine Gewähr übernommen.
Für Schäden, die durch Verwendung der Beispiele entstehen, wird keine Haftung übernommen.

Offline Mr. Spok

  • Sr. Member
  • ****
  • Beiträge: 652
Re: Skalierung nicht liniear
« Antwort #2 am: August 19, 2008, 12:20:16 Nachmittag »
Hallo Bruno,

hier: http://easy-forum.net/index.php?topic=1325.0

ein Beispiel von Paul zur nichtlinearen Skalierung. Müsste eventuell noch erweitert werden.

mfG Jan
Für die Richtigkeit und Funktionalität der hier veröffentlichten Beispiele wird keine Gewähr übernommen.
Für Schäden, die durch Verwendung der Beispiele entstehen, wird keine Haftung übernommen.

Offline HKW

  • Jr. Member
  • **
  • Beiträge: 91
  • I love easy-Forum.net
Re: Skalierung nicht liniear
« Antwort #3 am: August 20, 2008, 15:47:30 Nachmittag »
Hallo,
besten Dank für eure Vorschläge, die ich inzwischen getestet habe.

Leider ist die "Veltins-Kurve" zu grob u. macht mit 10 Fix-Punkten zu große Sprünge.
Die Kurve gleicht eher eine Treppe.
Wenn es möglich wäre, die Kurve auf 41 Ausgangswerte auszuweiten, wäre mein Problem gelöst.

Leider passt auch die "nicht lineare Skalierung" von Paul nicht.
Hier ist allerdings gut, dass die Vorlauftemp. in kleinen Schritten von 20 ..48C (nicht linear) verändert wird.
Evt. müßte man diese Anwendung verändern, was für mich Anfänger leider zu schwierig ist.
Einganswert: Wert 0....100 (linear) umskalieren auf Ausgang: 0..41 (nicht linear nach meiner Tabelle) als MW.

Gruß
Bruno
 

Offline veltins54

  • easy god
  • *****
  • Beiträge: 1199
Re: Skalierung nicht liniear
« Antwort #4 am: August 20, 2008, 17:05:27 Nachmittag »
Hallo HKW,

ja das mein Beispiel zu grob ist mir klar,es sollte auch nur eine möglichkeit sein es zu machen,
mann kann es ja auch erweitern auf 41 Werte.

Gruß veltins54
Für die Richtigkeit der Beispiele wird keine Gewähr übernommen.
Für Schäden, die durch Verwendung der Beispiele entstehen, wird keine Haftung übernommen.

Offline opajan

  • Full Member
  • ***
  • Beiträge: 163
Re: Skalierung nicht liniear
« Antwort #5 am: August 20, 2008, 18:06:10 Nachmittag »
Hallo Bruno,
für solche Dinge nehme ich immer Excel zur Hand, trag die Werte in eine Tabelle ein und lass mir dir Kurve mit der Gleichung anzeigen. Dann kannst du deinen skalierten Wert (0-100) nehmen und einfach die Funktion in der Easy rechnen lassen.....hab jetzt im Beispiel mal ein 3. Polynom gewählt, u.U. reicht das schon für deine Anwendung.......

mfg
Jan
Ein Prototyp ist erst dann richtig getestet, wenn er am Ende der Tests zerstört ist......
Keine Garantie für den Senf den ich hier verzapfe......

Offline opajan

  • Full Member
  • ***
  • Beiträge: 163
Re: Skalierung nicht liniear
« Antwort #6 am: August 21, 2008, 21:04:25 Nachmittag »
Hallo zusammen,

ich bin mal wieder selbst drauf reingefallen....das mit excel funktioniert nur bis x², nicht bei polynomen höherer ordnung!......--> dafür gibt es das tolle proggi gnuplot (ist aber kompliziert!

hier ein beispiel mit excel:
die werte
IST-SOLL
 0 - 0
 10 - 3
 20 - 7
 30 - 13
 40 - 20
 50 - 27
 60 - 32
 70 - 36
 80 - 38
 90 - 40
100 - 41

werden in eine exceltabelle eingetragen, dann wird daraus ein diagramm erstellt, mit den IST-werten als x-achse, mit den SOLL-werten als y-achse. Jetzt der Clou: es wird eine Trendlinie eingefügt, für die man den grad des polynoms angeben kann....(wie schon gesagt bis x² ist ok ansonsten gnuplot).
dann kann man da irgendwo noch nen haken setzten mit "formel im diagramm anzeigen" und schon hat man die Funktion y=f(x)...es ergeben sich also für die für x eingesetzten werte (ist) die y-werte (soll).

Zum rechnen mit der easy:
also...kommazahlen..ganz böse :-(  ...(normalerweise mach ich das auch nur unter codesys...)

aber es geht! (meistens jedenfalls)

man muss nur die kommastellen geschickt wegmultiplizieren und hinterher das jeweilige ergebnis wieder entsprechend wegdividieren......

so kann man dann z.b. 0,172 mit 1000 multiplizieren und hat dann eine ganzzahl
das problem ist dann wieder beim potenzieren......da kann man u.U. probleme mit der Zahlengrösse bekommen z.B. bei X= 0,172*100=172 das muss man dann z.B. bei x³ 3 mal in den arithmetikbaustein schicken:
AR1 MUL:
I1:172
I2:172
=MD20 = 29584

bleibt noch 1 x übrig also:
AR2 MUL:
I1:MD20 (29584)
I2:172
=MD21=5088448 !!!
!!! und jetzt nicht denken das ergebnis einfach durch 1000 teilen!!! um wieder das richtige ergebnis zu bekommen muss man durch 1000³ teilen! bzw. man muss schauen was rauskommt und wieder das optimum wählen und in den weiteren rechenoperationen berücksichtigen.......

ach ja: DA GEHEN EINE MENGE AR-BAUSTEINE DRAUF !!

usw.
(--->ich schreib mir immer die gleichung auf und zerlege sie in teilrechnungen und notiere mir das entsprechende MD hinzu.....dann kommt man beim programmieren nicht durcheinander

--> und das wichtigste : vor dem programmieren mal eine vergleichsrechnung der formel mit dem taschenrechner machen, das geht allemal schneller als alles zu programmmieren und dann festzustellen: oha hab wohl doch die falsche formel!!
« Letzte Änderung: August 21, 2008, 21:09:06 Nachmittag von opajan »
Ein Prototyp ist erst dann richtig getestet, wenn er am Ende der Tests zerstört ist......
Keine Garantie für den Senf den ich hier verzapfe......

Offline HKW

  • Jr. Member
  • **
  • Beiträge: 91
  • I love easy-Forum.net
Re: Skalierung nicht liniear
« Antwort #7 am: August 21, 2008, 21:34:31 Nachmittag »
Hallo opajan,
Du bist ja ganz toll aktiv in meine Sache eingestiegen.
Bin gerade daran in einen TB-Baustein deine  Formel einzugeben.
Sehe leider nicht, wo ich eine Excel-Tabelle in den Baustein eingeben könnte.

Im Grunde benötige ich einen nicht linearen Ausgangswert  0..41 in Abhänigkeit von einem lineren Eingangswert 0..100. Mit Excell läßt sich das zwar sehr gut darstellen. Wie bringe ich das der Easy 800 bei?  Hast Du eine konkrete Lösung?

Gruß aus dem schönen Allgäu
Bruno


Offline opajan

  • Full Member
  • ***
  • Beiträge: 163
Re: Skalierung nicht liniear
« Antwort #8 am: August 22, 2008, 19:12:16 Nachmittag »
Hallo Bruno,

also mit der TB-Funktion hat das nichts zu tun, sorry, wenn ich dich da auf eine falsche fährte geleitet hab.....

die Tabelle gibts nur unter excel, aber die formel y=f(x), die wird nachher in der easy berechnet, es ergibt sich dann für jedes x (deine eingangswerte 0....100 ein entsprechnder y-wert 0...41).

ich bin grad etwas knapp mit meiner zeit, aber ich versuche am wochenende dir die richtigen werte mit dem gnuplot zu generieren und in ein program einzubauen....habs schon lange nicht mehr benutzt, muss mich erst mal wieder einlesen......

hier zum verständnis mal ne einfache formel als beispiel:
ist-soll
0-0
1-2
2-8
3-18
4-32
5-50
6-72
7-98
8-128
9-162
10-200

die entsprechende formel wäre dann--> y(x)=2x²:

das x entspricht deinen Sollwerten, wenn du nun z.b. einen istwert von 6 hast: y(soll)=2*6²
das errechnet sich in der easy dann als 2*6*6 = 72

in der easy ist mein Istwert (x) z.b. als MD10 abgelegt, kann z.b. aber auch ein analogeingang sein....

bsp von oben+berechnung:

AR1:MUL (berechnung von x²)
I1=MD10  (6)
I2=MD10  (6)
=MD11     (36)
also 6*6=36 in MD11 schreiben, dann

AR2:MUL (berechnung 2*x²)
I1=MD11  (36)
I2=2
=MD12     (72)

-->für jeden wert von x (hier 0-10 bzw. MD10) bekommst du den entsprechenden y-wert

so, muss aber schon wieder weiter, werd mich morgen früh mal ans gnuplot machen :-)
mfg
Jan
Ein Prototyp ist erst dann richtig getestet, wenn er am Ende der Tests zerstört ist......
Keine Garantie für den Senf den ich hier verzapfe......

Offline opajan

  • Full Member
  • ***
  • Beiträge: 163
Re: Skalierung nicht liniear
« Antwort #9 am: August 23, 2008, 13:14:29 Nachmittag »
hallo zusammen, hab euch mal ein demoprog angefügt, wer fragen hat einfach melden......
ach ja, hab alles nur mit x² gemacht....man schreibt sich nen wolf, je höhergradig das polynom ist.

mfg
Jan

edit: ach ja Eingang Iswert ist MD10, das Ergebnis seht ihr im MD16, klappt in der Simulation einwandfrei.....
edit: zum besseren verständnis kann man sich an meinem "freßzettel" dcfxxx.jpg orientieren.....
« Letzte Änderung: August 23, 2008, 18:35:02 Nachmittag von opajan »
Ein Prototyp ist erst dann richtig getestet, wenn er am Ende der Tests zerstört ist......
Keine Garantie für den Senf den ich hier verzapfe......

Offline opajan

  • Full Member
  • ***
  • Beiträge: 163
Re: Skalierung nicht liniear
« Antwort #10 am: August 23, 2008, 18:17:49 Nachmittag »
@heho,

jep, unter codesys ist das alles etwas einfacher *grins*......da kann man dann auch mit real arbeiten und muss sich nicht ständig sorgen machen irgendwelche teilungen vergessen zu haben, ausserdem wird es genauer weil noch mehr kommastellen verarbeitet werden.....

gruß
jan
edit: hab mal testweise ne x^4 Kurve plotten lassen, da sieht man dass alles genauer wird......
« Letzte Änderung: August 23, 2008, 18:40:51 Nachmittag von opajan »
Ein Prototyp ist erst dann richtig getestet, wenn er am Ende der Tests zerstört ist......
Keine Garantie für den Senf den ich hier verzapfe......

Offline HKW

  • Jr. Member
  • **
  • Beiträge: 91
  • I love easy-Forum.net
Re: Skalierung nicht liniear
« Antwort #11 am: August 23, 2008, 21:06:37 Nachmittag »
Hallo opajan,

habe mal Dein Programm vervollständigt, damit man die von Easy berechnete Kurve konkret in den einzelnen Rechnenvorgängen simulieren und testen kann.

IA1 = MD10 skaliert 0...100
MD16 = Ausgang -0..41 (Soll)
Frage: Könnte man die Kurve noch optimieren?

MD10             MD16                Soll   
0                     -3                      0
10                   3,60                  3
20                   9,85                  7
30                   15,62                13
40                   20,00                20
50                   25,73                27
60                   30,07                32
70                   33,94                36
80                   37,33                38
90                   40,24                40
100                 42,68                41

Die -3 am Anfang könnte man mit VC-Baustein evt. unterdrücken.
Gut wäre, wenn im Bereich 20 - 30 sowie 50-70 die Kurve noch steiler wäre.

Aber alles in allem eine sehr gute Lösung u. ich habe wieder dazugelernt.
Mit den sieben AR Bausteinen verbraten wir 308 Byte Arbeitsspeicher was man ja noch akzeptieren könnte.

Gruß
Bruno

Offline opajan

  • Full Member
  • ***
  • Beiträge: 163
Re: Skalierung nicht liniear
« Antwort #12 am: August 23, 2008, 23:32:37 Nachmittag »
hallo bruno,

klar, geht auch genauer (siehe meinen letzten beitrag) mit der Kurve x^4, da sieht das alles richtig gut aus!
aber....da gehen noch einige ar´s drauf und wie gesagt, man schreibt sich echt nen wolf....ich kann dir morgen mal die korrekten werte plotten, dann kannst du es ja mal mit der genaueren kurve versuchen (aber vorher mit dem taschenrechner testen :-) obs wirklich gut passt, sonst machst du dir wirklich nen hauffen arbeit und hast u.u. nicht das gewünschte ergebnis...

gruß
jan

edit: hab die werte ja noch im speicher :-) ....

y=ax^4-bx^3+cx^2-dx+e

« Letzte Änderung: August 23, 2008, 23:46:18 Nachmittag von opajan »
Ein Prototyp ist erst dann richtig getestet, wenn er am Ende der Tests zerstört ist......
Keine Garantie für den Senf den ich hier verzapfe......

Offline HKW

  • Jr. Member
  • **
  • Beiträge: 91
  • I love easy-Forum.net
Re: Skalierung nicht liniear
« Antwort #13 am: August 24, 2008, 09:48:09 Vormittag »
Hallo opajan,

Respekt, Du bist ja spät in der Nacht noch am arbeiten.

Falls Du nochmals Zeit findest und an der Formel "herumbiegst", wäre ich dankbar, wenn Du die Werte auf eine geänderte Tabelle abstimmen könntest.
Mit der Anwendung überwache ich an meinem kleinen Wasserkraftwerk die abgegebene Leistung 0..41 kW mit der Öffnung 0..100 % des Laufrades. Falls die Leistung zu stark absinkt, spüle ich die Turbine intern durch u. somit steigt in der Regel auch die Leistung an, der Zähler läuft dann schneller, d.h. es werden mehr ökologisch erzeugte kWh in das Netz geliefert.

Die neue Tabelle berücksichtigt bereits eine Leistungsminderung von ca. 3-4 kW.
Bei Unterschreitung wird dann der Putzvorgang gestartet.

Öffnung        Sollwert
0                       0
10                     1
20                     4
30                   10
40                   17
50                   24
60                   29
70                   32
80                   34
90                   36
100                 37

 Gruß
Bruno

Offline opajan

  • Full Member
  • ***
  • Beiträge: 163
Re: Skalierung nicht liniear
« Antwort #14 am: August 24, 2008, 10:39:19 Vormittag »
moin bruno,

hab deine neue tabelle mal angepasst, mit x^6 hab ich wirklich gute ergebnisse, bei x^4 muss man im unteren bereich etwas korrgieren......aber sieh selbst im anhang beide varianten.....aber bei beiden aufpassen, es ist möglich, daß das langsam mit der easy unrealisierbar wird....

mfg
jan
Ein Prototyp ist erst dann richtig getestet, wenn er am Ende der Tests zerstört ist......
Keine Garantie für den Senf den ich hier verzapfe......