c't Projekte - c't-Bot und c't-Sim - Mailinglisten
Absender: Frank Menzel
Datum: Sa, 24.01.2009 20:03:29
In-reply-to:
<02189744-5AD5-4204-A5D3-E271199C2020@xxxxxxxxxxxxxxx>
Hallo Timo, zu dem Punkt: " if (pos == DOOR_CLOSE && sensDoor == 0) { return; // Klappe ist bereits geschlossen }" Ich habe sie auskommentiert aber dann geht gar nichts. Gleich nach flashen gibt er nur noch ein sich immer wiederholendes Klicken von sich-keine Anzeige, nichts geht mehr. Wieder die Zeilen rein, alles geht wieder. Wieder auskommentiert-ticken. Also habe ich die Zeilen drin gelassen. Die Änderung des Aufrufens von bot_servo(data... zu bot_servo(NULL... hat aber die Lösung gebracht und er kommt damit zu Ende, kein endloses Ticken mehr. Bei der ursprünglichen Version ohne NULL-Aufruf, also noch mit dem endlosen Ticken nach Einfangen, ist mir noch folgendes aufgefallen: Wenn Objekt eingefangen ist, leuchtet ja die gelbe LED und es kommt das endlose Ticken. Wenn ich aber den bot nun mit dem eingefangenen Objekt ein wenig zurückschiebe und die LED verlischt, dann hört auch das Ticken auf und das Verhalten kommt zum Ende. Soweit erst einmal dazu, Gruß, Frank -----Ursprüngliche Nachricht----- Von: ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx [mailto:ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx] Im Auftrag von Timo Sandmann Gesendet: Samstag, 24. Januar 2009 18:16 An: Entwicklung rund um den c't-bot Betreff: Re: [ct-bot] Motorregelung fehlerhaft? Hi Frank, Am 23.01.2009 um 19:41 schrieb Frank Menzel: > Vielleicht kennst Du ja auch bei dem anderen Problem so schnell die > Lösung :-) Ist mir schon lange aufgefallen und möchte ich jetzt mal > ansprechen. Es geht um die Klappe, di sich ja wunderbar via FB steuern > lässt, auf und nieder (bei mir + und -). Bei mir ist der > Klappen-Optokoppler ohne Funktion, wenn der Klappensensor bei dir außer Funktion ist, dann würde ich in bot-logic/behaviour_servo.c Zeile 56ff: if (pos == DOOR_CLOSE && sensDoor == 0) { return; // Klappe ist bereits geschlossen } einfach auskommentieren. Der Sensor wird vom Servo-Verhalten nur dazu genutzt, den Servo gar nicht erst einzuschalten, wenn die Klappe geschlossen werden soll, aber bereits zu ist. Wenn die genannten Zeilen auskommentiert sind, ist das Servo-Verhalten völlig unabhängig vom Klappensensor. > weil meine Klappe eben nicht > seitwärts weggeht sondern hoch und runter. Wenn jeweils die Klappe die > Endposition erreicht hat, dann summt der Servo noch kurz nach und > schweigt dann, läuft wohl auf den Servotimeout. Das ist auch bei der Standard-Klappe der Fall. Das ist hier kein Timeout im Sinne eines Abbruchs, weil etwas nicht rechtzeitig reagiert hat, sondern das Verhalten schaltet den Servo einfach nur für 1 Sekunde ein und dann wieder aus. Daher sollte das Prinzip auch bei deiner Konstruktion funktionieren. > Bis hierher alles prima. > Wenn aber dann in einem Verhalten mal das Klappe-ZU-Verhalten > aufgerufen > wird, wie bei CATCH_PILLAR, und die Klappe dann in dem Verhalten > zugegangen ist (eingefangen) so kommt auch dieses Nachsummen des > Servos. > Doch in dem Fall kommt er nie zu Ende und summt endlos weiter. Es ist > dann auch nicht mehr möglich, mit + oder - via FB die Klappe zum > Aufmachen zu bewegen. Erst nach Reset ist alles wieder ok. Wird das > Klappe-zu-Verhalten in einem anderen Verhalten eingebaut, so endet > dann > jenes Verhalten bei Klappe zu und kommt nicht mehr zum Aufrufer > zurück. Also haben wir folgenden Situation: Wenn bot_servo() mit caller == NULL aufgerufen wird (wie von der Fernbedienung), funktioniert alles, wenn aber caller != NULL (wie beim Aufruf aus einem Verhalten heraus), dann wird der Servo nie wieder ausgeschaltet und der Caller ist ewig blockiert? > Wo kann da das Problem sein ? Ich sehe da so gerade auch kein Problem, weil dein Klappenumbau hier eigentlich keinen Einfluss haben dürfte. sensDoor müsste ja bei dir immer 1 sein. Und wenn nicht, dürfte der Servo gar nicht erst anlaufen. Trotzdem würde ich einfach die drei o.g. Zeilen auskommentieren, weil sie in deiner Konstellation eh keinen Sinn machen. Was du auch noch mal ausprobieren kannst: Im Verhalten wie bot_catch_pillar() einfach den bot_servo(data, ...)-Aufruf auf bot_servor(NULL, ...) ändern, dann müsste es ja wie bei der Fernbedienung sein. Falls das hilft, müsste es aber irgendwo noch einen Bug geben. > Vielleicht ist hier mein Spezialfall mit > unbenutztem Klappe-Zu-Optokoppler und Timeout Schuld? Nein, das denke ich nicht. Grüße, Timo _______________________________________________ ct-bot-entwickler Mailingliste ct-bot-entwickler@xxxxxxxxxxxxxxxxx http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler