Hallo ! Ich hoffe, dass ich hier im Forum richtig bin... Frage: Ich wollte gerne ein Fahrstuhlsimulationsprogramm mit Hilfe meines MC 8051 und VisualBasic erstellen. Ein Fahrstuhl (Fernsehturm) mit den Fahrzielen EG , 1,2,3 Stock 0m ; 143m; 146m und 149m) soll in C Programmiert werden. Ein Sekundentakt dient zur simulation der Geschwindigkeit des Korbes. Pro Sekunde Fährt diese also etwas höher/runter (5 m/s). Mit den Tastern (8Stück) meiner Testplatine fordere ich den Fahrstuhl an (Taster 1 EG; Taster 2 = 1Stock; Taster 3 = 2Stock; Taster 4 = 3Stock diese Taster sind auf den Etagen und Taster 5 zum EG; Taster 6 = zum 1Stock; Taster 7 = zum 2Stock; Taster 8 = zum 3Stock sind im Fahrstuhl selbst). Die Höhe und Anforderungen der Etagen werden dann zum Visualisieren an VB gesendet. Problem: Da mein jetziges Programm (läuft nicht rund!) aus "Hunderten" if-Schleifen besteht würde mich mein Fachlehrer für bescheuert erklären. Ein weiteres Problem das ich habe ist, dass der Fahrstuhl nicht nach der reihenfolge der eingehenden Taster fahren soll, sondern wenn er z.B nach unten fährt nur auf die Etagen anhält, die unterhalb liegen und nur dort wo auch vorher der Fahrstuhl angefordert wurde. Wie kann ich dieses Programm "sauber" und einfach Programmieren damit viele if Schleifen wegfallen. ich bedanke mich im voraus für Eure mithilfe !
G. Geiling wrote: > Da mein jetziges Programm (läuft nicht rund!) aus "Hunderten" > if-Schleifen besteht würde mich mein Fachlehrer für bescheuert erklären. "if-Schleifen", nie gehört, was ist das, kann man das essen ? Schleifen sind "for", "while", "do .. while". Mach doch mal nen Ablaufplan. Und erst, wenn der fertig ist und logisch richtig, dann kannst Du auch anfangen zu proggen. > Ein weiteres Problem das ich habe ist, dass der Fahrstuhl nicht nach der > reihenfolge der eingehenden Taster fahren soll, sondern wenn er z.B nach > unten fährt nur auf die Etagen anhält, die unterhalb liegen und nur > dort wo auch vorher der Fahrstuhl angefordert wurde. Du hast ja irgendwo ein Richtungsbit und das wechselt eben erst dann, wenn keine weitere Anforderung in dieser Richtung besteht. Peter
Wie wäre es mit einem Ringbuffer, in dem die Anforderungen abgelegt werden. Diese kannst du dann nach geforderten Regeln abarbeiten. Der Index des Buffers würde dir angeben in welcher Reihenfolge gedrückt wurde, und der Wert gibt an wohin der Fahrstuhl fahren soll. Das einzige was du brauchst sind fixe Regeln zum abarbeiten. Vielleicht auch was mit selbstlern Effekt um den Fahrstuhl von selbst günstig plazieren zu lassen für Wartezeiten.
Michael Wolf wrote: > Wie wäre es mit einem Ringbuffer, in dem die Anforderungen abgelegt > werden. Diese kannst du dann nach geforderten Regeln abarbeiten. Rinpuffer sagt ja schon sequentiell, also nicht geeignet. Du willst ja nicht unnütz an Etagen vorbeifahren, nur weil dort später gedrückt wurde. Du hast 4 Etagen, also 4 möglich Fahrtziele. Da würde ich dann die enorme Menge von 4 Bitvariablen reservieren, um die 4 Anforderungen zu speichern. Und beim Erreichen wird das zugehörige Bit wieder gelöscht. Hoffentlich ist noch genug Platz im SRAM für die 4 Bits, ist ja immerhin schon 1/2 Byte. Die Etagentasten und die zugehörenden Kabinentasten kann man einfach logisch parallel schalten (OR-Verknüpfung). Du hast ja keine 2 Etagentasten mit Richtungsauswahl. Peter
mit dem parallel schalten logisch! Wie genau kann ich den in C programmieren ob er noch nach oben oder nach unten fahren muss?? Wie genau ??????? (Quasi das Hochfahr-Bit oder das Runterfahr-Bit setzen/rücksetzen) Ich verzweifele ich gleich und mein mc fliegt aus dem Fenster ! Sitze daran schon 2 Stunden und habe nur noch 1 Bit im Kopf wer kann mir helfen!
In welche Schule gehst du den überhaupt? Vielleich kann ich so erkennen auf welchem Nivou meine Vorschläge sein sollen. Ich könnte dir ein Teil meines ganzheitlichen Wissens anbieten ;-)
Also wir hatten das bei uns in der schule so gelöst: Die aktuelle Position also die Etage ist in einer variable gespeichert. Wenn jetzt eine Anfrage kommt, fährt er dort hin. Ob nach oben oder unten ist ja einfach zu erkennen, sprich 1 Etage ist teifer als 3 Etage ;) Das Problem ist, dass die Leute die spätergedrückt haben einfach ignoriert werden und erst nach der Fahrt bearbeitet werden. Deshalb regaiert der MC auch beim fahren auf Positionsanfragen. Wenn er zB. bei Etage 2 ist und in Etage 5 will, dedoch wer aus Etage 1 mit möchte, fährt er erst in die 1 Etage und dann in die fünfte, damit er Zeit spart. Um zu berechnen was kürzer ist also erst runter und alle einsammeln oder erst hoch und dann kann man ja einfach Wunschetage-aktuelle Etage rechnen. ------------ - Beispiel - ------------ Fahrstuhl: EG Person_1: 1 Etage Person_2: 5 Etage - Person_2 drückt in der 5 Etage den Siganlgeber. Der Fahrstuhl beginnt noch oben zu fahren, da er ja im EG ist. - Der Fahrstuhl ist bei Etage 2 angekommen und Person_1 drückt den Signalgeber in der 1 Etage. - Jetzt rechnet der MC aus ob es längerdauert Person_2 aus dem fünften Stock abzuholen oder ob es schneller geht erst Person_1 mitzunehmen. (Jetzt wäre es angebracht man hätte Wahlschalter für "nach oben" und "nach unten" damit der MC schon weiß wo es hingehen soll) Naja ich hoffe ich habe dir nen bisschen meine Überlegungen dargestellt. mfg jonny
> Ich verzweifele ich gleich und mein mc fliegt aus dem Fenster ! Das Gefühl kenne ich :) > Sitze daran schon 2 Stunden und habe nur noch 1 Bit im Kopf Mach dir nichts draus. Die Profis sitzen mit Sicherheit auch mehr als 2 Stunden dran, um ne Aufzugsteuerung zu "proggen".
jonny wrote: > Wenn er zB. bei Etage 2 ist und in Etage 5 will, dedoch wer aus Etage 1 > mit möchte, fährt er erst in die 1 Etage und dann in die fünfte, damit > er Zeit spart. Das ist Blödsinn ! Wenn ständig Leute von der 1. zur 2. und zurück fahren, können die Leute in der 5. verhungern. Deshalb hat immer die Richtung die höchste Priorität. Nur so ist gewährleistet, daß auch alle Fahraufträge schnellstmöglichst erledigt werden. Außerdem ist das Fahren garnicht so energieintensiv, sondern das Anfahren. Der Energieunterschied von der 2. zur 5. oder zurück zur 1. zu fahren ist also weit unter dem 3-fachen. Zusätzlich kann er dann noch von der 1. wieder mehr Leute mitnehmen. Peter
@peda stimmt schon, nur unser Lehrer wolte halt diese option, ich habe ja nicht behauptet, dass es die bessere Lösung ist. jonny
Es handelt sich um eine IHK Weiterbildung zum E-Meister in Niedersachsen. Egal... So weit so gut. Das Problem was ich habe ist wahrscheinlich leicht zu lösen aber ich komm einfach nicht drauf. Klar 4 Etagen = 4 Merker Wenn ich eine Taste Drücke wird der Merker gesetzt und wenn der Fahrstuhl dort angekommen ist wird das Bit zurückgesetzt. Logisch! Also muss ich doch schauen, wenn der Korb unten ist (Ausgangsposition)mit einer if - Abfrage feststellen ob oberhalb des EG ein Merker gesetzt wurde. Fahre dorthin. (Bit auf null setzen)Mit einer If - Abfrage nachschauen ob noch ein höheres Bit gesetzt worden ist. Fahre dort hin ......... wenn nein dann fahre runter und so weiter ...... das sind doch wieder sooooo viele if abfragen! Wer weiß was besseres??
jonny wrote: > @peda > > stimmt schon, nur unser Lehrer wolte halt diese option, ich habe ja > nicht behauptet, dass es die bessere Lösung ist. Stimmt ja, Lehrer haben nichts mit Praxis am Hut. Ich könnte mir vorstellen, daß die Leute in der 5. nicht gerade erfreut reagieren, wenn der Aufwärts-Pfeil wieder in Abwärts wechselt. Da dürfte einiges an Beschädigungsbeseitigung auf die Firma solcher Aufzüge zukommen. Die Tasten müßten dann mindestens Fußtritt verträglich sein. Peter
wenn der erste Auftrag (Aufzuganforderung/Tastendruck) kommt, setzt du deine Richtung fest, und immer wenn du angekommen bist prüfst du, ob noch ein Auftrag da ist, für den man in die gleiche Richtung fahren muss.... dieter
Mach doch erstmal ne einfache Fahrsimulation: Taste drücken - Tür zu - Anfahren - Fahren - Bremsen - Stop - Tür auf Du mußt pro Etage 3 Positionskontakte simulieren: - Bremsen von oben kommend - Bremsen von unten kommend - Halt Und wenn der Bremskontakt überfahren wurde, darf kein Haltebefehl mehr von dieser Etage ausgeführt werden, da ja kein ausreichender Bremsweg mehr da ist. Peter
also ich würde es mal mit einem Zustandsdiagramm machen... die Bits der Stockwerke welche man anfahren muss, kann man in einem Array speichern (oder durch Shifts in 1 Byte quetschen, sonst hast du bei Aufzugssteuerungen mit 80 Stockwerken SEHR viele if's drin Ausgangsstatus "idle" komplettes Arrray durchsuchen, ob Taste gedrückt: nein -> GOTO idle ja -> liegt Stockwerk über oder unter aktueller Position -> setze Richtung -> GOTO fahren Status fahren: es wird beim Vorbeifahren von jedem Stockwerk geprüft, ob das Bit im Array gesetzt ist: nein-> GOTO fahren; //gleiche Richtung weiter fahren, ja->Bit löschen, GOTO stop; Status stop: Tür auf, warten Tür zu -> GOTO testnext Status testnext: Array durchsuchen, nach gesetzten Bits: nein -> GOTO idle // keiner mehr gedrückt ja: Bit in der gleichen Richtung: nein -> idle // liegt in der falschen Richtung, also von vorn an fangen ja: -> GOTO fahren // liegt in der aktuellen Richtung, also weiter fahren So müsste eigentlich die komplette Aufzugsteuerung klappen. Gruß Roland p.S. moderne Aufzüge haben an jeder Etage 2 Taster, ob man nach oben oder unten fahren möchte. Meist sind da auch mehrere Aufzüge parallel, so dass auch der stehen bleibt der gerade in die aktuelle Richtung fährt.
Mir war gerade etwas langweilig. Ich habe mal eine kleine Simulation programmiert. Ist noch nicht ganz fertig. Die Priorität des hoch bzw. runterfahrens ist noch nicht drin. Habe ich in VB2005.net geschreiben. Hoffe es läuft bei euch :) Der Ordner "Grafiken" muss mit entpackt werden sonst habt ihr keine Animation und bekommt Fehler! mfg jonny
das scheint ja ein klassiker zu sein ...ggg Grundstudium ET-Praktikum 2003 an der TU-Berlin sollte auch nen Fahrstuhlsimulator entworfen werden...
Kennt jemand von euch eine Simulation wo z.B. der Student nur die Steuerlogik programmieren muss? Also ein Hochhaus mit 8 Aufzuügen wo ein Tag simuliert wird. Und dann geht es darum wer entwickelt die beste Steuerlogik....
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.