AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign dynamische Verwaltung von Objekten - Fahrstuhlsteuerung
Thema durchsuchen
Ansicht
Themen-Optionen

dynamische Verwaltung von Objekten - Fahrstuhlsteuerung

Ein Thema von StuRic · begonnen am 11. Jun 2013 · letzter Beitrag vom 15. Jun 2013
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#11

AW: dynamische Verwaltung von Objekten - Fahrstuhlsteuerung

  Alt 12. Jun 2013, 19:57
Oder so:

TFahrtRichtung = (frHoch = 1, frRunter = -1);
Dann kann man die Richtung als Integer verwenden.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
StuRic

Registriert seit: 11. Jun 2013
8 Beiträge
 
#12

AW: dynamische Verwaltung von Objekten - Fahrstuhlsteuerung

  Alt 13. Jun 2013, 13:05
Moin,

die dynamische Verwaltung meiner Objekte funktioniert soweit. An dieser Stelle ein dickes Dankeschön an alle Ratgeber

Allerdings habe ich (leider) ein neues Problem: Wärenddessen eine Methode (hier: function TTuer.schließen(...):bool abgearbeitet wird, soll eine andere Methode diese unterbrechen können (hier:  function TTuer.oeffnen(...):bool .

Mein Versuch es über einen Attributwert zu machen, hat leider nicht funktioniert (...logisch: da die Methoden nacheinander abgearbeitet werden)...der Versuch sieht etwa so aus:
Delphi-Quellcode:
function TTuer.schließen(...):bool;
...
begin
  ...
  tuerSchließend:= true;
  while ... and (tuerSchließend) do
  begin
    //Tür Schließen
  end;
  tuerSchließend:= false;
end;

function TTuer.oeffnen(...):bool;
begin
  if tuerSchließend then tuerSchließend:= false;
  while ... do
  begin
    //Tür Öffnen
  end;
end;
Kann man mein Problem evt mit Break oder GoTo lösen? Wenn ja, bitte ein Beispiel mitgeben.
Wenn es ohne Break oder GoTo machbar ist, würd ich eine solche Lösung bevorzugen...

Grüße Ric
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: dynamische Verwaltung von Objekten - Fahrstuhlsteuerung

  Alt 13. Jun 2013, 13:17
Großer Gott, in diesen Fahrstuhl kriegen mich keine zehn Pferde

Ich gehe wieder an den Anfang zurück und unterstelle dir, nicht wirklich zu wissen, was du konkret eigentlich machen möchtest. Ein Computer arbeitet Dinge strikt nacheinander ab. Du kannst eine laufende Methode nicht von woanders unterbrechen:

Delphi-Quellcode:
meinFahrstuhl.öffneTüren();
warteMillisekunden(2000);
meinFahrstuhl.notAus();
Das öffnet erst die Türen und wartet anschließend nachdem das Öffnen abgeschlossen ist. Möchtest du Dinge asynchron (quasi "im Hintergrund") ausführen (das Öffnen), brauchst du Threads. Und davon würde ich fürs Erste abraten. Weder könntest du ohne eine laufende Methode "von außen" beeinflussen, noch in der Methode mitbekommen, was sich außen ändert - Da sich in der Zeit außen schlichtweg nichts ändert.

Hast du eine nahende Deadline? Ich würde mir erst einmal fest machen, was das Ding eigentlich konkret können soll, und WIE es das können soll. Beispielsweise einen hoch- und herunterfahrenden Aufzug zeichnen (ebenso wie öffnende und schließende Türen) - Auf Knopfdruck kann der Benutzer dann das Öffnen und Schließen veranlassen und bsp. einen laufenden Öffne/Schließevorgang abbrechen.


Zu Goto ist in den letzten Jahrzehnten eigentlich alles gesagt worden. Vergiss, dass es diesen Befehl gibt.
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#14

AW: dynamische Verwaltung von Objekten - Fahrstuhlsteuerung

  Alt 13. Jun 2013, 13:25
Zurück kommend zu deinen ersten Beitrag. Du schreibst du möchtest das OOP lösen. Denn verwende doch bitte keinen Record und Zeigertypen. Der Record kann genau so ein Objekt (TObject etc.) sein.

Zu deinen Tür Beitrag.

Grundsätzlich hast du hier Statemaschines, welche Übergänge nach Ereignissen haben.

Im Fall der Tür:
1) Tür ist offen
2) Tür schließt
3) Tür ist geschlossen
4) Tür öffnet

