gizno82 hat geschrieben:Sehe ich das richtig, das man mit endlichen Automaten eine Zapfsäule, viel mehr die Eingabe Möglichkeiten, die Zustände die eine Zapfsäule annehmen kann, z.b. Betriebsbereit, Außer Betrieb, leer, voll und als Ausgabe den Preis und die gezapfte Menge darstellen kann ?
Automaten haben eher die Aufgabe Prozessabläufe abzubilden.
Zum Beispiel:
- Start
- Setze Anzeige auf Null.
- Warten auf Kunde
- Zapfpistole abgenommen
- Füllen
- Zapfpistole eingehängt
- Warten auf Zahlung
- Ende
Hier geht man durch die Reihe der Zustände.
Zwischen Warten auf Zahlung könnte man beispielsweise eine Alternative anbieten in der Form "wenn noch nicht Geschäftsschluss, dann springe zu "Setze Anzeige auf Null".
gizno82 hat geschrieben:
1. Ich fange an zu zapfen es ändert sich der Tankinhalt der Zapfsäule, Die Literanzeige ändert sich und der Preis ändert sich,
mit jedem Liter den ich mehr Zapfe.
Wie legt man jetzt die Durchflussmenge fest ? (Wie schnell der Automat seinen Zustand wechselt)
Man braucht ja irgend wie ein Zeitraster oder ?
Die Zeit ist nicht gerastert.
Im Prinzip kannst Du bestenfalls etwas konstruieren wie folgt. Das wäre dann eine Art "Unterautomat" für den Status "Füllen".
- Beginne Füllung
- Wenn Tank Voll beende Füllen und warte auf Zustand "Zapfpistole eingehängt", sonst Zeige Display
- Zeige Display: Schreibe Abgabemenge und Preis auf Display und springe zurück zu vorherigem Zustand.
Wenn Du Zeitabhängige Daten hast, so hast Du bei Computern häufig Subsysteme, die nichts anderes tun, als abfragbar zu sein. Das kann eine PCI Karte sein, wo Dir beispielsweise die abgegebene Menge Kraftstoff übertragen wird, wann immer Du fragst oder auch die interne Uhr. Vielleicht fällt Dir auf, dass die Zapfsäulen etwa 2 mal pro Sekunde die Abgabe aktualisieren. Die Literzahl springt also entsprechend der Tankgeschwindkeit schneller oder langsamer. Auch hier ist das Programm quasi nicht im Fluss, sondern kommt etwa zweimal pro Sekunde am Zustand 'Aktualisiere Display' vorbei.
Bei 3D Grafik hast Du das Problem, dass Du nicht weißt, wie lange Du für die Berechnung eines Bildes brauchst. Damit Du bei einer Animation weißt, wie weit Du ein animiertes Objekt verschieben musst, musst Du also die interne Uhr fragen, wie spät es gerade ist. Entsprechend rechnest Du die Szene für die aktuelle Uhrzeit aus und zeichnest sie dann - egal wie lange es dauert, ob Du 1000 Bilder pro Sekunde zeichnest oder nur 20, das Objekt wird sich entsprechend der Bilderanzahl gleichmäßig über den Bildschirm bewegen. Trotzdem ist es ein deterministischer Automat, der so lange zwischen Uhrzeit abfragen und Bildzeichnen hin und her springt, bis Du auf das X oben rechts in der Fenstertitelleiste drückst. Auch hier gibt es keine gerasterte Zeit oder gerasterte Füllstände, sondern nur Wert abfragen, Reagieren, bis dieser Prozessablauf durch einen anderen Zustand ersetzt wird.