|
|
Programmierung von einem Schwellenschalter |
|
tsnkl |

Forum-Anfänger
|
 |
Beiträge: 14
|
 |
|
 |
Anmeldedatum: 14.03.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.07.2008, 08:56
Titel: Programmierung von einem Schwellenschalter
|
 |
Hallo,
habe folgendes Problem:
Würde mir gerne einen Schwellenschalter programmieren, das heisst, das beim Überschreiten einer bestimmten Schwelle, bei mir ist es eine bestimmte Drehzahl nur noch ein konstanter Wert herausgegeben wird.
Habe schon viel mit der if-Bedingung herum experimentiert. Beispiel zur Veranschaulichung:
Sofern die Drehzahl wieder unter die 1000 fällt, wird mir wieder die Variable 'moment' herausgegeben. Eigentlich soll aber ab dem ersten Überschreiten ständig der Wert 0 herausgegeben werden.
Ich hoffe Ihr könnt mir weiter helfen!!!
Gruß
Thomas[/code]
|
|
|
|
|
keloid |

Forum-Century
|
 |
Beiträge: 216
|
 |
|
 |
Anmeldedatum: 04.10.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.5.0.342 (R2007b)
|
 |
|
|
 |
|
Verfasst am: 01.07.2008, 09:21
Titel:
|
 |
Fuege einfach ein Boolesche Variable ein, anhand derer das Programm den Wert veraendert, in etwa so:
|
|
|
tsnkl |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 14
|
 |
|
 |
Anmeldedatum: 14.03.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.07.2008, 09:36
Titel:
|
 |
Hallo keloid,
leider funzt das auch nicht, weil immernoch beim Unterschreiten der Grenze von 1000 U/min die Boolsche Varaible auf 0 zurückfällt und die Variable 'moment' herausgibt.
Ausgeschrieben müsste die Anweisung lauten:
Wenn die Drehzahl von 1000 erstmalig überschritten,
dann nur noch moment_neu=0 ausgeben.
Nur ich weiss nicht wie ich das programmieren soll!!!
Gruß
Thomas
|
|
|
keloid |

Forum-Century
|
 |
Beiträge: 216
|
 |
|
 |
Anmeldedatum: 04.10.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.5.0.342 (R2007b)
|
 |
|
|
 |
|
Verfasst am: 01.07.2008, 09:51
Titel:
|
 |
Wenn Dein Programm in einer For- oder Whileschleife steht, muss das
natuerlich vor der Schleife stehen.
|
|
|
tsnkl |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 14
|
 |
|
 |
Anmeldedatum: 14.03.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.07.2008, 09:59
Titel:
|
 |
Habe keine For bzw. While-Schleife benutzt, da meiner Meinung nach, sich Schleifen für dieses Problem nicht eignen, eher doch Anweisungen wie if. Kann auch sein, das ich mich irre. Aber wüsste nicht wie sich eine Schleife dafür nutzen lässt...
|
|
|
keloid |

Forum-Century
|
 |
Beiträge: 216
|
 |
|
 |
Anmeldedatum: 04.10.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.5.0.342 (R2007b)
|
 |
|
|
 |
|
Verfasst am: 01.07.2008, 10:09
Titel:
|
 |
Kannst Du evtl. Deinen Programmcode hier rein kopieren, dann faellt es leichter, darauf einzugehen.
|
|
|
tsnkl |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 14
|
 |
|
 |
Anmeldedatum: 14.03.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.07.2008, 10:19
Titel:
|
 |
Kein Problem, genauer gesagt arbeite ich zur Zeit mit Simulink und möchte über das Tool 'Embedded Matlab Function' mir diesen besagten Schwellenschalter basteln:
|
|
|
keloid |

Forum-Century
|
 |
Beiträge: 216
|
 |
|
 |
Anmeldedatum: 04.10.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.5.0.342 (R2007b)
|
 |
|
|
 |
|
Verfasst am: 01.07.2008, 10:25
Titel:
|
 |
Ah, dann sieht die Sache wieder anders aus :D
Mit Simulink kenne ich mich nicht im Ansatz aus, aber Du koenntest versuchen, die Variable "flag" ausserhalb der Funktion zu definieren.
Es ist klar, dass die Flagvariable bei jedem Aufruf der Funktion fcn neu auf Null initialisiert wird, also muss sie ausserhalb initialisiert werden.
|
|
|
tsnkl |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 14
|
 |
|
 |
Anmeldedatum: 14.03.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.07.2008, 10:31
Titel:
|
 |
Erstmal vielen Dank für deine Antworten, hatte ich total vergessen!!!
Erklär mir noch mal bitte, was genau die Variable 'flag' bewirken soll, bin nicht so der Programmier-Experte!!! Vielleicht steige ich jetzt hinter deine Idee...
|
|
|
keloid |

Forum-Century
|
 |
Beiträge: 216
|
 |
|
 |
Anmeldedatum: 04.10.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.5.0.342 (R2007b)
|
 |
