-
Gesamte Inhalte
673 -
Benutzer seit
-
Letzter Besuch
Alle erstellten Inhalte von gmd
-
Ja werde ich.. Diese diskussion bringt mich uf einen gedanken. Ich bin ja kein freund von stundenlangem tuefteln uum die letzte laus zu finden :), das ist ja wohl klar wenn man meine posts liest, haha. Ich suche immer eine prakmatische loesung, manchmal den holzhammer .. Hier waere der holzhammer folgendes: 1. Ein arretiertes Fahrzeug oder Lok 2. Ein arretierungskontakt. In real gibt es ja auch lokbremsen die man feststellt und bloecke unter den raedern, sowie bremserwagen. Wenn eine lok oder wagen beim andocken sich nicht bewegt sondern arretiert ist, dann sollte das treibende fahrzeug auf 0 gehen. Das studio weiss das alles. Mit der EV ist das nicht zu machen. Und zweitens ein arretierungskontakt kein eingestellt sein auf ein fahrzeug anfang oder auch ende, dann wird ein wagen oder zug am ersten kontakt zu beginn eines wagens oder am ende des ersten wagens gestoppt. Das studio weiss alles und hat die moeglichkeiten, mehr als wir mit der EV. Damit laesst sich auf einfachste weise eine vielzahl von situationen loesen und es kommt nicht auf millionstel von bruchteilen an. Deine arbeit in allen ehren und das ist auch keinerlei kritik, im gegenteil. Aber du koenntest das mit den beiden funktionen oder auch nur einer wesentlich einfacher loesen. Es bleibt ein bischen restgeschwindigeit und das studio erzeugt einen kompletten stop, keine verzoegerung, punkt. Das ist die praezision die ich mir auch fuer ankoppeln von doppeltraktionen usw. wuenschen wurde. Die arretierung kann ich ja ueber einen gleiskontakt simulieren aber es bleibt immer noch die verarbeitungszeit was mit der taktung der EV zu tun hat. Der arretierungskontakt waere "native" im studio ohne zeitverlust. Liege ich falsch ? Eure gedanken dazu ? gruss gmd
-
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
-
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
-
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