18.04.2020 12:48 | |
Beigetreten: 05.01.2007 Letzter Bes: 07.04.2023 Beiträge: 1690 Bewertung: (581)
|
Liebe LOGO!-Anwender und -programmierer, in der Vergangenheit habe ich euch verschiedene Konzepte und zugehörige Schaltungsvorschläge unterbreitet um die der LOGO! fehlenden mathematischen Funktionalitäten trotz der gegebenen deutlichen Begrenzungen (wie Wertebereich der Blockparameter und der Blockausgangswerte der Analogblöcke) entsprechende Aufgabenstellungen lösen zu können. Meine Lösungsansätze dazu basieren jeweils auf ausgedehnten Vorbetrachtungen und daraus resultieren die Aufbereitung der Ausgangsdaten und ein Schaltungskonzept sowie Konzepte, diese Schaltungen mit Parametern zu "füttern". Neben der "Berechnung diverser konkreter mathematischer Funktionen (zugänglich z. B. über folgende Links) Komplexes Rechnen mit der LOGO (Teil_2; Teil_3; Teil_4) gehört dazu ein EXCEL-TOOL zur Polynomregression von Datenreihen ( {x; y} und Kurvenverläufen y = f(x)) und ein LOGO!-Schaltungskonzept zur Berechnung von Polynomen 1. bis 4. (und in Ausnahmefällen 5.) Ordnung: EXCEL-Tool zur Polynomregression von Datenpunkten (und Kurvenverläufen) Berechnung von Polynomen f(Ax) aus analogen Eingangswerten Ax Dabei wird die Originalkurve durch mehrere Teilkurven (hier die Polynome) aufgeteilt und dann jeweils ein Teilpolynom mittels Regression ermittelt und in der LOGO! berechnet. Im FORUM hier wird (trotz des von mir mehrfach demonstrierten Potentials dieses Lösungsansatzes (zuletzt im Beitrag Flüssigkeitshöhe zu Liter (hard2catch) jedoch wiederholt eine Annäherung mittels Geraden (also eine Linearisierung der Originaldaten bzw. -kurve) diskutiert und gefordert. Auch gibt es dazu einige Ansätze im Forum. Insbesondere von @ernstho und @scorp: Linearisierung 7-Punkt mit Analogverstärker inkl. Excel Tabelle (@ernstho) Heute stelle ich euch deshalb LOGO!-Schaltungen und ein dazu gehöriges EXCEL-TOOL zur Annäherung von gegebenen Funktionen und Datenkurven mittels Geraden vor (, im Sinne von Teilkurven, die dann zusammengesetzt die gegebene Kurve durch lineare Teilabschnitte annähern,). Die Schaltungen sind anwendbar ab der LOGO!-Serie 0BA5 (bzw. ab 0BA6, wenn der Block "Arithmetische Anweisung" verwendet wird) und optimiert in Bezug auf die Anzahl der benötigten Blöcke und die Berechnungsqualität. Außerdem sind die Schaltungen so konzipiert, dass alle Blöcke, die ihr nicht benötigt (weil ihr deren Funktion nicht wollt oder eine geringere Anzahl der Teilgeraden benötigt) ohne weitere Änderungen oder Anpassungen einfach gelöscht werden können. Die Aufteilung in Teilkurven habe ich, wie bereits früher hier im Forum dargestellt, mittels einer als Kette zusammen geschalteten Multiplexern realisiert. Dadurch wird die Anzahl der Blöcke zur Steuerung (Zusammensetzung) der Teilkurven minimiert und die Definition der Schwellwerte und die Verwendung der Parameter der Multiplexer systematisch aufgebaut. Auf dieser Basis sind nun alle Schaltungsvarianten konzipiert und die unterschiedlichen Varianten betreffen den konkreten Aufbau der Teilkurven (hier stets Geraden), wobei die ersten beiden Varianten nicht (mehr) als Schaltung von mir vorhanden sind, denn sie sind m. E. ungünstig. Variante 1: Klassisch werden die Teilgeraden mittels einem Block "Analogverstärker" realisiert, z. B. von @ernstho. Variante 2: Eine deutlich verbesserte Berechnungsqualität von y bei gegebenen Koeffizienten a und b einer Geradengleichung y = ax + b und eine größere Bandbreite an Parametern a und b sind bei Anwendung eines Blocks "Arithmetische Anweisung" möglich, wie von @scorp angewendet. Beide Varianten haben aber den gravierenden Nachteil, dass alle analogen Blockausgänge noch explizit "abzuschließen" sind, wodurch weitere Blöcke erforderlich sind (insbesondere eignet sich dazu der Block "Analogkomparator" mit 2 Analogeingängen), denn die Blöcke "AnalogMerker" sind äußerst rar und werden meist auch noch zu anderen Zwecken in einer Schaltung benötigt. Dashalb empfehle ich euch folgende Varianten (jeweils als kommentierte Schaltung im Dateianhang vorhanden): Variante 3.: Auch andere Analogblöcke haben die Eigenschaft eines Analogverstärkers. Als Berechnungsblock der Geraden habe ich nun den Block "analoger Schwellwertschalter" (abgekürzt als "aSWS" bezeichnet) gewählt. Dadurch können alle Teilkurven digital abgeschlossen werden (mit Blöcken "Xi"), so dass diese Variante letztlich deutlich weniger Blöcke als beide vorhergehenden Varianten beansprucht (wobei die Berechnungsqualität der der Variante 1 entspricht). Variante 4: Dies ist die Variante mit der absolut geringsten Blockanzahl, denn anstelle der separaten aSWS zur Steuerung der Multiplexer werden hier nun die aSWS ausgewählter Teilkurven verwendet. D. h. die aSWS werden neben der Gleichungsberechnung gleichzeitig auch zur Steuerung der Multiplexer verwendet. Dadurch wird allerdings einerseits die Aufteilung von Schaltungsfunktionalitäten aufgegeben und andererseits ist die Vorgabe/Berechnung der Schwellwerte zur Steuerung der Multiplexer Bedingungen unterworfen - und es kann sein, das KEINE geeigneten Schwellwerte festgelegt werden können, so dass ggf. für die jeweilige Steuerleitung zum entsprechenden Block "Multiplexer" doch ein separater aSWS verwendet werden muss. Variante 5: Diese Nachteile der Variante 4 werden nun eliminiert und gleichzeitig die Berechnungsqualität der Teilgeraden optimiert. Dazu wird VOR die jeweiligen aSWS der betreffenden Teilgeraden ein Block "Arithmetische Anweisung" (von mir kurz mit "Math" bezeichnet) eingefügt, der nun alleine die Berechnung der Geradengleichung übernimmt. Dadurch werden die Parameter Gain und Offset der aSWS frei um diese dazu zu verwenden, die Werte y (vom Ausgang AQ des vorgeschalteten Blocks "Analoge Arithmetik) so anzupassen, dass wieder für (fast) alle Fälle geeignete Schwellwerte zur Steuerung der Multiplexer abgeleitet werden können. Variante 6: Hier werden nun auch den aSWS der übrigen Teilgeraden jeweils ein Block "Arithmetische Anweisung" vorgeschaltet und so schließlich die Berechnungsqualität aller Teilgeraden optimiert! Variante 7: Hier erfolgt nun eine abschließende Optimierung der Anzahl der benötigten Blöcke (der Gesamtschaltung), d, h. wo es möglich ist, werden jeweils 2 Blöcke aSWS der Teilkurven (hier Teilgeraden) durch einen Block "Komparator" ersetzt. "Ergänzt" bzw. handhabbar werden diese Schaltungsvarianten nun durch ein TOOL auf EXCEL-Basis. Dieses Tool ermöglicht zunächst mal die Eingabe und ggf. Berechnung der vorgegebenen Aufgabenstellung (hier am Beispiel des "liegenden Zylinders" aus o. g. Link) im Tabellenblatt "Daten AQ=f(Ax)". Die Vorgabe der x-Werte (hier Ax) kann nun auf Basis von Sensordaten oder alternativ durch Tabellendaten erfolgen. Die Skalierung der Sensordaten erfolgt nach Auswahl so, wie von mir hier im Forum empfohlen, also teilweise nicht wie in den Blöcken der LOGO von Siemens vorgegeben! Die Daten können direkt in die Blöcke Analogverstärker der Schaltungen eingegeben werden. Die zugehörigen y-Werte können entweder eingegeben, als WERTE hineinkopiert oder als Formel berechnet werden (vgl. Beispieldaten zum "liegenden Zylinder". Sind alle Angaben zwischen "Analyse der Eingabedaten (Datenkonsistenz):" und "Notizen" blau (und nicht rot), dann sind die Vorgaben OK und es kann mit dem Tabellenblatt "Auswertung_Linearisierung" fortgefahren werden. Das Tabellenblatt "Auswertung_Linearisierung" dient der Aufteilung in Teilkurven (zwei Datenpunkte bilden dann jeweils die Intervallgrenzen für eine Gerade) und der Berechnung aller Parameter der Blöcke in den LOGO!-Schaltungen. Alle orange gefärbten Felder müssen definiert werden/sein. Diese haben Kommentare zur Erläuterung oder die wählbaren Vorgaben sind eindeutig. Zur Aufteilung der Teilkurven (Teilgeraden) ist insbesondere deren Anzahl vorzugeben zwischen 1 und 16, wobei zur Ausnutzung der Multiplexer 4, 7,10,13 oder 16 Teilkurven zu bevorzugen sind. Wie gesagt können alle Blöcke für nicht benötigte Teilkurven ohne weitere Änderungen in den Schaltungen gelöscht werden. Die Hauptarbeit (für jedes eurer Projekte) ist nun die Auswahl der Werte Ax zur Definition der jeweiligen Geltungsbereiche der Teilgeraden (z-Werte werden automatisch zugeordnet). Es liegt in eurem Geschick diese Teilbereiche so zu finden, dass die Annäherung an die Basisdaten bestmöglich erfolgt. Dazu bietet euch das TOOL einige Unterstützung: Innerhalb der grauen horizontalen Streifen erfolgen die Eingaben, die Berechnung der Teilgeraden, werden statistische Daten und ein dynamisches Diagramm aufbereitet. Weiter rechts sind dann alle Logo!-Parameter zusammengestellt - die dann nur noch in die entsprechende Schaltung(-svariante) eingegeben werden müssen - fertig. Hinweise der jeweils anzuwendenden Blöcke, Parameter und ggf. auch Optionen. Die farblichen Umrandungen der Parametertabellen kennzeichnen die für die jeweilige Schaltung relevanten Parameter. Sind Felder rot hinterlegt oder mit roter Textfarbe ausgeführt oder sind Felder bei den Schwellwerten leer, dann sind keine für die LPGO! passenden Werte berechenbar und ihr müsst auf Alternativen (z. B. separater aSWS oder anstelle "Analogverstärker" dann eine "Arithmetische Anweisung" verwenden) zurückgreifen oder eure übrigen Vorgaben in den orangenen Feldern (insbes. Berechnungsvariante, Intervallgrenzen , also Datenpunkte über "Ax" oder Schaltungsvariante) verändern... Ihr könnt auch verschiedene Einstellungen/Varianten kombinieren und z. B. einige Geraden mittels Linearisierung und andere mittels Regression in den vorbereiteten LOGO!-Schaltungen verwenden etc....Experimentiert einfach mal mit dem TOOL...Derzeit sind Daten und Eingabefelder für den "liegenden Zylinder vorbereitet und die Intervalle optimiert bezüglich einem maximalen Fehler von ca. 4 mm. Die Berechnungsmethode "2. Regression" liefert deutlich bessere Ergebnisse für die Annäherung... Für diejenigen unter euch, die anstelle von EXCEL LibreOffice zwingend verwenden müssen, habe ich die Excel-Datei in CALC von LibreOffice eingelesen, wesentliche Übertragungsfehler behoben und euch die ods-Datei ebenfalls im Dateianhang bereitgestellt. Allerdings habe ich es nicht geschafft, die in Excel einwandfrei arbeitende dynamische Diagrammdarstellung für die Quelldaten {Ax, z} zu erreichen, denn die Namen "Diagr_Daten_Ax" und "Diagr_Daten_z" für die Datenbereiche "x" und "y" ergeben nicht das gewünschte Ergebnis! Deshalb habe ich diese Datenreihe "Datenpaare" leider löschen müssen. Wer einen Lösungsweg dafür kennt bzw. findet, dem wäre ich dankbar für eine entsprechende Mitteilung. Ich hoffe, damit haben alle, die (Teil-)Geraden zu Annäherung von Kurven verwenden wollen ein hilfreiches Tool an der Hand dies effizient zu erreichen! MfG DateianhangFORUM_Linearisierung_mit_Teilgeraden_1.zip (464 Downloads) |
Zuletzt bearbeitet von: Betel am: 04/23/2020 17:36:14kleine Textkorrekturen ==> Meine TAG-Listen: "deut." |
|
Für diesen Beitrag bedanken sich3 Benutzer |
Folgen Sie uns auf