-
Gesamte Inhalte
670 -
Benutzer seit
-
Letzter Besuch
Alle erstellten Inhalte von gmd
-
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
-
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
-
Ich auch - lol. "Wie soll ich wissen was ich denke bevor ich nicht hoere was ich sage." Das ist so ein testfall. Ist halt ein versuch, wird ne weile dauern da ich das ziemlich umfassend angelegt habe. Sonst bringt es nicht viel. Man muss ja ziemlich viel wissen uber die anlagenstruktur um diese automatismen zu erzeugen. Habe eine neuen video gemacht und werde in dem schnittstellen thread posten. Die blockdefinition ist jetzt ziemlich fertig. gruss gmd
-
Thomas, Ja ist alles mit Aufwand verbunden, und ja ich bin auch ungeduldig Was meinst du warum ich an meiner steurung arbeite ? Damit ich nicht so viele umstaendliche scripts immer wieder schreiben oder kopieren muss. gruss gmd
-
Thomas, ich stelle mir das so vor: Ein block mit kuppel moeglichkeit ohne den rest zusammenzuschieben koennte mehrere positionen haben an denen wagen stehen bleiben koennen zum ankuppeln. Entweder sie rollen oder werden an den punkt geschoben. Rollen gibt es ja im MBS nicht , also brauchst du eine unsichtbare lok, die immer genau an den kuppel punkten anhaelt und den oder die wagen zieht, das kann inclusive einer lok sein, damit wird dann geschobener rangierbetrieb simuliert, aber tatsaechlich zieht die unsichtbare lok. Das waere eine loesung. Eine zweite ist, das man ueber koordinaten arbeitet und die lokposition berechnet bis sie an den wagen herangekommen ist. Das kann man mit positionsabfragen tun. Ausserdem kannst du wagen an eine bestimmte position fahren lassen, mit hilfe der koordinaten. Das mache ich mit meinem "Parkgleis" und "Vorstellgleis". Da wird allerdings absolut positioniert und nicht durch fahrbetrieb. Vielleicht hast du ja noch andere gedanken. gruss gmd
-
-
Berlioz, das ist eine sehr schoene loesung. Ich habe es ausprobiert, ein paarmal mit verschiedenen geschwindigkeiten, und kann rein optisch keinen unterschied erkennen. Funktioniert hervorragend. Ich habe den eindruck dass due etwas "Nitpickst". Das ist der eingedeutschte ausdruck fuer "Laeuse suchen:, wenn man etwas ganz genau machen will. Ich werde pruefen inwieweit ich deinen ansatz fuer mein programm verwenden kann, sieht wie eine gute sache aus. Ich stimme Goetz zu und habe das auch fuer mein konzept vorgesehen, einen bremskontakt zu verwenden und dann runterzubremsen. Allerdings haengt das natuerlich von den dimensionen der anlage ab. Man braucht lange bloecke fuer realistisches verhalten. Thomas, gute frage, bin ich auch dran interessiert. gruss gmd
-
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; }
-
Australia, aber ich bin deutsch geboren, jetzt Australian national, living in Perth. gruss Gmd
-
no worries, wie wir hier sagen take care mate
-
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.
-
nein, das ist egal, du hast einen grundsaetzlichen fehler irgendwo... pruefe deinen listener siehe meinen code, diese schnittstelle ist wirklich simple und sollte eigentlich nicht soviele schmerzen bereiten geh nochmal alles von vorne gruendlich durch. Und mach dir eine eigen kleine testanlage, ein gleis und eine lok reichen gruss gmd
-
das edit order Animation ist egal fuer events, nur das play ist relevant, das hast du ja jetzt auf an. Du brauchst aber auch etwas was sich bewegt, ein fahrzeug das faehrt, sonst bekommst du keine events. gruss gmd
-
Das linke ist edit on/off und nur Animation das rechte ist PLAY. das ist das wichtige fuer die ereignisse.. Das linke ist nur ein displaymodus und edit off gruss gmd
-
ja, es gibt noch ein setting Animation aber das ist hier nicht gemeint, das schaltet den edit mode ab. Nennen wir es Play modus .. der muss an sein gruss gmd
-
das ist wirklich merkwuerdig, hast du die Animation an ? Ich meine das ist eine bloede frage aber manchmal steckt der stecker nicht in der steckdose Wenn nichts passiert kannst du nichts lesen gruss gmd public static void readData() { TcpClient client = null; NetworkStream eventStream = null; try { client = new TcpClient("127.0.0.1", 31286); eventStream = client.GetStream(); } catch (Exception e) { Debug.WriteLine("MBS nicht gefunden" + "\nMessage ---\n{0}", e.Message); } try { while (client != null && eventStream != null) { Byte[] data = new Byte[1024]; String responseData = String.Empty; // Read the event data Int32 bytes = eventStream.Read(data, 0, data.Length); responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes); MainUI.Dispatcher.Invoke(new Action(() => addMessage(responseData))); } } catch (Exception e) { Debug.WriteLine("\nMessage ---\n{0}", e.Message); } } das ist der reader, mehr braucht man nicht und funktioniert zuverlaessig..
-
Denke an das zweite port, kommando senden und antwort lesen ist getrennt von events lesen. Das sind zei verschiedene ports. gruss gmd
-
Easy, schoen dass du das so siehst. Genau diese synergie und seiteneffekte entstehen ja wenn man explorativ arbeitet. Das beschreibt mein gesamtes sein. Mein motto: Zufriedenheit ist das ende des fortschritts. Bleibt ja jedem ueberlassen ob er etwas tut oder nicht, und ich bin sicher dass Neo den ein oder anderen gedanken hat oder auch features entstehen die anderen nutzen haben. zB. gleise faerben aus LUA, oder geht das schon ? gruss gmd
-
Suche das program putty Definiere eine verbindung, siehe oben. Dann geben ein kommando ein wenn das console fenster oeffnet. Hier im beispiel 100; und dann enter. Im programm brauchst du dafuer "100;/n" /n fuer newline. Ueberpruefe deine strings. Ausserdem findest du im Wiki beispiele fuer schnittstellen. Ich hatte auch ein beispiel in C# gepostet. Kommando senden und ereignisse lesen finden auf zwei verschiedenen ports statt. Siehe Wiki externe schnitstelle. good luck gmd
-
Hallo, hier is ein weiterer movie. Ich verwende diese movies auch als dokumentationshilfe fuer jeden schritt fuer mich selbst. Mein gedaechtnis ist auch nicht mehr was es mal war :). http://teutanic.com/blockDetection.mp4 Vor diesem video laeuft ein schritt BENENNUNG, der erstmal dafuer sorgt dass alle namen fuer die zu bearbeitende anlage eindeutig sind, zumindest gleise,weichen,kontakte und signale. Derzeit muessen die kontakte nocht plaziert werden, aber in einer spaeteren version werde ich das auch noch automatisieren, dann muss man nur noch feineinstellen. Wenn die namen eindeutig sind dann erfolgt die block erkennung wie im movie. So werden alle bloecke auf der anlage abgefahren.. Der naechste schritt ist die erkennung von weichen strassen und dann die routen. Dann kann ich alles in drei tabellen beschreiben und meine blockverwaltung laeuft egal wie gross die anlage ist. Ich habe eine riesige testanlage mit allen schikanen :). Die ware real irgendwo um 200qm oder mehr. Damit werde ich das konzept irgendwann testen, derzeit allerdings noch in kleinen schritten, stueck fuer stueck. gruss gmd
-
Hallo Neo, ermutigt von einigen zuschriften, die gebeten haben die diskussion fortzufuehren, noch ein paar bemerkungen. Aus meiner sicht, fuer das was ich tue, ist das 3DMBS ein compiler, oder besser gesagt eine Entwicklungsumgebung, die elementare bausteine anbietet und stueck fuer stueck aufch aggregierte funktionen, wie controls oder widgets oder wie man das auch immer nennt. User bauen eine anwendung mit dem studio und ich baue einen anwendungsgenerator, Das ist eine ebene die ich nicht im studio selbst sehe. Ich denke da hast du andere prioritaeten. Einer der eine entwicklungsumgebung baut schreibt ja auch kein buchhaltungsprogramm als bestandteil seiner tools. Je hoeher die funktionalitaet im studio je maechtiger koennen die anwendungen werden und die tools die sie erzeugen. Einige werden diese gedanken verstehen und die konsequenzen erkennen, andere eben nicht. Wenn du an vorschlaegen interessiert bist dann lass es mich wissen. Derzeit kann ich fast alles machen was ich will, nicht immer elegant aber es geht. Ich habe kein problem wenn du einen thread schliesst, am besten gleich loeschen damit das forum "sauber" und konstruktiv bleibt. An andere, sie wissen wer gemeint ist Und danke fuer die zuschriften einiger forum member. Ich habe kein problem fragen zu beantworten wenn sie dem verstaendnis dienen und fuer jeden konstruktiven vorschlag bin ich offen. Bin inzwischen weiter und kann jetzt automatisch fahrstrassen erkennen und benennen. Nicht mehr allzu lange und so eine anwendung wie meine Blockdemo kann man sehr schnell generieren. gruss gmd
-
Hallo BahnLand, deine liste sind elementare steuerungsbausteine. Ich spreche von "composite bausteinen" die als generische scripte leicht transportiert werden koennen. Die sind im einzelnen auch verwendbar unter bestimmten bedingungen. Die elementaren bausteine sind einzelne funktionen, wie die verwaltung eines einzelnen blockabschnitts, muessen aber zusammengefuegt werden. Ich habe bisher hier in keinem beispiel einen allgemeinen ansatz gesehen, nur immer ausgerichtet and einer bestimmten anordnung und einer bestimmten stelle. Damit kann man nicht komplexe ablaeufe verwalten. Ich mach mal ein beispiel: Du hast eine abrollbergsteuerung gebaut mit einem beispiel. Wenn man jetzt den abrollberg auf einer anderen gleiskonfiguration aufbauen moechte mit mehr als einem einfahrgleis und mehr abrollgleisen und auf der anderen seite eine zugzusammenstellung anschliessen will, und das ganze ohne eine zeile des scriptes zu veraendern sondern nur eine komponenten definition erstellt, dann hast du das wovon ich spreche. Und nochmal zu den besserwissern, wer nicht will der braucht es nicht zu benutzen, tut ja keinem weh. Ich denke ich werde mir es verkneifen hier in zukunft zu posten, ist mir einfach zu bloede. Wer mit mir kommunizieren moechte kann das per pn tun, haben ja schon einige gemacht. Ich kann solche platzhirsche einfach nicht ab, die noch nicht mal substantielle beitraege liefern. Ich versuche das beste aus einem guten produkt rauszukitzeln und dachte dass da mehr unterstuetzung zu erwarten ist. Stattdessen sehen es wohl einige als kritik und werden sogar persoenlich. Das brauche ich nicht. Gruss Gmd
-
Es gibt alle immer wieder besserwisser, Timba du hast es jetzt auch auf meine ignore liste geschafft. Wenn du schon bloede bemerkungen machst dann solltest du auch etwae mehr fundament dazu haben. gruss gmd
-
Hallo, wie einige ja wissen und meinen thread in Extensions verfolgen baue ich mir ein externes steuerprogramm zur automatisierung von ablaeufen. Meine block steuerung laeuft ja bereits und das externe programm wird diese einfach nur parametrisieren und die blockverwaltung steht. Nun sind bloecke ja nicht das einzige was ich automatisieren moechte. Einige "knabbern" ja immer wieder an EV apekten, es ist ja viel zu beachten, und die dinge werden schnell unuebersichtlich wenn man viele ereignisse koordinieren will. Die automatisierung funktioniert durch vordefinierte allgemaine scripte, die in MBS laufen und parametertabellen auswerten, die von meinem steuerprogramm erzeugt werden. Das ist also ein voellig anderes konzept asl zum beispiel Rocrail oder andere steuer- und modellbahnprogramme. Auch wenn die schnittstelle in zukunft anders wird, ist das fuer das konzept prinzipiell egal, wichtig is nur dass der zugriff auf alle komponenten in LUA moeglich ist und da fehlen noch ein paar dinge fuer die zukunft. Das nur als einleitung: Ich bin nun interessiert zu hoeren welche ablaufe interessant waeren zu automatisieren. Ein paar beispiele Kopfbahnhof gleis einfahren, lokwechsel, ausfahren und alte lok parken. haltepunkt vor bergstrecke, warten ,doppeltraktion erstellen mit geparkter lok, bergfahrt, loesen doppeltraktion, lok zurueckfuehren Gueterzug auf ausweichgleis und schnellzug passieren lassen unter verschiedenen bedingungen (z.b. Fahrplan). Bloecke in gegerichtung befahren. Schattenbahnhof verwaltung Zuege parken und abrufen, von parkbereich ausserhalb gleise Zuege zerlegen, Rangieren nach vorgaben Zuege zusammestellen Wagen beladen, entladen Loks zur Wartung, Bekohlung usw. Loks/Zuege durch waschanlage Man kann sich das so verstellen auf Lok/zugebene koenen ereignisse definiert werden wie bei der EV nur nicht auf gleisen, kontakten und anderen elementaren objekten, aber auf einer hoeren ebene. Die elementaren objekt sind die scripts, die miteinader verknuepft werden koenen. Ablaeufe koennen manuell oder automatisch ablaufen. Maine vision ist, dass ich einen vollautomatischen ablauf habe und dann einen zug manuell fahren kann und die steuerung mich automatisch beruecksichtigt und freischaltungen macht wie auch immer erforderlich. Das wird sicher noch einige zeit dauern bis ich dahin komme. Jedenfalls wuerde mich interessieren onb noch weiter vorschlaege kommen. Zunaechst mache ich das fuer bahn, spaeter kommen die strasse und Luft/Wasser dazu. gruss gmd
-
Hallo, ein weiterer update. Ueber die schnittstelle kann man nicht ohne weiteres die strassenfahrzeuge von den bahnfahrzeugen unterscheiden usw. Das moege sich in der zukunft aendern aber derzeit eben nicht. Macht aber nichts da ich ohnehin die funktionalitaet eines fuhrparks und depots haben will. Das ist keine nahbildung des MBS katalogs sondern eine referenzliste der objekte die der erbauer auf seinen anlagen verwenden moechte. Ausserdem sind dann an die kategorien auch weitere funktionen gebunden, z.b. spezielle fahrplaene etc. Ausserdem kann man gruppen bilden die dann bestimmten funktionstypen zugeordent werden. Zum beispiel koennen fahrzeuge in kolonne fahren, oder ueberholen, oder verschwinden und nach random zeit wieder woanders auftauchen usw. Es ist auch denkbar gruppen zu plazieren und vieles mehr, wenn man erst mal die einzelnen angaben hat. Nun ein beispiel wie man schnell einen solchen katalog erstellen kann. Es ist denkbar einfach. http://teutanic.com/fuhrpark.mp4 Der video zeigt das vorgehen. Die oberflaeche kann sich einer aktivitaet anpassen und zeigt dann nur die elemente die fuer die aufgabe benoetigt werden. Das macht es einfacher den ueberblick zu behalten. Objekte werden plaziert, koenen gelesen werden, sollten beim lesen bereits der richtigen kategorie zugeordnet werden (das kann auch manuell einzeln geschehen) , und werden dann als selektion gemeinsam in den fuhrpark gestellt unter der vorgewaehlten kategorie ... done .. Wenn die objekte jetzt im fuhrpark stehen werden sie verwendet um lese ergebnisse zu identifizieren. Wenn loks gelesen werden kann ich dann die strassenfahrzeuge sofort erkennen und aussortieren, usw. Das ist also etwas grundaufwand, ist aber simple. gruss gmd