Jump to content

HaNNoveraNer

Mitglieder
  • Gesamte Inhalte

    1532
  • Benutzer seit

  • Letzter Besuch

Beiträge erstellt von HaNNoveraNer

  1. Ich habe jetzt dazu passend ein Fahrstraßenmodul gebaut.

    Neue Fahrstraßen erzeugt man durch kopieren der betroffenen Gleise in globale Listen: FS1, FS2, FS3 u.s.w. für alle Fahrstraßen.
    Wichtig ist, die Startsignale alle korrekt zu benennen: FSSig0001 bis FSSig9999. Das steuert den ganzen Ablauf!
    Nur ein Anforderungskontakt und ein Aufhebungskontakt werden benötigt. Die möglichen Fahrstraßen stehen im Signal.
    Aktivierte Fahrstraßen verriegeln sich gegenseitig.

    Ich werde das noch um unterschiedliche Routen für unterschiedliche Züge und um eine autom. Weichenschaltung erweitern.

    Hier die Testanlage: (Wenn Du den Wagen wegnimmst, fährt der Zug weiter. Natürlich vorher die Anlage starten!)
    (Bitte ein Gleis besetzen BEVOR der Zug den Anforderungskontakt überfahren hat, dann hält er wieder an)

    Bremsen.mbp

  2. Hi

    Ich habe in einem Modul eine Tabelle als Variable angelegt.
    Darin habe ich mehrere Gleise gespeichert.

    Jetzt möchte ich gerne sehen, welche Gleise das waren.
    Daher möchte ich sie wieder alle auf einmal selektieren lassen.

    Wie ist das möglich?

    Wenn man in Lua Schlagwörter zuweisen könnte, dann könnte ich alle Gleise beim Programmstart mit dem Tabellennamen versehen.
    Damit wären sie zu filtern für die Selektion. Geht aber wohl nicht.

  3. Du könntest abfragen, ob beim Zug das Schlagwort vehicle.variables["Güterzug"] existiert.  ~=nil
    Oder eben alle anderen Schlagwörter.

    Ich programmiere auch gerade so eine Logik.
    Gehe aber etwas anders vor, so daß der Zug am Einfahrsignal eine oder mehrere Fahrstraßen über einen Endlostimer "anfordert" bis sie frei ist.
    Der weiß genau wer er ist und wohin er will/darf.
     

  4. Für weitere Funktionen in dem Fahrstrassenmodul, daß ich gerade baue, benötige ich folgendes:

    s="FSSig0001"

    local s2=$(s).variables["fahrstrassen"]

    Das gibt aber einen Fehler. Wie kann ich eine Variable im Objekt ansprechen, wenn ich den Objektnamen nur als string habe?

    P.S. Habs gerade gefunden:

    local signal=layout:getEntityByName(s)
    local s2=signal.variables["fahrstrassen"]

  5. Hi

    Gibt es eine Möglichkeit Objekte mit ihren Schlagwörtern und Variablen in andere Anlagen zu übernehmen?
    Zum Beispiel einen Gleiskontakt mit 12 Schlagwörtern und 44 Variablen :-)
    Exportieren als .mbe funktioniert mit dem nicht.

    Das man andere Anlagen komplett importieren kann, hab ich ausprobiert.
    Aber auch einzelne Objekte, Ereignisse oder Lua Scripts?

    Grund: Ich habe mehrere Dinge in kleinen Beispielanlagen entwickelt und möchte diese nun in vorhandene andere Anlagen übernehmen.

  6. Jaja, aber Du hast die Objekte MANUELL umbenannt:

    ("Gleis 1"), $("Gleis 2"), $("Gleis 3")

    Normal heißen die Gleise nach dem Einsetzen alle gleich.
    Dann würde das stehen ("5201","5201","5201"). Das wäre unübersichtlich.

    Meine Frage bezog sich aber auf die direkte Abfrage EINES Gleises, ohne umbenennen mit dem Lua Befehl.

     

  7. Hallo

    Ich suche eine Möglichkeit, ein unter EREIGNISSE stehendes Script EINMALIG auszuführen, ohne es einem Ereignis zuzufügen.
    Es geht nur um das einmalige initialisieren bestimmter Objekte der Anlage.
    Wie würde man das realisieren?
    Wozu sind diese Scripte? Wann werden sie ausgeführt?

    Gruß
    Thomas

  8. Ich habe das mit den Gleisen noch nicht ganz kapiert.
    Die haben ja alle den gleichen Namen "1610" (Bezeichnug des Herstellers) oder so.
    Wie kann man die denn unterscheiden?

    Und kann man auch erkennen, ob ein Gleis eine Weiche ist?
    Und kann man die Weiche irgendwie flankenschützen/sperren?

    Achja: Kann ich eine Aktion in einer Endlosschleife aufrufen, bis ein bestimmtes Ereignis eintritt?
    Gibt es da programmintern einen Scheduler, der die Prozessorzeiten für die Aktionen verwaltet?

    Wenn ich mit Fragen zu viel nerve, einfach sagen! ;-)

  9. Vorher habe ich das Modul weiter optimiert, so daß es jetzt für beliebige Kontakte und Signale nur EIN Modul gibt.
    Das MBS scheint ja dann verschiedene Instanzen für die Variablen und Verzögerungen anzulegen. Sehr schön.

    Gesteuert wird es über Schlagwörter "Brems, Stop, Bremssignal".
    Die Variablen am Bremskontakt, Stopkontakt und am Signal parametrieren das Ganze. (Zielgeschwindigkeit, Abstand, Signalname des zugehörenden Bremssignals)
    Die original Deceleration wird auch wieder hergestellt.
    Daher ist keine Codeänderung in LUA mehr nötig.
    Bremsen.mbp

  10. Das kommt von Timba.
    Ich habe versucht aus seinen, Deinen und meinen Ideen das Beste zusammenzufügen.
    Ich baue aber noch ein paar Variablen ein für Signalname, Zugname, Beschleunigungsreset, ABstand u.s.w.
    Dann braucht man das nur an einer Stelle zu editieren.
    Außerdem vielleicht ein Flag, das bewirkt, daß der Abstand auf gerader Strecke automatisch berechnet wird.

    Und irgendwie sollte noch eine Belegtmeldung realisiert werden, so daß vorhergehende Blöcke erkennen können, ob das Zielgleis frei ist.

  11. Durch den Bremsvorgang legt er  0.5 * a * t^2 weniger Strecke zurück, als ohne den Bremsvorgang.
    Das muß man berücksichtigen, daher der Faktor 0.5

    Hier die Anlage dazu.
    Ich habe dafür eine Tutorial Anlage umgebaut, um zu zeigen wie kompliziert es früher war und wie einfach es mit dem Kontakt und LUA geht. :)

    P.S. Signal auf HALT lassen, Zug manuell Geschwindigkeit geben. Nur das automatische Bremsen ist realisiert.

    Bremsen.mbp

  12. vor 9 Stunden schrieb Goetz:

    Ich experimentiere auch gerade damit und stelle fest, dass ich das Ergebnis von Speed * Speed / Decel halbieren muss, um den tatsächlichen Bremsweg zu erhalten.
    (Maßstab ist auch bei mir 1:1 um die Sache nicht unnötig kompliziert zu machen)

    Alle Achtung übrigens, Thomas, wie schnell du die Sache mit dem "deferred call" durchschaut hast. (y)

    Hallo Götz

    Ich habe meinen Code oben angepaßt.
    Funktioniert jetzt einwandfrei mit nur EINEM Kontakt.
    Es lag nur an dem Faktor 0,5 für den Bremsweg. Das kann ich mir nicht erklären. Woher kommt der?

    Jetzt müßte man nur noch automatisch den Abstand zwischen dem Kontakt und dem Signal berechnen können.
    Also mit LUA die Gleislänge dazwischen auslesen können.

    Nochmal was anderes:
    WIe kann ich ein bißchen debuggen?
    Also print(irgendwas) oder Variablen anzeigern. Geht das?

    Gruß
    Thomas

  13. @ Goetz: Ja, so hatte ich mir das gedacht.

    Bei der Anlage habe ich 1:1 eingetragen.

    Gebaut wurde sie mal in H0.

    if not deferredCall then
    
      if $("Signal2").state == 0 then
    
        vehicle.targetSpeed = vehicle.currentSpeed
    
        local Speed = vehicle.currentSpeed / 3.6       -- [m/s aus km/h]
        local Strecke = 60                             -- [m]
    
        local Decel = vehicle.deceleration
    
        Bremsweg = ((Speed ^ 2)  / Decel ) * 0.5  -- warum halbieren?
    
        if Bremsweg > Strecke then
          Decel = ((Speed ^ 2) / Strecke)  * 0.5  -- warum halbieren?
          vehicle.deceleration = Decel
          vehicle.targetSpeed = 0
        else
          Delay = (Strecke - Bremsweg) / Speed
          defer(Delay, "Verzögerung")
        end
      end
    
    elseif deferredCall == "Verzögerung" then
    
      if $("Signal2").state == 0 then
        vehicle.targetSpeed = 0
      end
    
    end

     

  14. Hi Timba

    Sieht gut aus.

    Falls die Bremskraft geändert wird, würde ich aber den gemerkten Wert wieder zurückschreiben.
    Ist ja nur im Notfall nötig.

    Und wie positionierst Du den 2. Kontakt, so daß er garantiert immer besetzt wird?
    Wenn er nicht ganz erreicht wird, würde er ja sonst beim Anfahren nochmal die Geschw. auf 0 setzen.
    Die meisten Konstanten und den Faktor in Deinem Code habe ich auch noch nicht durchschaut :-)

     

  15. Hi Eric

    I am shure that works fine.
    But that's not my way, because you are setting the deceleration to a value depending on the train speed and the distance.

    The deceleration is a fixed value depending on the mass of the train.
    My way is, that the train speed is not changing by passing the contact.

    Each train should decelerate at his own position and with its parametered deceleration.

    Thomas

  16. Interssanter Thread.
    Aber wie macht man es nun am Besten, daß die Lok sicher und möglichst realistisch auf den Punkt stehen bleibt?
    Leider kenne ich das MBS noch nicht gut genug, und weiß nicht, ob und wie man die benötigten Werte ermitteln kann.
    Vielleicht könnt ihr mir helfen?

    Annahmen:
    Nur ein Gleiskontakt soll nötig sein.
    Züge mit unterschiedlichen Geschw. kommen an einem Gleiskontakt an.
    Sollen nicht gleich bremsen sondern erst nach einer gewissen Zeit.
    Sollen dann linear runterbremsen auf 0.

    Was braucht man in LUA?
    Geschwindigkeit des Zugs. (Maßstab?)
    Eingestellte Beschleunigung (negativ) des Zugs.
    Abstand des Kontakts vom Haltepunkt (Irgendein Modell wie Signal oder was Unsichtbares) . (Maßstab?)
    Timer starten bei Kontakauslösung (nach der Berechnung)
    Einfluß von Steigung und Gefälle? Eventuell mit Faktortabelle?

    Was muß man errechnen?
    Bremsweg des Zugs bis auf 0, abhängig von der eingestellten negativen Beschleunigung.
    Zeit, nach der die Zuggeschw. (tragetSpeed) über einen Timer (geht das, genau genug?) auf 0 gesetzt wird, um den Bremsweg zu erreichen.

    Würde das funktionieren?
    Kann man die Werte ermitteln?
     

    Gruß
    Thomas


     


     

     

     

     

×
×
  • Neu erstellen...