Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

Fahrstuhlprogramm

Ich habe die Aufgabe einen Fahrstuhl zu programmieren. Aber ich weiß nicht, wie ich den Fahrstuhl an einer Etage halten lassen kann. Mom fährt er nur hoch und runter. Und stoppt erst, wenn entweder der zähler auf 0 ist oder auf 10.000. Könnte mir da jemand helfen? Ich programmiere den Fahrstuhl in der Programmiersprache BASIC. Bitte antwortet schnell. Ich bedanke mich schonmal für eure Hilfe. 


Antworten zu Fahrstuhlprogramm:

servus..
die frage passt wohl besser in die Sparte Programmierung und nicht software hilfe :)
schau mal links.
sollte dort hin verschoben werden da kriegst du am ehesten eine antwort

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Poste doch mal den Quellcode, den du bisher hast!

ok also ich habe meinen Fahrstuhl halt erstmal nur für zwei ebenen gemacht. die restlichen kann man ja später noch einfügen. Und ich glaub so wie ich mir das mit den Türen gedacht habe klappt auch nicht so ganz richtig.


CASE selectLift OF
ACTION WAIT:
    IF (dibutton_TOP = TRUE) THEN
       selectLift = TOP_POSITION
    ELSEIF (dibutton_DOWN) = TRUE THEN
           selectLift = BOTTOM_POSITION
    ENDIF
 IF (dibutton_TOP  = TRUE) OR (dibutton_DOWN = TRUE) THEN
     doClose_DOOR = TRUE
 ELSEIF (diClose_DOOR = TRUE) THEN
        doClose_DOOR = FALSE
 ENDIF     
ENDACTION

ACTION TOP_POSITION:
       doLiftTop = TRUE
    IF (diLiftTop) = TRUE THEN
       doLiftTop = FALSE
       selectLift = OPEN_DOOR
    ENDIF
ENDACTION

ACTION BOTTOM POSITION:
       doLiftBottom = TRUE
    IF (diLiftBottom) = TRUE THEN
       doLiftBottom = FALSE
       selectLift = OPEN_DOOR
    ENDIF
ENDACTION

ACTION OPEN_DOOR:
       doOpenDoor = TRUE
    IF (diOpenDoor = TRUE) THEN
       doOpenDoor = FALSE
       WAIT = TRUE
    ENDIF
ENDACTION

also ich hab mich mal hier angemeldet und mich würde es freuen, wenn mir da jemand helfen kann. Ich habe mir den Quellcode mihilfe eines Struktogramms erstellt. Naja ich grübel jetzt erstmal weiter. Ich hoffe jemand antwortet. Achso und die Sprache in der ich das mach heißt Automation BASIC, die stellt B&R in einem SPS-Programmierprogramm namens Automation Studio  zur verfügung.(wer mehr über dieses programm wissen will soll mich fragen)

« Letzte Änderung: 16.01.08, 08:54:17 von Pfönix »

Ihr könnt mir das auch in Form von Visual Basic erklären. Diese Sprache ähnelt sehr mit der die ich brauche. Das würde mir schon sehr helfen 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hmm, also das sieht mir doch alles etwas verwirrend aus. Mal ne kurze Zwischenfrage: Was ist der Unterschied zwischen

IF (diLiftTop) = TRUE THEN
und
IF (dibutton_TOP = TRUE) THEN
(Man achte auf die Klammersetzung)? Bist du sicher, dass da nicht vielleicht Zuweisungen passieren?

Aber mal zum eigentlichen Thema. Ich wuerde mir irgendeine Struktur machen, in der ich mir den Zustand des Fahrstuhls merke, also Stockwerk, Status der Tür. Dann eine Struktur, die die ankommenden Fahraufträge verwaltet und dem Fahrstuhl sagt, wo er als nächstes hinfahren soll. Das wäre quasi das Hauptprogramm. (Woher kriegt der Fahrstuhl bei dir eigentlich die Aufträge? Können während der Fahrt weitere Aufträge gegeben werden?)
Dann eine Funktion, die den Fahrstuhl bewegt, die dann solange je ein Stockwerk hoch- bzw. runterfahren lässt, bis das gewünschte Stockwerk erreicht ist.
void main() {
    elevator.floor = 0;
    elevator.doors = opened;
    while( true ) {
        if( newEventReceived ) {
            moveTo( requestedFloor );
        } else wait();
    }
}

void moveTo( int floor ) {
    if( elevator.doors == opened ) closeDoors();
    while( elevator.floor != floor ) {
        if( elevator.floor < floor ) moveUp();
        else moveDown();
    }
    openDoors();
}

void closeDoors() {
    elevator.doors = closed;
}

void openDoors() {
    elevator.doors = opened;
}

void moveUp() {
    elevator.floor++;
}

void moveDown() {
    elevator.floor--;
}
Ist zwar kein Basic, dürfte aber halbwegs verständlich sein. Da fehlen natürlich auch noch Abfragen nach min./max. Etage (dass er nicht in den 1189. Stock fährt wenn es nur 5 gibt und so) und es ist nicht möglich spontane Zwischenhalte einzubauen wenn spontan ein Knopf gedrückt wird. Ist aber ein Anfang und (mir jedenfalls) verständlicher als dein Ansatz.
 
« Letzte Änderung: 16.01.08, 21:07:21 von Lisaa »

also beim ersten Code den du zitiert hast wird der Lift in bewegung gesetzt und der zweite code ist der Ausgang von dem Knopf der nach oben zeigt. DI = Ausgang und DO = Eingang. Die Sprache, die ich benutze, basiert auf zuweißungen und reaktionen((wenn das ist?, was dann?) so ungefähr) mmh und was ich da gecodet habe ist sozusagen ein Schrittschaltwerk. Wenn in der WAIT position ein Knopf getrückt wird ( "dibutton_TOP" oder "dibutton_DOWN") dann springt er in die zugewießene Aktion rein und führt aus was dort im befohlen wird. z.B. bei der TOP_POSITION (Konstante) wird abgefragt, ob der Lift schon oben ist wenn ja dann werden die Türen geöffnet und wenn nein bleiben sie geschlossen. Die abfrage ob der lift oben ist wird dann wieder zurückgesetzt und bleibt im MERKER. Danach arbeitet der Computer die nächsten Schritte durch. Und wenn die Türen  offen sind was in dem Schritt OPEN_DOOR(ebenfalls ne Konstante) gemacht wird springt der computer wieder in die Wait Position und wartet auf befehl. Wenn dann nochmal die Taste Hoch getrückt wird springt er sofort wieder aus dem schritt raus, weil der (dibutton_TOP) noch aktiviert ist, er wird erst deaktivert, wenn wieder der (dibutton_DOWN) aktiviert wird. Und während der Fahrstuhl fährt sind keine eingaben möglich, bis der erste befehl ausgeführt wurde also das runterfahren und tür öffnen.   Ich weiß ich habe ihn ein wenig Undeutlich geschrieben aba so sollte er soweit funktionieren wie ich es mir gedacht habe. Aber was dort steht is mom erst nur für zwei stockwerke. Oben und Unten nicht für 5.   

aber deinen vorschlag find ich echt gut vielen dank dafür. Achso ähm was ist das denn für eine Sprache? Sie kommt mir nicht bekannt vor.   

« Letzte Änderung: 17.01.08, 08:01:47 von Pfönix »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
also beim ersten Code den du zitiert hast wird der Lift in bewegung gesetzt und der zweite code ist der Ausgang von dem Knopf der nach oben zeigt.
Ne, ich meinte eigentlich nur die Klammersetzung. Beim einen klammerst du (irgendwas = TRUE) und beim zweiten (irgendwas) = TRUE. Gibt es da einen Unterschied? Ich koennte mir Vorstellen, dass beim ersten geprueft und beim zweiten zugewiesen wird, was, wenn es unabsichtlich passiert, eventuelles Fehlverhalten erklaeren koennte.

Zitat
Ich weiß ich habe ihn ein wenig Undeutlich geschrieben aba so sollte er soweit funktionieren wie ich es mir gedacht habe.
Und - funktioniert er?

Zitat
Aber was dort steht is mom erst nur für zwei stockwerke. Oben und Unten nicht für 5.
Es koennte in der Tat etwas aufwaendig werden, da du bei deinem Ansatz wahrscheinlich fuer jeden Button und fuer jede Etage eigene Variablen machen muesstest. Bei 5 Stockwerken gibts da ne Menge zu vergleichen...

Zitat
aber deinen vorschlag find ich echt gut vielen dank dafür. Achso ähm was ist das denn für eine Sprache? Sie kommt mir nicht bekannt vor.   
Hmm, das koennte C, C++ oder Java sein. Sollte in allen drei Sprachen so oder so aehnlich gehen. Fehlt natuerlich noch ne ganze Menge.
Unterstuetzt das Automation Basic einen solchen (funktionsbasierten) Ansatz?
« Letzte Änderung: 17.01.08, 08:43:50 von Lisaa »

Achso ja ähm da hab ich mich verschrieben, beim zweiten Code kommt die Klammer auch hinter das true. Ja eigendlich schon es gibt nur noch nen paar pobs bei der öffnung und schließung der Türen. Ich habe versucht jetzt 3 Sensoren pro etage zu installieren. wo jeder 3 Sensor nur zur sicherheit da ist. Ne es unterstützt nur so komische sprachen wie "Strukturierter Text und Automation Basic" aber es unterstützt auch nen Kontaktplan. Mit diesem Programm schreibt man die Programme für Betriebsanlagen.

Ich hasse dieses Programm, weil es so umständlich (gestern hab ich ne stunde gebraucht bis ich ne SPS-Steuerung online bekommen habe nur weil irgend ein Häkchen im Programm nicht da war) ist und nicht die Aktuellen Sprachen unterstützt die im mom im Umlauf sind. Aber mein Chef lässt nicht nach ich soll es mit dem Programm machen. Um für nen Kunden das scheiß teil fertig zu bekommen. (ich programmier sonst keine Fahrstühle nur Anlagen)   

« Letzte Änderung: 17.01.08, 09:22:28 von Pfönix »

Naja weiter bin ich noch nicht gekommen. Ich werd euch auf dem Laufendem Halten.
PS: Visualisierung ist auch nun fertig. Der Code funktioniert sorum halt nur stockend nicht mit abbremsendem Tempo.

Also so sieht der Code im mom aus:


 

Zitat
CASE selectLift OF
   ACTION WAIT:
      IF(dibuttonTop = TRUE) THEN
         selectLift = TOP_POSITION
      ELSE IF(dibuttonDown = TRUE) THEN
         selectLift = Bottom_Position
      ENDIF
   ENDACTION


   ACTION TOP_POSITION:
      doLiftTop = TRUE
      IF(diLiftTop = TRUE)THEN
         doLiftTop = FALSE
         selectLift = OpenDoor
      ENDIF
   ENDACTION


   ACTION Bottom_Position:
      doLiftBottom = TRUE
      IF(diLiftBottom = TRUE)THEN
         doLiftBottom = FALSE
         selectLift = OpenDoor
      ENDIF
   ENDACTION


   ACTION OpenDoor:
      doOpenDoor = TRUE
      IF(diOpenDoor = TRUE)THEN
         Sensor3 = TRUE
      ENDIF
      IF Sensor3 = FALSE THEN
         selectLift = CloseDoor
         selectLift = WAIT
      ENDIF
   ENDACTION


   ACTION CloseDoor:
      doCloseDoor = TRUE
      IF(diCloseDoor = TRUE)THEN
         doCloseDoor = FALSE
         selectLift = WAIT
      ENDIF
   ENDACTION
ENDCASE

 
   
« Letzte Änderung: 17.01.08, 11:22:10 von Pfönix »

also wenn noch jemand hier nen vorschlag hat bitte reinposten.


« Java - Bilder/Musik aus dem .jar File ladenFlashanimationen erstellen »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Grundstrich
Der Begriff des Grundstrichs im Bereich der Typografie, bezeichnet den senkrechten Strich der Buchstaben. Bei Schriftarten mit variabler Strichstärke, wie zum Beispi...

Haarstrich
Der Begriff Haarstrich stammt aus dem Bereich der Typographie. Bei Schriften, wie zum Beispiel der Antiquaschrift mit unterschiedlichen Strichstärken, wird zwischen ...

BASIC
BASIC steht für "Beginners All Purpose Symbolic Instruction Code", eine der ersten weit verbreiteten Programmiersprachen. Die einfache Anfänger-Sprache hat dazu...