Zwischen diesen Zuständen gibt es definiert Übergänge. Letztendlich musst du den Zustand abblinden und dieser kann genutzt werden um es z.B. in der Oberfläche anzuzeigen.
Du solltest auch auf eine strikte Trennung von Mechanik und Anzeige machen.

Beim Fahrstuhl selbst, gibt es genau so Staties.
1) Steht in einen Stockwerk
2) Fährt Aufwärts
3) Fährt Abwärts
4) Nothalt (zwischen Stockwerken)

Diese haben eine direkte Kopplung mit den Tür States.
Wäre doof wenn der Fahrstuhl Status 2-4 hat und die Türen nicht geschlossen sind.

Also schau dir mal das Pattern Zustandmaschine an:
http://de.wikipedia.org/wiki/Zustand_(Entwurfsmuster)
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Horst_

Registriert seit: 22. Jul 2004
Ort: Münster Osnabrück
116 Beiträge
 
#15

AW: dynamische Verwaltung von Objekten - Fahrstuhlsteuerung

  Alt 13. Jun 2013, 13:36
Hallo,

um erstmal keinen Thread zu brauchen, ging auch das starten eines Timers, für jede Kabine getrennt.
Delphi-Quellcode:

function TTuer.schließen(...):bool;
 ...
begin
   ...
   tuerSchließend:= true;
   StarteTuerSchlieszTimer(100) ;
end;

procedure StarteTuerSchlieszTimer(deltaT:longint) ;
begin
  TuerSchlieszTimer.interval := deltaT;
  TuerSchlieszTimer.enabled := true;
end;

procedure TuerSchlieszTimer.OnTimer(....)
begin
  IF TuerSchliessend then
    begin
    TuerPos := TuerPos - deltaTuerPos;
    If TuerPos <= 0 then
      begin
      TuerPos := 0;
      TuerSchliessend := false;
      TuerSchlieszTimer.enabled := false; // Timer aus
      end;
    end
  else
    IF TuerOeffnend then
      begin
      TuerPos := TuerPos + deltaTuerPos;
        If TuerPos >= TuerMaxPos then
          begin
          TuerPos := TuerMaxPos
  ....
end;
Gruß Horst
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: dynamische Verwaltung von Objekten - Fahrstuhlsteuerung

  Alt 13. Jun 2013, 13:40
Darauf wollte ich hinaus - Dass eine Fahrstuhlkabine erst einmal eine Variable braucht, in welcher sie sich ihre Position merkt und diese bei Bedarf immer ein Stückchen hoch- oder heruntergesetzt wird. Und nicht von außen eine Methode schließeTür() mittendrin abbrechen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#17

AW: dynamische Verwaltung von Objekten - Fahrstuhlsteuerung

  Alt 13. Jun 2013, 14:04
Darauf wollte ich hinaus - Dass eine Fahrstuhlkabine erst einmal eine Variable braucht, in welcher sie sich ihre Position merkt und diese bei Bedarf immer ein Stückchen hoch- oder heruntergesetzt wird. Und nicht von außen eine Methode schließeTür() mittendrin abbrechen
du bist wohl schon länger nicht mehr mit einem Aufzug unterwegs gewesen?
Dieses Tür auf/Tür zu Knöpfchen ist doch sehr beliebt bei den Mitfahrern, die es eilig haben, die höflich sind.
Außerdem fehlt mir/hab ich übersehen die Lichtschranke in der Türe.

Meiner Meinung nach müßte es einen eigenen "Sicherungsthread" geben, der die notwendigen Sensoren/Signalgeber pollt oder aber eben auf die entsprechende Nachricht wartet.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

AW: dynamische Verwaltung von Objekten - Fahrstuhlsteuerung

  Alt 13. Jun 2013, 14:08
Die Frage ist nur, ob wir nicht erst einmal anfangen sollten, von Zeigern und Strukturen runterzukommen, oder gleich gethreadete Türen reindrücken.
  Mit Zitat antworten Zitat
StuRic

Registriert seit: 11. Jun 2013
8 Beiträge
 
#19

AW: dynamische Verwaltung von Objekten - Fahrstuhlsteuerung

  Alt 13. Jun 2013, 14:26
Hi,

