Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: Ableitung eines zeitlich veränderlichen Wertes bilden

  1. #11
    Avatar von Draco Malfoy
    Draco Malfoy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.10.2012
    Beiträge
    752
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das Minimum liegt in dem gegebenen Fall jeweils rechts und links von der Mitte, am Rande des Graphen. Aber der Graph wiederholt sich periodisch, das ist keine "von...bis..." Kurve, sondern ein Phasengain und es geht jeweils in beide Richtungen weiter. Und - deine Vorgehensweise spiegelt die Aufgabestellung leider nicht wieder. Ich brauche tatsächlich ein d/dx Differenzial, um festzustellen, ob die Werte wachsen, oder sinken. Wenn die Werte nämlich wachsen, dann fährt mein Motor ja ganz offensichtlich in die falsche Richtung. Die Kurvenlänge ist endlich, und es gibt nur ein Minmum auf der Fahrbahn. Dieses, gilt es, zu finden.

  2. #12
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Diese Differential würde sich ja dadurch bilden, dass du das Array (mit den abgespeicherten Werten) durchläufst.
    Was du da vorhast ist ja eher ein "den aktuellen Wert mit dem letzten Wert vergleichen und darüber den Gradienten bilden". Das würde ich so nicht machen da du keine idealen Werte einlesen wirst sondern eher etwas "zitteriges" - das heißt, dass du selbst bei einer kontinuierlichen Messung immer "einige" Werte rückwärts brauchst.

    Ich muß aber auch zugeben, dass ich dein Vorhaben und dessen Sinn immer noch nicht verstanden habe. Vielleicht könnte ich dann bessere Tipps geben ...

    Gruß
    Larry

  3. #13
    Avatar von Draco Malfoy
    Draco Malfoy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.10.2012
    Beiträge
    752
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard

    Ok, es ist zum einen an und für sich schon nicht trivial, und, ich muss leider zugeben, meine Erklärungskünste waren noch nie sonderlich auf der Höhe. Könnte an einer zu sehr physikalischen und weniger elektrotechnischen Denke liegen.
    Bitte um Entschuldigung, hier ein zweiter Versuch:

    - Es gibt ein physikalisches Phänomen, was man am Besten mit einer Art Resonanz oder richtiger Abstimmung eines Schwingkreises beschreiben kann. Ist, wie gesagt, nur eine Übertragung bzw. Näherung.
    - Dieses Phänomen gibt als erfassbare, messbare physikalische Größe eine Phasendifferenz zweier Signale zurück, welche von einem elektronischen Detektor erfasst werden kann.
    - Dieser Detektor wandelt die Phasendifferenz in einen analogen Wert um, der im Bereich 10mV - 1,8V liegt, und dessen Abhängigkeit von dem Delta Phi durch den obigen Graph dargestellt werden kann.

    Nun, gibt es jetzt noch einen Schrittmotor, der die Stellgröße indirekt beeinflussen kann, in dem er einen Rotor dreht. Der Motor kann dabei die Position von 0° bis (20 Windungen x 360°) bis 7200° annehmen. Weiter darf er nicht fahren, am Anfang und Ende sitzen jeweils Endschalter. Die angenommene Phasendifferenz an einer x-beliebigen Stelle auf der Fahrbahn bewegt sich in einem Range von etwa +90° bis +270°, also immer so, daß dazwischen genau ein Minimum der Phasenfunktion eingeschlossen ist. Die Phasenfunktion hat genau dann ein Mnimum, wenn die Delta Phi =180° ist, also bei exact gegenläufiger Phasenlage.

    So, jetzt muss meine SPS beim Drücken auf einen Knopf, den man vielleicht "Autotune" bezeichnen kann, automatisch, ohne fremde Hilfe, dieses Minimum finden. Wie würdest Du an diese Aufgabe herangehen ? Ich habe mir gedacht, ein d/dx von den jeweils letzten 30 Werten zu bilden, und gucken, ob da "+" oder "-" rauskommt, um festzustellen, in welche Richtung der Motor nun fahren soll.

    Danke im Voraus

    Gruß
    Geändert von Draco Malfoy (10.11.2012 um 19:13 Uhr)

  4. #14
    Registriert seit
    06.10.2003
    Beiträge
    3.445
    Danke
    453
    Erhielt 509 Danke für 411 Beiträge

    Standard

    Zur Hardware, sieh dir mal folgende Baugruppen an:

    https://eb.automation.siemens.com/ma...151-8AB01-0AB0
    https://eb.automation.siemens.com/ma...134-4FB52-0AB0

    Ableitungen zeitdiskret zu bilden, ist eigentlich überhaupt kein Problem. Wichtig ist nur, besonders für die zweite Ableitung, die Bearbeitung im Weckalarm (S7 -OB35 etc) durch zu führen. Alles Real-Werte. Das Kürzel "AKT" steht für AKTUELL. Die Abtastzeit ist im einfachsten Fall der Aufrufintervall des OB.

    Code:
    //*** Differenz zum vorherigen Wert bilden
    E_AKT := W_AKT - W_ALT;
    W_ALT := W_AKT;
    
    //*** erste Ableitung
    D1_AKT := E / ABTASTZEIT;
    
    //*** zweite Ableitung
    D2_AKT := (D1_ALT - D1_AKT) / ABTASTZEIT;
    D1_ALT := D1_AKT;
    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  5. #15
    Avatar von Draco Malfoy
    Draco Malfoy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.10.2012
    Beiträge
    752
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard

    Sorry, aber könntest Du die Vorgehensweise noch etwas genauer erläutern ?
    Ich muss ja aus den ausgelesenen Werten mehr oder weniger einen Vektor bilden, richtig ? oder zumindest eine Wertetabelle erstellen. Das sehe ich aber in deinem Code nicht. Wie genau passiert das in S7 ?

    Und weiterhin möchte ich verhindern, daß meine Werte anfällig für zittern sind, also muss ich darauf mehr oder weniger einen Tiefpass anwenden. Die mathematische Grundlage dafür ist mir mehr oder weniger bekannt, aus der Abtasttheorie und der Lehre über diskrete LTI-Systheme und FIR-Filter. Aber diese Filter haben anspruchsvolle mathematische Implementierung, die immer auf Vektoren/Wertereihen angewendet wird. Wie kann ich also auf Wertetabellen in S7 mathematische Operation anwenden, zum Beispiel solche wie nachfolgend beschrieben: http://de.wikipedia.org/wiki/Filter_..._Impulsantwort ??

    Ist es überhaupt möglich, in S7 komplexere mathematische Funktionen einzubauen ?
    Geändert von Draco Malfoy (10.11.2012 um 23:44 Uhr)

  6. #16
    Registriert seit
    29.03.2004
    Beiträge
    5.792
    Danke
    144
    Erhielt 1.706 Danke für 1.238 Beiträge

    Standard

    Wenn ich deine Grafik aus Post #9 sehe, würde ich vermuten dass so was wie einen Extremwertregler benötigst.
    Wenn du nur einmal tunen musst, kannst du am einfachsten (wenn der Prozess es ermöglicht) den kompletten Stellbereich durchfahren und die passende Stellgröße zum Extremwert suchen. Das funktioniert dann auch falls es mal mehr als nur ein lokales Extremum gibt.
    Soll auch im laufenden Betrieb möglichst auf dem Extremwert gefahren werden, so gibt es dazu mehrere Strategien. Für die Solartechnik gibt es das sog. maximum power point tracking:
    http://en.wikipedia.org/wiki/Maximum...point_tracking

    Ich habe sowas noch nicht programmiert, aber ich habe meine Überlegungen wie ich das machen würde mal aufskizziert.
    Die aktuelle Stellgröße y wird dazu immer um einen Wert delta-y erhöht und verringert. Die Änderung des Istwertes wird dann mit der Änderung der Stellgröße korreliert, hier einfach vorzeichenbehaftet multipliziert.
    Wenn man aus diesem Wert über die Zeit das Integral bildet, ergibt sich wenn man sich auf dem Extremwert befindet der Wert 0 (optimal), wenn man sich auf der linken Seite befinden ein positiver und auf der rechten Seite ein negativer Wert.
    Die Basisstellgröße y erhöht man nach einem Durchlauf um diesen Summenwert mal einen beliebigen Verstärkungsfaktor, und ergibt die neue Basisstellgröße für den nächsten Durchlauf. Dadurch 'fährt' man mit der Stellgröße sozusagen immer berghoch.
    Man findet damit natürlich immer nur ein lokales Extremum. Vom Prinzip her müsste das zumindest so funktionieren.
    sk-ex-1.JPG

  7. #17
    Registriert seit
    06.10.2003
    Beiträge
    3.445
    Danke
    453
    Erhielt 509 Danke für 411 Beiträge

    Standard

    Zitat Zitat von Draco Malfoy Beitrag anzeigen
    Sorry, aber könntest Du die Vorgehensweise noch etwas genauer erläutern ?..
    Nun ja, du wolltest ja zunächst ermitteln, wie sich dein Wert über der Zeit ändert. Die erste Ableitung liefert dir die Geschwindigkeit und die Richtung der Änderung, die zweite Ableitung liefert dir die Änderung der Geschwindigkeit, bzw. die Beschleunigung.
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  8. #18
    Avatar von Draco Malfoy
    Draco Malfoy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.10.2012
    Beiträge
    752
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard

    Hallo Thomas,
    danke für die vorgeschlagene Vorgehensweise !
    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Wenn ich deine Grafik aus Post #9 sehe, würde ich vermuten dass so was wie einen Extremwertregler benötigst.
    Letztenendes, genau das.
    Wenn du nur einmal tunen musst
    Nein, es muss auch im laufenden Betrieb nachgefahren werden. Bzw., ein Komplettdurchlauf ist nicht wünschenswert.
    Ich habe sowas noch nicht programmiert, aber ich habe meine Überlegungen wie ich das machen würde mal aufskizziert.
    Die aktuelle Stellgröße y wird dazu immer um einen Wert delta-y erhöht und verringert. Die Änderung des Istwertes wird dann mit der Änderung der Stellgröße korreliert, hier einfach vorzeichenbehaftet multipliziert.
    Wenn man aus diesem Wert über die Zeit das Integral bildet, ergibt sich wenn man sich auf dem Extremwert befindet der Wert 0 (optimal), wenn man sich auf der linken Seite befinden ein positiver und auf der rechten Seite ein negativer Wert.
    Wenn ich Dich richtig verstehe: Du schlägst vor, den Vektor mit den Ableitungen der Istwerte zeilenweise mit dem dS (Änderung der Wegstrecke) und mit dem dt (Fahrzeit für dieses Wegstück) zu multiplizieren, und die Ergebnisse dann in einen Ergebniswertvektor zu schreiben ?? Kling nicht schlecht, ich würde bloß auf die Werte vorher einen gleitenden Mittelwert (Filter) sagen wir mal, über 3 anweden, um das "Zittern" loszuwerden. Können wir als Vorgehensweise festhalten.
    Die Basisstellgröße y erhöht man nach einem Durchlauf um diesen Summenwert mal einen beliebigen Verstärkungsfaktor, und ergibt die neue Basisstellgröße für den nächsten Durchlauf. Dadurch 'fährt' man mit der Stellgröße sozusagen immer berghoch.
    D.h., du schlägst vor, die Stellgröße variabel zu machen, um schneller zum Ziel zu gelangen ? Das klingt ja richtig gut. Versteh am frühen morgen noch nicht ganz, wie ich das auf meinen "Ergebnisvektor" praktisch anwenden kann. Dann müsste ich die aktuelle Stellgröße y mit dem ΔۤI, Δۤt, ΔۤS und dem Verstärkungsfaktor δ multiplizieren und an den Motor weitergeben ? Und am Ende komme ich ganz automatisch dahin, wo mein Extremum liegt ? Weil die Stellgröße dadurch automatisch wachsen oder sinken würde, je nachdem, ob ich mich dem extremum nähere, oder entferne, und ihr Vorzeichen wechseln. Es ergäbe dann quasi eine intergrative Annäherung an die Minimumslage. Wenn das funktioniert, wäre das eine richtig gute Idee Jetzt müsste mir nur noch jemand beim Implementieren ein Wenig helfen...

    P.S: Globale Extrema befinden sich wenn - dann nur am Rande, und müssen sicher ausgeschlossen werden. D.h. wenn der Motor durch den Regelvorgang einen Endschalter anfährt, wird einfach ein Fehler zurückgemeldet und das System zum Reset aufgefordert.

    P.P.S: D.h., die Formel für die Berechnung des neuen Wertes für y müsste lauten: ΔۤI/dt * y (alt) * δ * Δۤt = y(neu) - richtig oder nicht ?
    Geändert von Draco Malfoy (11.11.2012 um 12:34 Uhr)

  9. #19
    Avatar von Draco Malfoy
    Draco Malfoy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.10.2012
    Beiträge
    752
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard

    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    Nun ja, du wolltest ja zunächst ermitteln, wie sich dein Wert über der Zeit ändert. Die erste Ableitung liefert ....
    Nein nein, ich wollte wissen, wie man einen Vektor sagen wir mal, mit n-Einträgen aufsetzt und diese Operationen in einer Schleife auf den Vektor anwendet. Im SPS-Code. Oder, von mir aus, auch ohne Schleifen, aber zumindest bei der (für meine SPS zuständigen) VisiLogic Software http://www.unitronics.com/Content.aspx?page=Downloads tue ich mich noch schwer damit, die Vektoren mathematisch zu verarbeiten.
    Geändert von Draco Malfoy (11.11.2012 um 11:05 Uhr)

  10. #20
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich muß sagen, dass sich die aktuelle Entwicklung "etwas" von meiner gedachten Vorgehensweise unterscheidet. Ich würde tatsächlich den ganzen Kurvenverlauf erst einlesen und ihn dann auswerten. Auf diesem Weg läßt sich auf jeden Fall sicher stellen, dass du den richtigen Punkt (aber leider erst im Nachhinein) findest.

    Ob und wie weit es auch quasi "on the fly" geht wage ich nicht beurteilen zu wollen. Da du auf jeden Fall deine eingelesenen Werte glätten mußt (zumindestens nach meiner Erfahrung mit so etwas) denke ich, dass du die gewünschte Stelle auf jeden Fall "ein wenig" überfahren mußt um beurteilen zu können, ob du sie gefunden hast. Ob du mit einer Rückwärts-Speicherung von 30 Werten hinreichst mußt du ausprobieren - ich würde mich da aber zumindestens am Anfang nicht einschränken (also lieber etwas mehr und ggf. dann später reduzieren). Als Abtastung würde ich auch ein festes Zeit-Intervall nehmen - und wenn du dann gleich auch mit Auswerten willst und gleichzeitig schnell abtasten möchtest dann sind wir auch schon wieder bei einer leistungsfähigen CPU ...

    Gruß
    Larry

Ähnliche Themen

  1. In Abhängigkeit eines Wertes Datenwort benutzen
    Von Programmierknecht im Forum Programmierstrategien
    Antworten: 4
    Letzter Beitrag: 02.10.2012, 19:17
  2. Integer Wertänderung zeitlich erfassen
    Von klauserl im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 10.09.2012, 22:57
  3. Momentanes speichern eines verändernden wertes
    Von dr.hareg im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 14.02.2009, 09:58
  4. Betrag eines Wertes errechnen
    Von Flo im Forum Programmierstrategien
    Antworten: 6
    Letzter Beitrag: 17.09.2006, 15:57
  5. Antworten: 2
    Letzter Beitrag: 21.06.2006, 11:59

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •