Neo Geschrieben 15. April 2020 Geschrieben 15. April 2020 Hallo Christian, der Einsatz von TcpListener ist hier nicht richtig. In dem du einen TcpListener erstellst, startest du einen eigenen TCP-Server und wartest mit AcceptTcpClient auf eingehende Verbindungen. Darauf kannst du aber endlos warten, weil das Studio sich nicht von selber mit deinem Listener verbindet, das Studio ist der Server und du musst die Verbindung dazu aufbauen. Für das Empfangen von Ereignissen musst du dich wie beim Sendern mit einem TcpClient zuerst verbinden und dann statt stream.Write mit stream.ReadLine auf eingehende Ereignisse blockierend warten. Viele Grüße, Neo
gmd Geschrieben 15. April 2020 Autor Geschrieben 15. April 2020 (bearbeitet) Guter catch .. Das MBS sendet einfach und das ist eigentlich auch gut so, ist aber nicht offensichtlich aus der dokumentation. Accept ist nur erforderlich wenn du handshake mit verschiedenen tcp hosts machen willst. In diesem fall ist das nicht noetig. gruss gmd OOPS das hat sich ueberschnitten. Bearbeitet 15. April 2020 von gmd
Eisbär Geschrieben 15. April 2020 Geschrieben 15. April 2020 Hallo Neo. Danke für Hilfe. Ich hatte das auch so verstanden, dass das Modellbahnstudio auf den angegebenen Port Nachrichten sendet, die dann von einem Listener empfangen werden. Nun ist das aber ja aufgeklärt und ich freue mich auf die Möglichkeiten, die mir diese Schnittstelle ermöglicht. Wenn ich einen Vorschlag machen dürfte, möchte ich anregen, dass in dem Wikiartikel "Steuerung über externe Schnittstelle" auf ein weiteres PDF verlinkt wird, in dem Code-Schnipsel enthalten sind. Das würde den Einstieg in das Thema erleichtern. VG Christian
Eisbär Geschrieben 15. April 2020 Geschrieben 15. April 2020 Danke für die Hilfe natürlich. Was für ein Deutsch! :-)
Eisbär Geschrieben 15. April 2020 Geschrieben 15. April 2020 vor 15 Minuten schrieb gmd: Guter catch .. Das MBS sendet einfach und das ist eigentlich auch gut so, ist aber nicht offensichtlich aus der dokumentation. Accept ist nur erforderlich wenn du handshake mit verschiedenen tcp hosts machen willst. In diesem fall ist das nicht noetig. gruss gmd OOPS das hat sich ueberschnitten. Auch Dir vielen Dank. Und es wäre ein guter Catch, wenn ich die Texte nicht vertauscht hätte...
gmd Geschrieben 15. April 2020 Autor Geschrieben 15. April 2020 no worries, wie wir hier sagen take care mate
Eisbär Geschrieben 15. April 2020 Geschrieben 15. April 2020 I already thought that you might probably be an English native speaker. So where are from actually?
gmd Geschrieben 15. April 2020 Autor Geschrieben 15. April 2020 Australia, aber ich bin deutsch geboren, jetzt Australian national, living in Perth. gruss Gmd
Eisbär Geschrieben 15. April 2020 Geschrieben 15. April 2020 vor 1 Minute schrieb gmd: Australia, aber ich bin deutsch geboren, jetzt Australian national, living in Perth. gruss Gmd "T Traveling in a fried-out Kombi, on a hippie trail, head full of zombie ..." Bin Fan von "Men at Work" wie Du siehst. Schöne Grüße an die Kangurus!
Eisbär Geschrieben 15. April 2020 Geschrieben 15. April 2020 Nun klappt es! Danke an alle, die geholgen haben!
Eisbär Geschrieben 15. April 2020 Geschrieben 15. April 2020 vor 2 Stunden schrieb gmd: Guter catch .. Das MBS sendet einfach und das ist eigentlich auch gut so, ist aber nicht offensichtlich aus der dokumentation. Accept ist nur erforderlich wenn du handshake mit verschiedenen tcp hosts machen willst. In diesem fall ist das nicht noetig. gruss gmd OOPS das hat sich ueberschnitten. Hi gmd. Kannst Du mir bitte auch mal Deine Methode zum Senden der Kommandos schicken? Meine Funktioniert zwar, ich fürchte aber beim Senden von Gruppen könnte die Probleme bereiten. Danke vorab. VG Christian
gmd Geschrieben 15. April 2020 Autor Geschrieben 15. April 2020 ich verwende keine gruppenkommandos, die brauche ich derzeit nicht. public static void initCommandWriter() { try { commandClient = new TcpClient("127.0.0.1", 31285); commandClient.NoDelay = true; commandStream = commandClient.GetStream(); } catch (SocketException e) { Console.WriteLine("\nMessage ---\n{0}", e.Message); } } public static string sendMessage(string message) { try { Byte[] data = System.Text.Encoding.Default.GetBytes(message); if (commandStream != null && commandClient.Connected) { String responseData = String.Empty; String result = String.Empty; // String fullResponse = String.Empty; bool hasData = false; commandStream.Write(data, 0, data.Length); Thread.Sleep(50); int retry = 10; data = new Byte[256]; while (retry > 0) { if (commandStream.DataAvailable) { bool folgeLesen = false; while (commandStream.DataAvailable) { Int32 bytes = commandStream.Read(data, 0, data.Length); responseData = System.Text.Encoding.Default.GetString(data, 0, bytes); responseData = responseData.TrimEnd('\r', '\n'); // remove the reply code string[] words = responseData.Split(';'); if (words[0] == "0" || words.Length == 1 && !folgeLesen) // wir hatten eine antwort aber keine daten { if (hasData) return result; else return null; } else { if (words.Length < 3 && !folgeLesen) { if (hasData) return result; else return "1;"+words[1]; // for now just the first parameter } else { hasData = true; result = String.Concat(result, responseData); folgeLesen = true; } } } if (hasData) return result; else return null; } else { retry -= 1; Thread.Sleep(100); } } } } catch (Exception e) { Debug.WriteLine("No MBS" + e.Message); } Debug.WriteLine("No answer from MBS"); return null; }
gmd Geschrieben 16. April 2020 Autor Geschrieben 16. April 2020 Hallo, Der naechste schritt ist fertig. Die blockdefinition erfolgt nach der blockerkennung. Das war der letzte video. Dieser zeigt das aber nochmals. In der wartezeit mache ich alle moeglichen abfragen an das MBS, das dauer derzeit etwas. Alle parameter fuer den block werden erfasst, zuglaengen, nutzlaenget etc. berechnet. Als block sehe ich nicht nur eine einfache strecke. Ich erlaube eine einfahrt und abzweig. Das hat viele gruende und macht die spaetere verwaltung fuer einfachere strecken leichter. Weichenstrassen werden separat unterstuetzt und das wird aehnlich aussehen wie die blockerkennung. Den fahrzeugkatalog habe ich fertig. Dann kommen die routen und zuletzt die fahrplaene mit den aktivitateten. Wenn das alles steht kann ich an diie erweiterung meine lua scripts denken, dann habe ich alle wichtigen parameter fuer die schiene. Bin jetzt erst mal mit weiterer dokumentation beschaeftigt und ausgiebigem testen der vielen moeglichen fehlerzustaende in den konfigurationen. Ich habe schon einige pruefungen implementiert, die es dann verhindern sollen dass man falsche definitionen machen kann. Aber alles zu seiner zeit. http://teutanic.com/blockDefinition.mp4 regards Gmd
Eisbär Geschrieben 16. April 2020 Geschrieben 16. April 2020 vor 18 Minuten schrieb gmd: Wenn das alles steht kann ich an diie erweiterung meine lua scripts denken Hi gmd. LUA? Wozu brauchst Du die denn noch, die Schnittstelle ermöglicht doch eigentlich alles von außen zu realisieren. Wo liegt mein Denkfehler? VG Christian
gmd Geschrieben 16. April 2020 Autor Geschrieben 16. April 2020 Christian, im prinzip ist das richtig, aber es gibt zur zeit dinge die nicht so ohne weiteres gehen. Die schnittstelle ist aelter als die neue EV. Neo wird da etwas tun denke ich, aber das ist mir ziemlich egal im augenlick. Ich habe einfach einen anderen ansatz. Meine blockdemo anlage zeigt das. Ich habe generisch LUA scripte die bestimmte funktionen ausfuehren. Die werden einfach nur parametrisiert durch definitionstabellen. Am ende kann die anlage one meine steuerung laufen. Sie ist im grunde nur der generator fuer parametertabellen und verwaltet die komponenten einer anlage. Ausserdem werde ich ein gleisbildstellpult erzeugen mit einem wesentlich effizienteren editor als Rocrail. Das ist eine separate einheit die auch auf den beschreibungsdaten aufbaut und automatisch mit der anlage verbunden wird. Theoretisch kann man die LUA scripts ohne mein programm verwenden ist aber zuviel definitionsaufwand bei schon mittleren anlagen. Das ganze ist so etwas wie ein baukasten. LUA liefert die grundbausteine und die verkuepfungen und mein programm liefert die gesamten parameter tabellen. Wahrscheinlich werde ich auch ein paar aktive steuerelemente haben aber die werde ich auch in einem separaten programm anordnen. Ich trenne zwischen definitionsebene und ausfuehrungsebene. Es ist ein grosses problem in Rocrail, dass das nicht klar getrennt ist, abgesehen von der verwirrenden oberflaeche, zumindest fuer mich. Ich habe einfach nicht die geduld das stundenlang auszuprobieren. Da nutze ich lieber die zeit und schreibe mein eigenes programm. Eine weitere ueberlegung ist, dass Neo wahrscheinlich immer etwas mehr fuer die interne EV tun wird als fuer die externe schnittstelle auch wenn man das so anlegen kann dass eben alles nach draussen gelegt werden kann. Es gibt einige punkte die in LUA schneller zu erledigen sind als ueber die schnittstelle. Zumindest sind das die bisherigen gedanken, allerdings werde ich nochmals reflektieren wenn ich erst mal alle grunddaten habe und dann anfange komplexere ablaeufe zu implementieren. Vielleicht gibt es eine mischung von beidem. In jedem fall brauche ich erst mal komplette konfigurations informationen und die muessen einfach zu erheben sein, nicht einzeln definiert werden muessen. gruss gmd
gmd Geschrieben 16. April 2020 Autor Geschrieben 16. April 2020 Hallo, http://teutanic.com/blockDefErrorCheck.mp4 Noch ein video zur blockerkennung. Habe geschwindigkeit erhoeht und auch die auswertung geht jetzt wesentlcih schneller. Die behandlung von konflikten habe ich eingebaut, noch nicht alle faellle aber schon einige. Kann man im video sehen. Aber jetzt erst mal dokumentation. gruss gmd
streit_ross Geschrieben 16. April 2020 Geschrieben 16. April 2020 Hallo gmd, ich bin fast 69 Jahre alt und habe keine Programmierkenntnisse, weshalb ich auch nicht allzuviel von dem, was Du vorhast, verstehe. Ausgehend von dem Grundsatz, dass es keine dumme Fragen gibt, interessiert mich mal grundsätzlich: Wenn in Zukunft immer mehr Abläufe auf einer Anlage automatisiert ablaufen, wird mir da nicht der eigentliche Spielspaß aus den Händen genommen ? Wenn ich davon ausgehe, dass ich auch ohne Lua bis jetzt auf meinen Anlagen ganz gut Steuerungen hinbekommen habe, gehe ich mal davon aus, dass ich auch in Zukunft ohne Deine parametrisierten Tabellen das MBS zu meiner Zufriedenhat nutzen kann. Wenn dem hoffentlich so ist, frage ich alter Greis aber, wozu bzw. für wen Du den ganzen Aufwand treibst. Ist denn dafür ein genügend großer Bedarf absehbar ? Schöne Grüße nach Perth streit_ross
gmd Geschrieben 16. April 2020 Autor Geschrieben 16. April 2020 Der bedarf ist bei mir. Ich mache das fuer mich. Jeder hat einen anderen anspruch an spielen und das hat nichts mit dem alter zu tun. Manche bauen modelle (dazu haette ich nicht die geduld), manche bauen anlage mit wenig automatisierung, dabei ist der schwerpunkt auf bauen, manche automatisieren kleine details und animationen das ist alles ok. Ich mag halt viel fahrbetrieb und man kann eben nur ein paar wenige zuege beobachten und gleichzeitig steuern ohne eine form von fahrdienst. Es gibt ja sehr machige programme zu steuerung von anlagen, wie das ModellStellwrk, Rocrail etc.fuer groessere realanlagen oder auch virtuelle wie das 3DMBS. Mir sind diese programme einfach nicht effizient genug im zusammenhang mit dem MBS also mache ich mir mein eigenes. Wenn andere daran spass finden ok, wenn nicht auch gut. Es ist nicht mein antrieb ein neues stellwerk programm zu vertreiben. Einfach mal eine idee ausprobieren. Warum muss alles gleich kommerziell sein ? Mit der EV hat Neo halt eine "can of worms" aufgemacht. Ohne diese waere ich nie auf den gedanken gekommen. Erst eine scripting language eroeffnet diese moeglichkeiten wie ich sie ausprobieren moechte. Ist das ausreichend erklaert ? gruss gmd
HaNNoveraNer Geschrieben 16. April 2020 Geschrieben 16. April 2020 (bearbeitet) Oder anders ausgedrückt: Der Weg ist das Ziel. Es gab Zeiten, da habe ich monatelang nur Weichensteuerungen und Drehscheibensteuerungen mit Mikroprozessoren für die reale Moba gebaut. Resultat: Ich kann noch nichtmal einen vollen Kreis fahren. Warum? Weil mir das tüfteln und Programmieren einfach mehr Spaß macht. Genau so ist es mit dem MobaStudio. Der Spaß daran sind für mich die logischen Überlegungen und Wege dorthin, wie man und was man mit der offenen Lua und COM Schnittstelle alles anstellen kann. So ist jeder anders. Und das ist gut so. Gruß Thomas Bearbeitet 16. April 2020 von HaNNoveraNer
Eisbär Geschrieben 16. April 2020 Geschrieben 16. April 2020 vor 2 Stunden schrieb gmd: im prinzip ist das richtig, aber es gibt zur zeit dinge die nicht so ohne weiteres gehen Hi gmd. Danke für den Einblick in Deine Überlegungen. Ich finde LUA einfach nur schrecklich und werde wohl eher den externen Ansatz bervorzugenb. Für das was ich vorhabe ist es aber noch ein langer Weg, also bleibt es erst mal bei LUA. VG Christian
Eisbär Geschrieben 16. April 2020 Geschrieben 16. April 2020 vor 53 Minuten schrieb streit_ross: Wenn in Zukunft immer mehr Abläufe auf einer Anlage automatisiert ablaufen, wird mir da nicht der eigentliche Spielspaß aus den Händen genommen ? Hallo streit_ross. Das ist einfach eine Frage der persönlichen Vorlieben. Dir hat es wahrscheinlich schon immer Spaß gemacht selbst alles zu schalten und mit dem Fahrregler den Zug zu steuern. Ich (übrigens 53 Jahre alt) hatte als Jugendlicher eine Minitrix-Anlage, die große Teile meines Taschengeldes gefressen hat. Die habe ich auch schon voll automatisiert, mit Gleiskontakten und Relais. Als alles fertig war wurde es langweilig, der Weg war das Ziel, die technische Herausforderung. Das Schöne an der Modellbahn ist doch, dass beides geht und im Fall des Modellbaustudios für kleines Geld. Wenn Du Dich mal in Ruhe und schön langsam mit LUA vertraut machst und einen simplen Ansatz verfolgst, kannst Du vielleicht mit der Zeit beides verbinden. Schalte zum Beispiel Weichen und Signale selbst, und lass LUA dafür sorgen dass die Züge am roten Signal anhalten oder abbremsen, wenn ein Streckensignal Langsamfahrt signalisiert. Du findest hier Anleitungen und jede Menge Unterstützung. Und wenn Du keine Lust drauf hast, dann pfeif einfach auf Automation! VG Christian
streit_ross Geschrieben 16. April 2020 Geschrieben 16. April 2020 Hallo gmd, Danke für Deine rasche Antwort. Wenn ich denn es richtig verstanden habe, bastelst Du an einem Projekt aus Eigennützigkeit und lässt andere sozusagen teilhaben an dessen Werdegang. Da finde ich es auch gut, dass ich somit die Alternative habe, aus Desinteresse/Fehlen von Kenntnissen diesen Thread außen vor zu lassen. Nochmals Danke streit_ross
streit_ross Geschrieben 16. April 2020 Geschrieben 16. April 2020 Hallo Eisbär, das, was Du da schreibst, tut ja meinen alten Knochen richtig gutIch hatte immer so ein Gefühl, ich verpass den Fortschritt und verschenke mir Möglichkeiten. Andererseits komme ich allein mit der neuen grafischen Oberfläche der EV in V5 gut zurecht und nutze auch solche neuen Möglichkeiten wie Gleiskontakte, Schlagwort, Ausführungsverzögerung usw. in zunehmendem Maße und ich weiß ja auch, dass selbst da Lua unter der Haube werkelt. Also nutze ich ja eigentlich Lua. Gruß streit_ross
Eisbär Geschrieben 16. April 2020 Geschrieben 16. April 2020 vor 1 Minute schrieb streit_ross: was Du da schreibst, tut ja meinen alten Knochen richtig gu Super, das freut mich. Mach Dir Deinen eigen Mix aus manueller und automatischer Bedienung und hab einfach Spaß dabei!
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