Neo Posted April 15, 2020 Share Posted April 15, 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 Link to comment Share on other sites More sharing options...
gmd Posted April 15, 2020 Author Share Posted April 15, 2020 (edited) 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. Edited April 15, 2020 by gmd Link to comment Share on other sites More sharing options...
Eisbär Posted April 15, 2020 Share Posted April 15, 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 Link to comment Share on other sites More sharing options...
Eisbär Posted April 15, 2020 Share Posted April 15, 2020 Danke für die Hilfe natürlich. Was für ein Deutsch! :-) Link to comment Share on other sites More sharing options...
Eisbär Posted April 15, 2020 Share Posted April 15, 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... Link to comment Share on other sites More sharing options...
gmd Posted April 15, 2020 Author Share Posted April 15, 2020 no worries, wie wir hier sagen take care mate Link to comment Share on other sites More sharing options...
Eisbär Posted April 15, 2020 Share Posted April 15, 2020 I already thought that you might probably be an English native speaker. So where are from actually? Link to comment Share on other sites More sharing options...
gmd Posted April 15, 2020 Author Share Posted April 15, 2020 Australia, aber ich bin deutsch geboren, jetzt Australian national, living in Perth. gruss Gmd Link to comment Share on other sites More sharing options...
Eisbär Posted April 15, 2020 Share Posted April 15, 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! Link to comment Share on other sites More sharing options...
Eisbär Posted April 15, 2020 Share Posted April 15, 2020 Nun klappt es! Danke an alle, die geholgen haben! Link to comment Share on other sites More sharing options...
Eisbär Posted April 15, 2020 Share Posted April 15, 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 Link to comment Share on other sites More sharing options...
gmd Posted April 15, 2020 Author Share Posted April 15, 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; } Link to comment Share on other sites More sharing options...
Eisbär Posted April 15, 2020 Share Posted April 15, 2020 THX mate! Link to comment Share on other sites More sharing options...
gmd Posted April 16, 2020 Author Share Posted April 16, 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 Link to comment Share on other sites More sharing options...
Eisbär Posted April 16, 2020 Share Posted April 16, 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 Link to comment Share on other sites More sharing options...
gmd Posted April 16, 2020 Author Share Posted April 16, 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 Link to comment Share on other sites More sharing options...
gmd Posted April 16, 2020 Author Share Posted April 16, 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 Link to comment Share on other sites More sharing options...
streit_ross Posted April 16, 2020 Share Posted April 16, 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 Link to comment Share on other sites More sharing options...
gmd Posted April 16, 2020 Author Share Posted April 16, 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 Link to comment Share on other sites More sharing options...
HaNNoveraNer Posted April 16, 2020 Share Posted April 16, 2020 (edited) 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 Edited April 16, 2020 by HaNNoveraNer Link to comment Share on other sites More sharing options...
Eisbär Posted April 16, 2020 Share Posted April 16, 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 Link to comment Share on other sites More sharing options...
Eisbär Posted April 16, 2020 Share Posted April 16, 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 Link to comment Share on other sites More sharing options...
streit_ross Posted April 16, 2020 Share Posted April 16, 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 Link to comment Share on other sites More sharing options...
streit_ross Posted April 16, 2020 Share Posted April 16, 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 Link to comment Share on other sites More sharing options...
Eisbär Posted April 16, 2020 Share Posted April 16, 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! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now