Ich gehe wieder an den Anfang zurück und unterstelle dir, nicht wirklich zu wissen, was du konkret eigentlich machen möchtest.
In einem Lastenheft stehen die groben Anforderungen, die die Fahrstuhlsteuerung erfüllen muss. Alles Andere ist mir überlassen. Eine dieser Anforderungen ist, dass während die Türen geschlossen werden die Türen angehalten und wieder geöffnet werden können. Ich denke mal jeder kennt diesen Tür-Öffner im Fahrstuhl (z. B. so: <> ).

Hast du eine nahende Deadline? Ich würde mir erst einmal fest machen, was das Ding eigentlich konkret können soll, und WIE es das können soll. Beispielsweise einen hoch- und herunterfahrenden Aufzug zeichnen (ebenso wie öffnende und schließende Türen) - Auf Knopfdruck kann der Benutzer dann das Öffnen und Schließen veranlassen und bsp. einen laufenden Öffne/Schließevorgang abbrechen.
Nen paar Tage hab ich schon noch Zeit Der normale Öffne/Schließevorgang ist schon implementiert und im herkömmlichen Sinne funktionstüchtig. Ebenso die Benutzeroberfläche erstellt... Wenn ich hier nicht meinen kompletten Code poste, dann eher weil es für 90% der Leute vermutlich uninteressant ist. Verbessert mich, wenn ich mich irre


Hallo,

um erstmal keinen Thread zu brauchen, ging auch das starten eines Timers, für jede Kabine getrennt.
An sowas Ähnliches hatte ich auch schon gedacht. Danke fürs Beispiel. Wenn es nicht irgendwie "eleganter" geht, werde ich es wie von dir vorgeschlagen lösen.

Zwischen diesen Zuständen gibt es definiert Übergänge. Letztendlich musst du den Zustand abblinden und dieser kann genutzt werden um es z.B. in der Oberfläche anzuzeigen.
Du solltest auch auf eine strikte Trennung von Mechanik und Anzeige machen.
...
Also schau dir mal das Pattern Zustandmaschine an:
http://de.wikipedia.org/wiki/Zustand_(Entwurfsmuster)
Hm,...ich bin mir nicht sicher, ob ich dich richtig verstehe:
Ich möchte während der Zustandsänderung eingreifen. Daher helfen mir die vorgefertigten Zustände an dieser Stelle nicht weiter...oder meinst du ein Redefinieren der Zustände (z.B. Zwischenzustände)?
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#20

AW: dynamische Verwaltung von Objekten - Fahrstuhlsteuerung

  Alt 14. Jun 2013, 12:24
Du kannst doch jederzeit eingreifen.
Hauptsache der Übergang ist erlaubt. So ein Zwischenstand ist doch "Tür geht zu".
Dieser Zustand dauert ja an bis die Tür vollständig zu ist oder jemand die Lichtschranke unterbricht oder den Tür auf Knopf drückt.
Bei den letzten beiden geht der Zustand in "Tür geht auf" über. Beim letzten Zustand, wird sich sicherlich der Zustand der Kabine ändern in "Fährt hoch" oder "Fährt runter" vorausgesetzt jemand hat ein Stockwerk gedrückt oder in einen Stockwerk wurde der Lift gerufen.

Übergänge werden immer durch Ereignisse ausgelöst. Um dann den Übergang zu finden, ist die Ereignisart und Regeln erforderlich.

Kleines Beispiel vielleicht. Diese Türanimation über einen z.B. Thread läuft ja nur so lange bis die Tür geschlossen/offen ist. Also ist in einen Thread Logik für mach den Türmotor an für schließen und warte bis der Endschalter (Tür zu) erreicht ist. Dann Motor aus. Fertig -> Ereignis Tür ist zu.

Die Bewegungen erfolgen ja auch asynchron. Du weißt ja nicht wie lange die Tür öffnet oder schließt. Wenn die Tür fahrt durch Knopf abgebrochen wird, verkürzen sich ja die Zeiten abhängig von der Türposition.




Fahrstühle habe übrigens einen Plan, wie die Anforderungen abgefahren werden.
Es wird immer nun in eine Richtung gefahren bis es keine Anforderungen mehr gibt aus Stockwerken, welche in Fahrrichtung liegen.

In sehr hohen Gebäuden gibt es dann auch noch ein Fahrplan Optimierer bzw. mehrere Kabinen in einen Schacht.
Diese Kabinen teilen sich dann optimiert die Fahrten.

Allerdings muss der Fahrgast vorher an einen Terminal sein Stockwerk sagen und er bekommt dann den Fahrstuhl mitgeteilt.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz