Wie modelliere ich eine Straßenampelsteuerung?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 169 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    Vielleicht noch eine kurze Anmerkung zu meinem 'ControlCode'.

    In der Praxis wird eher mit den ENUM-Flags gearbeitet, vor allem wenn es Remoteanwendungen sind.

    Für mein Projekt habe ich das mit dem ControlCode umgesetzt. Es entspricht im weiteren Sinne genau dem was mit den
    ENUM-Flags auch gemacht wird, nur ist es hier schon aufgelöst, und man sieht sofort wie die Zuordnungen sind.

    Freundliche Grüsse

    exc-jdbi

    exc-jdbi schrieb:

    ...'ControlCode'.
    In der Praxis wird eher mit den ENUM-Flags gearbeitet
    naja - ich hab dafür zB Datensätze genommen.
    Dann kann man da eine Oberfläche für bauen, wo man 'ControlCode's zufügen und wegnehmen kann.
    Sodass man wirklich Beampelungen beliebiger Strassen-Situationen aufbauen und verwalten kann.

    Zur Verständnis-Info zum Code: Etwas unglücklich finde ich die Bezeichnung der Methode Private Sub Start() ich hab gesucht und gesucht, wo denn das wieder gestoppt wird.
    Tatsächlich startet die Methode aber garnichts, sondern schaltet das Ampel-system um einen Schritt weiter (StepNext oder so).
    Nee als erweiterbar habe ich mein Programm nicht gebaut. Das habe ich nur kurz runter geschrieben, nachdem ich die Beiträge hier gelesen habe. Das Programm ist natürlich rudimentär und in keiner Weise irgendwie flexible für Erweiterungen. Und die Namensgebungen sind zum Teil schon unglücklich.

    (New)Start in dem Sinne, dass der Ablauf gestartet wird. Der hört natürlich nicht mehr auf, muss er ja nicht, denn dafür gibt's den Button Finish. Die unteren 3 Tasten können jederzeit angeklickt werden, egal ob das Programm am laufen ist oder nicht.

    exc-jdbi schrieb:

    (New)Start in dem Sinne,... gibt's den Button Finish.
    Genau das meinte ich nicht.
    Ich meinte das:

    VB.NET-Quellcode

    1. Private Sub SLTimer_Tick(sender As Object, e As EventArgs) Handles SLTimer.Tick
    2. Me.Start()
    3. End Sub
    4. Private Sub Start()
    5. Me.Index += 1
    6. If Me.Index = Me.CCode.Length - 2 Then Me.Index = 0
    7. For j = 0 To Me.StopLights.Count - 1
    8. If Me.StopLights(j).GetType = GetType(AutoStopLight) Then
    9. DirectCast(Me.StopLights(j), AutoStopLight).ControlCodes = Me.CCode(Me.Index)(j)
    10. End If
    11. If Me.StopLights(j).GetType = GetType(PedestrianLight) Then
    12. DirectCast(Me.StopLights(j), PedestrianLight).ControlCodes = Me.CCode(Me.Index)(j)
    13. End If
    14. Next
    15. End Sub
    Wie gesagt: Die Sub Start startet nichts, sondern schaltet die Signalierung aller Ampeln eins weiter. Es ist also eher eine Timer_Tick-Methode (wird ja auch von da aufgerufen).
    Da darf man sich vom Namen nicht verwirren lassen - das wollte ich sagn.
    Bitte nochmal um eine Erklärung.
    Warum oft diese Unterschiede bei Class?

    VB.NET-Quellcode

    1. Public Class main
    2. Dim Zimmer As New Haus
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. 'tue etwas
    5. Dim Ort As String = CStr(Haus.Ampelsignal.Rot) ' <== warum hier Class HAUS??????
    6. Zimmer.Zeit = (Zimmer.Zeit + 1) Mod 2 ' <========= warum hier Class ZIMMER?????
    7. End Sub
    8. End Class
    9. Public Class Haus
    10. Public Enum Ampelsignal : Rot : Grün : End Enum
    11. Public Zeit As Integer = 0
    12. ' tue etwas
    13. End Class
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    @Amelie Der Compiler muss wissen, in welcher Klasse das Enum steht. Sonst findet er es nicht.
    Nicht Class ZIMMER, sondern Instanz der Klasse Haus, die heißt bei Dir Zimmer.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @ErfinderDesRades

    Hat schon was.

    Durch Drücken des Button wird der Timer aktiviert. Nachdem der Scope vom Click-Event verlassen wird, macht der Timer seine Arbeit. (Erst dann) Gestartet wird also nur der Timer. Die Methode Start (wirklich unglücklich benannt) sorgt dafür, dass alle Ampeln Ihren Code bekommen. Es ist wie du gesagt hast ein ständiges Iterieren durch das (der die das ich kann es mir nie merken) Array mit den Codes für die Ampeln.

    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    Dazu hätte ich gleich noch eine Frage, gehört zwar nicht zum Thema hier.

    Wie nennt man so etwas?

    Der Timer kann seine Arbeit erst anfangen, sobald der Scope vom Click-Event verlassen worden ist. Vorher macht der Timer gar nichts.

    Das Phänomen ist ja überall ein bisschen bekannt. Zum Beispiel bei Flüssigkeiten (Druckflüssigkeiten) kann erst Arbeit verrichtet werden, wenn der Statische Druckaufbau erreicht worden ist. Genau so in der Eletrotechnik. Ohne einen Widerstand, würde eine Lampe nie zum leuchten gebracht werden.

    Gibt's einen bestimmte Benamung dafür beim Programmieren? Also das Wort "Threadwechsel" reicht mir den nicht :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()