Hallo alle zusammen, Ich möchte bei mir zuhause eine Steuerung für das Garagentor entwerfen. Das ganze soll wie folgt ablaufen: 1 Taster: 1 mal drücken / Tor fährt nach oben nochmal dücken / Tor bleibt stehen nochmal drücken / Tor fährt runter 2 Endschalter: Anschlag oben / Anschlag unten wenn die Endschalter auslösen soll das Tor stehen bleiben Das ganze soll mit einem Avr realisiert werden. Ich habe bereits einige ansätze, jedoch ist kein größtes Problem die Sache mit dem Taster, meine Gedanke war, den Taster mit der Toogle funktion zu realisiern. Das Problem damit ist nur das das Tor dann nur zwischen Auf un Ab wechselt und nicht stehen bleibt. Danke schon mal im voraus für alle Antworten. Mfg, Heinz Peter
Hallo Heinz Peter, den Taster normal einlesen, entprellen, eine Flanke bilden und damit arbeiten. Axel
Hallo, Ich arbeite zufällig bei einem Torhersteller, und kann dir mit sicherheit sagen, das man bei einer solchen steuerung noch sicherheitseinrichtungen benötigt. z.B. Stromüberwachung, oder Schließkantensicherrung. ansonsten darf das Tor nur in Totmann berieben werden.
Der Taster ist bereits Entprellt, aber wie kann ich die Flanken bilden? Bzw, könntest du mir das genauer erläutern... Mfg, Heinz Peter
Die Sicherheitselektronik für den Motor habe Ich bereits, da können keinen Fehler auftreten. Mfg, Heinz Peter
Zustandsmaschine:
1 | Zustand1: if(taster()) |
2 | hoch(); Zustand erhöhen; |
3 | Zustand2: if(!taste())) |
4 | Zustand erhöhen; |
5 | Zustand3: if (taste()) |
6 | runter(); Zustand erhöhen; |
7 | Zustand4: if (!taste()) |
8 | Zustand auf Startzustand setzen; |
Spricht etwas gegen zwei Tasten? Eine für rauf <-> stopp und eine für runter <-> stopp? Das würde ich usabilitymäßig besser finden und einfacher zu proggen wärs auch.
Ah also so meinst du das... Ist der Zustand eine einfach variable die 3 mal erhöht wird und dann zurück gesetzt wird. Hättest du eine fertiges Beispiel für mich? Ich benutze nur einen Taster weil ich ein vorgefertigtes Schaltpult habe, dort ist nur ein Taster frei. Mfg, Heinz Peter
Heinz peter Posch schrieb: > Ah also so meinst du das... > Ist der Zustand eine einfach variable die 3 mal erhöht wird und dann > zurück gesetzt wird. > Hättest du eine fertiges Beispiel für mich? Schwierig. Du sollst ja auch was tun :-)
1 | #define ROT 0
|
2 | #define ROT_GEDRUECKT 1
|
3 | #define GELB 2
|
4 | #define GELB_GEDRUECKT 3
|
5 | #define GRUEN 4
|
6 | #define GRUEN_GEDRUECKT 5
|
7 | |
8 | uint8_t zustand; |
9 | |
10 | int main() |
11 | {
|
12 | ....
|
13 | |
14 | |
15 | zustand = ROT; |
16 | |
17 | while( 1 ) |
18 | {
|
19 | switch (zustand) |
20 | {
|
21 | case ROT: |
22 | if( TasteGedrückt ) |
23 | zustand = ROT_GEDRUECKT; |
24 | break; |
25 | |
26 | case ROT_GEDRUECKT: |
27 | Sirene_Einschalten(); |
28 | if( ! TasteGedrückt ) |
29 | zustand = GELB; |
30 | break; |
31 | |
32 | case GELB: |
33 | Sirene_Ausschalten(); |
34 | if( TasteGedrückt ) |
35 | zustand = GELB_GEDRUECKT; |
36 | break; |
37 | |
38 | case GELB_GEDRUECKT: |
39 | Sirene_Einschalten(); |
40 | if( ! TasteGedrückt ) |
41 | zustand = GRUEN; |
42 | break; |
43 | |
44 | case GRUEN |
45 | Lampe_Einschalten(); |
46 | if( TasteGedrückt ) |
47 | zustand = GRUEN_GEDRUECKT; |
48 | break; |
49 | |
50 | case GRUEN_GEDRUECKT: |
51 | Lampe_Ausschalten(); |
52 | if( ! TasteGedrückt ) |
53 | zustand = ROT; |
54 | break; |
55 | }
|
56 | }
|
57 | }
|
Jap schon klar, das ist eigentlich genau das was ich wollte. Super, danke dafür. Ich hatte wirklich keine Ahnung wie Ich das machen sollte. Mfg, Heinz Peter
Ich hätte nur eine Frage zu deinem Beispiel: case rot: Taste wird gedrückt case rot_gedrückt: Taster wird losgelassen, das Tor fährt rauf case gelb: Taste wird erneut gedrückt case gelb_gedrückt: Taste wird losgelassen, das Tor bleubt stehen case gruen: Taste wird erneut gedrückt case gruen_gedrückt: Taste wird losgelassen, das Tor fährt runter dannach beginnt das ganze wieder von vorne. Ist meine Annahme korrekt oder sehe ich dabei irgend etwas falsch, bzw ist mein Lösungsansatz richtig? Mfg, Heinz Peter
Heinz peter Posch schrieb: > Der Taster ist bereits Entprellt, SW-Entprellung kann nie schaden, z.B. unterdrückt sie auch Störimpulse. > aber wie kann ich die Flanken bilden? Ist quasi ein Abfallprodukt der Entprellung, daher macht eine SW-Entprellung vieles einfacher. Ich wundere mich immer wieder, wie Leute tagelang mit Problemen kämpfen, weil sie krampfhaft versuchen, eine Entprellung zu umgehen. Peter
Heinz peter Posch schrieb: > Ich hätte nur eine Frage zu deinem Beispiel: > > case rot: Taste wird gedrückt > > case rot_gedrückt: Taster wird losgelassen, das Tor fährt rauf > > case gelb: Taste wird erneut gedrückt > > case gelb_gedrückt: Taste wird losgelassen, das Tor bleubt stehen > > case gruen: Taste wird erneut gedrückt > > case gruen_gedrückt: Taste wird losgelassen, das Tor fährt runter > > dannach beginnt das ganze wieder von vorne. > Ist meine Annahme korrekt oder sehe ich dabei irgend etwas falsch, bzw > ist mein Lösungsansatz richtig? Eine einfache Möglichkeit solche Zustandsmaschinen zu überprüfen, ist es sie sich aufzumalen. Für jeden Zustand malst du einen Kreis und schreibst den Namen des Zustands neben den Kreis. Dann gibt es noch Pfeile, die die Kreise verbinden. Über den Pfeil schreibst du den Auslösemechanismus, also was muss vorliegen, damit dieser Weg genommen wird. Unter den Pfeil schreibst du, welche Aktion dabei erfolgen soll. Einen Kreis markierst du noch speziell: Das ist dein Startzustand. Dort geht alles los. Und dann spielst du Computer: Du befindest dich im Startzustand (also in einem Kreis). Von diesem Kreis gehen Pfeile raus, über jedem dieser Pfeile steht eine Bedingung. Die gehst du jetzt der Reihe nach durch (und stellst dir einen Benutzer vor, wie er auf Tasten drückt, Scheiben einhaut, vor sich hinflucht, was Benutzer halt so tun). Wenn eine deiner Bedingungen bei einem Pfeil zutrifft, dann folgst du diesem Pfeil und führst die zugehörige Aktion in deiner gedachten Umwelt aus. Du landest bei einem anderen Kreis und dort geht das Spielchen wieder weiter: Welche Pfeile gehen raus und unter welchen Bedingungen können sie betreten werden. Und so geht das Spielchen immer weiter. Am besten nimmst du auch noch an, dass im Zeitraum den du brauchst um einem Pfeil zu folgen, in der Realität keine Zeit vergeht. Wenn du also einen Pfeil betreten hast, weil eine Taste niedergedrückt wurde, dann ist sie immer noch gedrückt, wenn du beim Zielkreis angelangt bist (und wenn es dort einen Pfeil gibt, der genau das als Kriterium hat, dann geht die Reise sofort weiter; natürlich unter Ausführung der Aktion die unter dem Pfeil steht) Auf die Art erhältst du erst mal ein graphisches Schaubild deiner 'Maschine'. Mit dem kann man gut Fehler suchen und Szenarien durchspielen, ob sich die Maschine auch wie erhofft verhält. Auch erfordern Änderungen nur einen Radiergummi und sind in Null komma Nix erledigt. Jeder Zustand besteht 3 Teilen: * Einem Namen * Irgendwelchen Bedingungen, wie man in einen anderen Zustand kommen kann * Aktionen, die an diese Bedingungen geknüpft sind und ausgeführt werden, wenn ein Zustandswechsel ansteht. (*) * Es kann auch sein, dass eine Aktion zu machen ist, die an gar keine Bedinung geknüpft ist und keinen Zustandswechsel veranlasst. Das entspricht dann einem Pfeil, der ohne Bedinungung vom Kreis rausgeht und wieder im selben Kreis mündet. Und das Beste: Aus diesem Schaubild kann man dann ganz leicht den Code ableiten :-) Edit (*) Insofern war das Beispiel gedankenlos zusammengeklopft. Es sollte eher so aussehen case ROT: if( Tastegedrückt ) { machwas; zustand = GELB; }
Die Tasten sind SW-Entprellt. Ich weiß was ein Flussdiagramm ist und wie das funktioniert, ich wollte nur wissen ob mein Ansatz stimmt. Mfg, Heinz Peter
Ein Anfang für deine 'Maschine' könnte zb so aussehen Startzustand: TOR_ZU
1 | TOR_ZU TASTE ABWARTEN_AUF |
2 | +-----------+ Taste 1 gedrückt +-----------------+ |
3 | | | -------------------------->| | |
4 | | | Öffnungsmotor starten | | |
5 | +-----------+ | | |
6 | +-----------------+ |
7 | Taste 1 losgelassen | | |
8 | +----------------+ | |
9 | | | Endschalter? |
10 | | +-------------+ |
11 | | Motor stoppen | |
12 | v TOR_ÖFFNET | |
13 | +------------------+ | |
14 | Taste 1 gedr.| | | |
15 | +--------------| | TOR_IST_AUF v |
16 | | +------------------+ +----------------+ |
17 | | +-->| | |
18 | | Endschalter? | |
19 | +------------------+ |
20 | Motor stoppen |
Heinz peter Posch schrieb: > Die Tasten sind SW-Entprellt. Auch gut. Wenn es damit dann egal ist, ob eine taste länger gedrückt ist oder nicht, sparst du dir eine Menge Zustände in deiner Maschine. In dem Fall kannst du dann davon ausgehen, dass eine gedrückte Taste beim Betreten eines Pfeiles am Ende des Pfeiles wieder gelöst wurde. > > Ich weiß was ein Flussdiagramm ist und wie das funktioniert, Das hat nichts mit einem Flussdiagramm zu tun. Das ist ein Zustandsdiagram! Die Maschine hat fiktive Zustände und reagiert auf Ereignisse. Mit dieser Reaktion sind Aktionen verknüpft. Das wird visualisiert! Es geht um die Logik der Maschine, nicht darum wie diese Logik implementiert wird. > ich wollte > nur wissen ob mein Ansatz stimmt. Na ja. Das ist ja noch kein Ansatz. Das sind ein paar Worte die so etwas ähnliches wie eine Tabelle andeuten.
Vorgestern habe ich das Ganze auf ner LOGO programmiert. http://www.nisch-aufzuege.at/PDFs/rolltorsteurung_siemens_logo.pdf
Heinz peter Posch schrieb:
> Die Tasten sind SW-Entprellt.
Dann müßtest Du ja schon die Drückereignisse haben.
Deine Statemachine braucht 4 Zustände, die Du mit jedem Drückereigniss
um 1 weiter zählst und bei 4 wieder auf 0 setzt:
0 = stehen hoch
1 = fahren hoch
2 = stehen runter
3 = fahren runter
Und die (entprellten) Endlagenschalter setzen von 3 auf 0 bzw. 1 auf 2.
Peter
Hallo!! Hast du deine Steuerung realisieren können? Ich muss eine ähnliche Steurung entwerfen und wollte fragen ob du mir ein paar tips geben kannst wie man so ein Projekt am besten beginnt? mfg
toni schrieb: > Hallo!! > > Hast du deine Steuerung realisieren können? > Ich muss eine ähnliche Steurung entwerfen und wollte fragen ob du mir > ein paar tips geben kannst wie man so ein Projekt am besten beginnt? Mit einer vernünftigen Tatsenentprellung und Papier und Bleistift. Damit fällt und steht alles bzw. ab dann wird das ganze trivial. Hast du den Rest vom Thread überhaupt gelesen? Weißt du was eine Zustandsmaschine ist? #>>> Statemachine <<<#
Ein Flussdiagramm ist mir bekannt! Meine aufgabenstellung ist ähnlich wie oben! Im Rahmen der Diplomarbeit soll eine gemeinsame Basissteuerung für Poolabdeckungen, Parkpoller und Tür- und Torantriebe entwickelt werden. Die Realisierung soll mittels Mikrocontroller (AVR) erfolgen. Schaltplan-Konstruktion und Layoutentwurf samt Dimensionierung einer Basissteuerung. Realisierung einer Steuerung in Form einer Platine. 24V DC Motor Soll eine Steuerung entwickelt werden die Auf und Ab fährt! Meine Frage also wie ich so eine aufgabenstellung am besten realisiere!
toni schrieb: > Meine Frage also wie ich so eine aufgabenstellung am besten realisiere! wie schon von Karl-Heinz geschrieben: mit Papier und Bleistift. erst eine große Black Box mit der Sensorik und dem Motor drann. dann kleinere Kisten usw...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.