guenter.strickmann Geschrieben Dienstag um 08:36 Uhr Geschrieben Dienstag um 08:36 Uhr Ich baue gerne Kopfbahnhöfe. Bisher habe ich dazu in den verschiedenen Gleiskontakten direkt Variable deklariert. Das funktioniert auch soweit gut. Jetzt habe ich mir gedacht, statt überall Variablen abzulegen, für jedes Gleis eine Tabelle anzulegen und alle notwendigen Infos dort direkt abzulegen. Auch das funktioniert soweit. Aber ich trage dann für jedes Gleis im Kontakt BK-Kopfende immer noch einen Wust an Befehlen ein, die sich aber nur in dem Ansprechen der jeweiligen Tabelle unterscheiden. Also war mein Gedanke, hier ein benutzdefiniertes Ereignis zu kreieren und mit der Übergabe von zwei Parametern müsste man eigentlich dann alles hinbekommen. In Hauptbahnhof/BK-Kopfende habe ich mal beides untereinander eingetragen. Geht mein Gedankengang überhaupt, wenn ja wie muss ich im Ereignis "Gleis-1" die Parameter übergeben. Ich habe schon versucht, diese als Text zu deklarieren, aber so geht es auch nicht. Die Krux ist, dass ich in Gleis-1 die Lok auf dem Kontakt BK-Kopfende-1 ansprechen muss, aber da fehlt mir die direkte Verbindung. Testanlage 5a.mbp
guenter.strickmann Geschrieben Dienstag um 11:13 Uhr Autor Geschrieben Dienstag um 11:13 Uhr Hab es jetzt selbst hinbekommen, hatte einen Parameter falsch übergeben.
AndreasWB Geschrieben Dienstag um 15:31 Uhr Geschrieben Dienstag um 15:31 Uhr Hallo @guenter.strickmann, ich hatte unlängst einen Beitrag zur Ablaufsteuerung in einem Kopfbahnhof hier eingestellt. Der gesamte im Video gezeigte Ablauf ist voll automatisch. Basis dafür ist u. a. eine "Servicetabelle", deren Struktur die angehängte Abbildung zeigt. Vielleicht kann dies für Dich als weitere Anregung dienen (auch wenn das mit BW und Drehscheibe natürlich etwas antiquiert ist). Gruß Andreas
guenter.strickmann Geschrieben Dienstag um 17:28 Uhr Autor Geschrieben Dienstag um 17:28 Uhr (bearbeitet) . Jetzt habe ich doch noch ein Problem. Ich habe hier Fahrzeug als Objekt und Tab als Tabelle deklariert. Dann rufe ich hier das Ereignis auf. Das Fahrzeug kann ich als Auslöser deklarieren und übergeben. Aber für Tab kann ich nicht die richtige Tabelle übergeben, die ich möchte. Wenn ixh auf Bearbeiten klicke, kann ich nur eine neue Tabelle anlegen, ich möchte aber eine bereits bestehende Tabelle vorgeben. Wie kriege ich das hin? Das ganze Problem ist im Event BK-Kopfende sichtbar. 5a.mbp Bearbeitet Dienstag um 17:29 Uhr von guenter.strickmann
Goetz Geschrieben Dienstag um 17:37 Uhr Geschrieben Dienstag um 17:37 Uhr vor 8 Minuten schrieb guenter.strickmann: ich möchte aber eine bereits bestehende Tabelle vorgeben. Wähle über das Zahnrad "Variable", dann kannst du die Tabelle aus deiner Modulvariablen angeben.
guenter.strickmann Geschrieben Dienstag um 18:25 Uhr Autor Geschrieben Dienstag um 18:25 Uhr So gehts nicht. Tab als Variable deklariere, kann ich zwar Tabelle-1 dort über die Modul-Variablenfunktion eintragen. Die Funktion Gleis-1 wird auch ausgeführt, aber die Daten werden nicht in Tabelle-1 abgelegt.
Goetz Geschrieben Dienstag um 18:39 Uhr Geschrieben Dienstag um 18:39 Uhr vor 6 Minuten schrieb guenter.strickmann: aber die Daten werden nicht in Tabelle-1 abgelegt. Ich vermute, dass Tab im benutzerdefinierten Ereignis eine lokale Variable ist. Du änderst also nur eine Kopie der Tabelle. Versuch mal bitte, als vierten Schritt der Modulvariablen Tabelle-1 die geänderte Tabelle Tab zuzuweisen.
guenter.strickmann Geschrieben Dienstag um 19:42 Uhr Autor Geschrieben Dienstag um 19:42 Uhr Da muss ich mal schauen, wie ich Tabelle-1 mit Tab überschreiben kann. Weiß auch nicht, ob das der richtige Weg wäre. Aber ich habe mal ausprobiert, was in der Funktion Gleis-1 überhaupt ankommt. Dazu habe ich die auszulesenden Parameter in Textfelder geschrieben. Interessant ist, dass die Eigenschaft der Lok, als "kein Wendezug" und "E-Lok" übernommen werden, aber die Lok "2" selber wird nicht ausgelesen. Nochmal, warum will ich das so machen? So muss ich für jedes Gleis1 bis Gleis-5 eine eigene Funktion schreiben und den richtigen Tabellennamen direkt reinschreiben. Dann klappt das auch hervorragend. Wenn ich aber einen Platzhalter für die Tabelle vergeben könnte, bräuchte ich nur eine Funktion Gleis-x. Vielleicht geht es auch nicht, aber eigentlich sollte so ein Platzhalter doch möglich sein. 5a-neu1.mbp
Goetz Geschrieben Dienstag um 19:48 Uhr Geschrieben Dienstag um 19:48 Uhr (bearbeitet) vor 43 Minuten schrieb guenter.strickmann: eigentlich sollte so ein Platzhalter doch möglich sein. Eigentlich ja. Das Problem ist hier das Zusammenspiel von Lua auf der einen und Studio auf der anderen Seite. Dadurch verhalten sich Dinge manchmal etwas anders. Eine Tabelle in einer Modulvariablen ist etwas anderes als eine Lua Tabelle. Deshalb wird nicht der Bezug zur Tabelle an das benutzerdefinierte Ereignis übergeben, sondern eine Kopie der Tabelle. Wenn du anstelle der Tabelle selbst ihren Namen (als String) übergibst, kannst du ihn im benutzerdefinierten Ereignis verwenden, um die Tabelle in der Modulvariablen anzusprechen. Da finde ich aber nur in Lua eine geeignete Schreibweise. Ich habe die Variante 5g (für Götz) genannt: 5g.mbp Bearbeitet Dienstag um 20:26 Uhr von Goetz nach Test korrigiert
AndreasWB Geschrieben Dienstag um 21:21 Uhr Geschrieben Dienstag um 21:21 Uhr (bearbeitet) Hallo @guenter.strickmann, im Prinzip ist Dein Gedanke und auch Deine Strategie OK. Allerdings finde ich in Deiner letzten Anlage keine Tabelle "Tab". Ich habe auf die Schnelle eine vereinfachte Ausführung eines Kopfbahnhofs gebastelt. Anlage siehe Anhang. Alle Tabellenfelder, die Du schreiben willst, müssen vorher vorhanden sein. Ist bei Dir, soweit ich gesehen habe, auch der Fall. Nun zur Tabelle: Es ist "nur" eine Tabelle für den gesamten Bahnhof. Jeder End-Kontakt kennt die Nummer seines Gleises. Ich habe pro Gleis nur zwei Variable (Tabellenspalten) definiert. Für jedes Gleis gibt es in der Tabelle jeweils eine Zeile (soweit folge ich in der Beschreibung der bekannten Tabellenart (Datenbanken, Excel, usw.) Das ist in MBS etwas anders (warum auch immer?) Hier muß man eine Liste der Tabellenzeilen erstellen. Daher ist die "Tabelle" zunächst vom Typ Liste (Liste der Tabellen-Zeilen). In jedem Listeneintrag (Zeile) definiert man die Spalten (In MBS "Tabelle" genannt). Und genau das spiegelt sich dann auch im Aufbau dieser Modul-Variablen wider. Für jeden Listeneintrag muß ich also ein Element vom Typ "Tabelle" definieren. Hier fällt auf, daß man keinen Namen vergeben kann, sondern die Namen dann innerhalt der Tabellen(-zeile) die Spaltennamen sind. Wie spricht man das dann in der EV an? Etwas verwirrend im Zusammenbau, aber final funktioniert es dann. Und die Logik mit "unserem" Tabellen-Verständnis stimmt ja auch in der Schreibweise: (Tabellenname)[Zeilenindex][Spaltenindex]. Im Anhang findest Du auch die Anlage. Beim Einfahren in einem Gleis trägt sich die Lok ein; beim Verlassen löscht sie wieder ihren Eintrag. Gruß Andreas Test Tabelle schreiben.mbp Bearbeitet Dienstag um 21:25 Uhr von AndreasWB
Goetz Geschrieben Dienstag um 21:37 Uhr Geschrieben Dienstag um 21:37 Uhr (bearbeitet) Das ist in der Tat der klügere Ansatz, @AndreasWB! Eine Liste mit 5 Tabellen für die fünf Gleise. Dann muss man nur die Platznummer 1-5 an das benutzerdefinierte Ereignis übergeben, um in dieser Liste die jeweils passende Tabelle anzusprechen. Und das geht auch in der grafischen EV. 5g mit Liste.mbp Bearbeitet Dienstag um 21:46 Uhr von Goetz Beispielanlage angehängt
guenter.strickmann Geschrieben Mittwoch um 06:50 Uhr Autor Geschrieben Mittwoch um 06:50 Uhr vor 9 Stunden schrieb Goetz: Das ist in der Tat der klügere Ansatz, AndreasWB! Eine Liste mit 5 Tabellen für die fünf Gleise. Dann muss man nur die Platznummer 1-5 an das benutzerdefinierte Ereignis übergeben, um in dieser Liste die jeweils passende Tabelle anzusprechen. Und das geht auch in der grafischen EV. 5g mit Liste.mbp 231.81 kB · 3 downloads Vielen Dank, so gehts. Ich habe es so verstanden, dass es im Prinzip wieder auf eine direkte Ansprache hinausläuft. Die Liste Tabellen wird direkt angesprochen, über die Indizes habe ich dann den Zugriff auf einzelnen Gleistabellen.
guenter.strickmann Geschrieben Mittwoch um 09:09 Uhr Autor Geschrieben Mittwoch um 09:09 Uhr Ich habe noch eine abschließende Frage zum Thema. Grundsätzlich sollte man ja redundante Speicherung von Variablen vermeiden, um mögliche Fehlerquellen klein zu halten. Wenn ich die Einzelspeicherung jetzt auf die Spitze treibe, habe ich oft den Effekt, dass ich nicht direkt auf eine Variable (Gleiskontakt.Loktyp), sondern nur indirekt über den Tabellenzugriff mit Verschachtelungen erreiche. Wird das Programm dadurch langsamer?
Goetz Geschrieben Mittwoch um 09:43 Uhr Geschrieben Mittwoch um 09:43 Uhr vor 27 Minuten schrieb guenter.strickmann: Wird das Programm dadurch langsamer? Nein, das nicht. Es wird nur für dich umständlicher. Deshalb wäre interessant, wo du den Effekt hast und ob der direkte Zugriff nicht doch möglich ist. Jedes Objekt hat Eigenschaften. Objektvariablen sind eine Erweiterung dieser Eigenschaften. Deshalb finde ich die persönlich besser als eine zentrale Tabelle. Weil man dann das betreffende Objekt untersuchen kann um zu erfahren, ob es bestimmte Bedingungen erfüllt. Bei dir sehe ich ein ständiges Hin und Her zwischen mehreren Speicherorten. Das scheint mir unnötig kompliziert. Viele Grüße Götz
AndreasWB Geschrieben Mittwoch um 13:08 Uhr Geschrieben Mittwoch um 13:08 Uhr Der eindeutige Rat vom Softwarearchitekten: Redundanzen vermeiden - sonst kommt es zu Anomalien. Gruß Andreas
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen.
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden