Jump to content

gmd

Mitglieder
  • Gesamte Inhalte

    400
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von gmd

  1. Prima, dann denk doch bitte auch an einen stop mit bremsen dass ein fahrzeug verriegelt werden kann, wenn du schon dabei bist. gruss gmd
  2. Christian, Easy hat ein VB script veroeffentlcht welches gruppenkommandos liest. Suche einfach unter seinem namen grus gmd
  3. Christian, Ich habe es nicht misverstanden und auch nicht als kritik aufgefasst. Ich verwende derzeit C#, WPF mit MVVM model und EF code first. Das ist die grundlage fuer meine derzeitige app. Das hat historische gruende. In dem kommerziellen projekt das ich seit 5 jahren manage verwenden wir NodeJs mit dutzenden von libraries und additional tools, micro services, etc. Ist aber wie man unschwer sieht eine reine cloudbased solution. IDE ist Webstorm. Habe auch eine mittelgrosse anwendung in Java geschrieben die meinen gesamten caravan steuert. Klingt nicht sehr umfangreich, hat aber mehrere 10.000 zeilen code fuer alles was man sich so denken kann in einem voll automatisierten Haus. Treibt meine eigenes CAN netzwerk basierend auf Arduino und DMX bus fuer die beleuchtung das alles ansteuert, mehrere hundert signale und sensoren. Ich bin halt ein automatisierungsfreak Hatte auch erst an Java gedacht fuer mein MBS programm, gaebe ja auch noch andere alternativen, da ich aber eine lizenz fur Visual Studio Pro besitze und in der vergangenheit eine groessere anwendung designed hatte (fuer Oel und Gas industrie), bin ich vertraut genug nach einigen Jahren pause wieder selbst code zu schreiben. Das EF hilft und derzeit verwende ich eine externe Datenbank (MySql) das wird sich aber aendern wenn andere interesse haben mit dem ergebnis zu arbeiten. SqlLight, SqlServer Local DB, Interbase etc sind ja verguegbare lokale Db's. Es gibt ja heutzutage so viele variationen, irgendwann muss man sich halt festlegen. gruss Gmd
  4. Ja Thomas, das ist ja was ich geschrieben habe. Das MBS kann das am besten, es ist aber auch an den benutzern solche dinge zu diskutieren. Wenn einige die sich mit dem problem befasst haben zusammenkommen und sich auf ein vorgehen einigen koennen, dann ist es sicher einfacher fuer Neo solche aspekte zu beruecksichtigen. Ein einzelner wunsch ohne viel hintergrund waehre auch nicht das was mich bewegt viel gehinschmalz darauf zu verwenden. gruss gmd
  5. Ich denke man muss hier auch Neo's seite betrachten. Lua ist einfach zu lernen, nicht komplex zu portieren und wettbewerber verwenden es, was den umstieg leichter macht fuer leute die MBS in betracht ziehen als ersatz fuer eine ueberkommerzialisierte loesung, die telweise recht muehsam ist in der bearbeitung. Ich bin generell mit MBS sehr zufrieden, habe ALLE anderen angeschaut und getestet (auch bezahlte versionen). Auch wenn es hier und da noch ein paar kinks gibt, so ist das MBS aber eine gute loesung, intuitiv (meistens :)), performant, und realistisch genug. Andere haben drastisch mehr modelle, aber das ist nun auch nicht das wichtigste. Die neue EV is gut geloest, besonders fuer nichtprogrammierer. Meine wunschliste derzeit hat weniger als ein dutzend eintraege die ich fuer relevant halte und das heist was fuer mich, da ich ja auch normalerweise ein typisch deutscher meckerer bin. Vielleicht nicht so schlimm wie die poms hier, aber halt kritisch. Wie sagt man so schoen, Deutsche sind gruendlich und wenn sie was falsch machen dann machen sie es gruendlich falsch. Auch diese gedanken bewegen mich in dem vorhaben mein programm mit dem MBS zu verkuepfen so gut es geht und nicht ein tuerchen offenzuhalten fuer alternativen, jedenfalls nicht absichtlich. Ich bin offen mit anderen zu kollaborieren falls interesse besteht und falls die absichten in aehnliche richtungen fuehrt. gruss gmd
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. selektiere all gleise, gehe zu eigenschaften/koordinaten und gebe 0 ein fuer z gruss gmd
  15. 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
  16. 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; }
  17. Australia, aber ich bin deutsch geboren, jetzt Australian national, living in Perth. gruss Gmd
  18. no worries, wie wir hier sagen take care mate
  19. 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.
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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..
  25. Denke an das zweite port, kommando senden und antwort lesen ist getrennt von events lesen. Das sind zei verschiedene ports. gruss gmd
×
×
  • Neu erstellen...