|
|
 |
|
Verfasst am: 01.07.2008, 10:56
Titel:
|
 |
Sie soll einfach eine Ueberpruefungsvariable sein.
Du hattest ja geschrieben, dass ab einem bestimmten Ereignis der Ausgabewert immer der Gleiche sein soll. Da das aber mit dieser normalen Ueberpruefung nicht geht, musst Du eine spezielle Ueberpruefungsvariable einfuehren. Im Allgemeinen nennt man sowas "Flag", denn das ist computerbezogen ein "Bitschalter", also ein Bit, das die Zustaende AN und AUS bzw. WAHR und FALSCH darstellen soll.
Die Abfrage ueber die Drehzahl kann sich ja nach dem benoetigten Ereignis (hier: Erstmalig Drehzahl groesser oder gleich 1000) wieder veraendern, also brauchst Du ein anderes Erkennungsmerkmal. Da eignet sich eine Flag-Variable, die in diesem Fall ausdrueckt: Die Drehzahl war bereits bei 1000 oder drueber.
|
|
|
tsnkl |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 14
|
 |
|
 |
Anmeldedatum: 14.03.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.07.2008, 11:01
Titel:
|
 |
Achso, aber wenn ich jetzt z. B. die Variable 'flag=0' mit der Bedingung Drehzahl>=1000 verknüpfe, dann ist die Variable doch abhängig von der Drehzahl. Das heisst sinkt die Drehzahl unter 1000 verliert die Variable doch wieder ihren festen Wert.
wie kann ich denn den festen Wert beibehalten, trotz verändlicher Drehzahl?
|
|
|
keloid |

Forum-Century
|
 |
Beiträge: 216
|
 |
|
 |
Anmeldedatum: 04.10.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.5.0.342 (R2007b)
|
 |
|
|
 |
|
Verfasst am: 01.07.2008, 11:05
Titel:
|
 |
Naja, das kommt auf die Umsetzung an.
Wenn Du schreibst
und in der Funktion fcn steht
Dann setzt er die Variable flag beim ersten Ereignis "drehzahl >= 1000" auf Eins und sie wird danach erst dann wieder Null, wenn Du den Programmteil, in dem die Variable flag mit Null initialisiert wird, aufrufst.
|
|
|
tsnkl |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 14
|
 |
|
 |
Anmeldedatum: 14.03.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.07.2008, 11:21
Titel:
|
 |
Hört sich von der Theorie sehr gut an, nur bei mir funktioniert das nicht. Habe es eben ausprobiert, jedoch keine Veränderung im Vergleich zu der einfachen if-Anweisung ohne flag. Sofern die drehzahl unter 1000 sinkt, wird der Stellwert wieder ungleich 0!!!
Hier der code:
Die Variable 'flag' führe ich über eine externe Konstante in den Block!
|
|
|
dib0r |

Forum-Guru
|
 |
Beiträge: 413
|
 |
|
 |
Anmeldedatum: 09.05.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.07.2008, 12:42
Titel:
|
 |
Hi,
ich sehe da prinzipiell 2 Möglichkeiten (vielleicht müsste ich mir da länger gedanken drüber machen )
1. So ähnlich wie du des bereits geschrieben hast:
Der Aufruf ist dann natürlich auch über
Das Problem am davor geposteten Code ist dass die Variable flag nicht zurückgegeben wird, sprich nicht überschrieben wird.
2. Möglichkeit (so wie du es bereits hattest)
Allerdings erfolgt der Aufruf mit
Voraussetzung dafür ist natürlich, dass moment nicht im Programmcode vor der Abfrage ändert ( ich befürchte aber dass dies bei dir nicht der Fall sein wird).
Hm, mir fällt gerade auf dass es da doch noch mehrere Lösungen gibt (irgendwie fehlt mir da aber noch eine elegante Version).
MfG
Zuletzt bearbeitet von dib0r am 01.07.2008, 12:48, insgesamt einmal bearbeitet
|
|
|
dib0r |

Forum-Guru
|
 |
Beiträge: 413
|
 |
|
 |
Anmeldedatum: 09.05.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.07.2008, 12:46
Titel:
|
 |
tsnkl hat Folgendes geschrieben: |
Die Variable 'flag' führe ich über eine externe Konstante in den Block! |
Das ist das Problem. Wenn ich dich richtig verstehe (externe Konstante = Argument der Funktion), dann heisst das dass du die Variable flag nicht mehr zurückgibst. D.h. egal ob flag in der Funktion gesetzt wird oder nicht, sobald die Funktion beendet ist, wird flag wieder auf den Wert gesetzt, den sie bei Aufruf der Funktion hatte.
Wenn ich dich falsch verstehe (externe Konstante = globale Variable) dann fehlt die Deklaration der globalen Variablen im Block. Ausserdem muss da das Argument 'flag' weg. Ich würde allerdings globale Variablen nicht empfehlen
MfG
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|