-
Gesamte Inhalte
577 -
Benutzer seit
-
Letzter Besuch
Alle erstellten Inhalte von gmd
-
Wicked, hatte ich noch nicht wirklich bewusst gesehen. Das spart coding .. muss ich mal weiter drueber nachdenken. Danke Gmd
-
-
Darstellung von Umlauten und Sonderzeichen JSON Schnittstelle
gmd antwortete auf EASYs Thema in Erweiterungen (Plugins)
"Nur eigenen Code ist aktiviert." Die Option "Just My Code" (Nur eigenen Code debuggen) ist in Visual Studio aktiviert. Dadurch werden externe Bibliotheken wie Newtonsoft.Json ignoriert, und man kann nicht hineinspringen. Das is nur eine warnung dass du das nicht debuggen kannst, wird aber die funktion nicht beeinflussen. Du kannst die source laden zum debuggen, brauchst du aber nicht wirklich, das VS auf decompiled falls noetig. Tools - Options -> Debugging deselect Enable Just My Code warning is ticked, deswegen bekommst du die meldung. Gruss Gmd PS: wir koennen gerne per email oder auch whatsapp communizieren wenn du willst, kein problem, dann belasten wir das forum nicht mit diesen dingen -
Darstellung von Umlauten und Sonderzeichen JSON Schnittstelle
gmd antwortete auf EASYs Thema in Erweiterungen (Plugins)
Ich kann dir auch mal die source files schicken, wenn das einfacher ist. Gruss Gmd in meinem logger sieht man die umlaute encoded, und wenn sie dann umgewandelt sind Ich kann die events zerlegen und in eine freundlcihere darstellung umwandeln und die entities extrahieren und filtern usw. Wenn du interesse hast schicke ich dir das gerne .. sollte sich leicht transferieren lassen gruss Gmd -
Darstellung von Umlauten und Sonderzeichen JSON Schnittstelle
gmd antwortete auf EASYs Thema in Erweiterungen (Plugins)
Das ist noch wichtig fuer die deserialisation Das sind meine custom classes die du im obigen code verwendet siehst namespace NLua_Integration.Json_Classes { [JsonConverter(typeof(JsonRpcMessageConverter))] public class JsonRpcMessage { [JsonProperty("jsonrpc")] public string JsonRpc { get; set; } = "2.0"; [JsonProperty("method")] public string Method { get; set; } [JsonProperty("params")] public string Params { get; set; } // Lua script or other parameters [JsonProperty("id")] public int Id { get; set; } } public class JsonRpcResponse { [JsonProperty("jsonrpc")] public string JsonRpc { get; set; } [JsonProperty("result")] public object Result { get; set; } // Success result [JsonProperty("error")] public JsonRpcError Error { get; set; } // Error details [JsonProperty("id")] public int? Id { get; set; } // Nullable to handle 'null' in the response } public class JsonRpcError { [JsonProperty("code")] public int Code { get; set; } [JsonProperty("message")] public string Message { get; set; } [JsonProperty("data")] public object Data { get; set; } // Optional additional data } } public class JsonRpcMessageConverter : JsonConverter<JsonRpcMessage> { public override void WriteJson(JsonWriter writer, JsonRpcMessage value, JsonSerializer serializer) { writer.WriteStartObject(); // Write jsonrpc writer.WritePropertyName("jsonrpc"); writer.WriteValue(value.JsonRpc); // Write method writer.WritePropertyName("method"); writer.WriteValue(value.Method); // Write params (ensure no extra escaping) writer.WritePropertyName("params"); writer.WriteValue(value.Params); // Ensure proper escaping for the Lua script // Write id writer.WritePropertyName("id"); writer.WriteValue(value.Id); writer.WriteEndObject(); } public override JsonRpcMessage ReadJson(JsonReader reader, Type objectType, JsonRpcMessage existingValue, bool hasExistingValue, JsonSerializer serializer) { // Implement if deserialization is needed throw new NotImplementedException(); } } -
Darstellung von Umlauten und Sonderzeichen JSON Schnittstelle
gmd antwortete auf EASYs Thema in Erweiterungen (Plugins)
Mein response string Name Value Type responseJson "{\"jsonrpc\":\"2.0\",\"result\":[{\"_class\":\"entity\",\"name\":\"Qu\\u00E4s\\u00DFter\"}],\"id\":1}" string genau wie bei dir, das ist das rohformat und ich mache das var response = JsonConvert.DeserializeObject<JsonRpcResponse>(responseJson); if (response != null) { if (response.Error != null) { ResultMessage = $"Error: {response.Error.Message} (Code: {response.Error.Code})\nRaw Response:\n{responseJson}"; } else if (response.Result == null) { ResultMessage = $"Script executed successfully with no return value.\nRaw Response:\n{responseJson}"; } else { ResultMessage = $"Response: {response.Result}\nRaw Response:\n{responseJson}"; } } else { ResultMessage = $"Failed to parse server response.\nRaw Response:\n{responseJson}"; } $"{response.Result}" gibt den richtigen string mit umlauten gruss Gmd Edit: Bevor du fragst welche Library - using Newtonsoft.Json; -
Darstellung von Umlauten und Sonderzeichen JSON Schnittstelle
gmd antwortete auf EASYs Thema in Erweiterungen (Plugins)
Probier einfach mal Latin1 statt UTF8, just for fun Gruss Gmd -
Darstellung von Umlauten und Sonderzeichen JSON Schnittstelle
gmd antwortete auf EASYs Thema in Erweiterungen (Plugins)
alte schnittstelle .. als selektion eingelesen und hier ueber die neue das ist mit meiner app gemacht .. muss ich genauer untersuchen was bei dir daneben gehen koennte aber erst morgen gruss Gmd -
Nein, danke fuer den tip gruss Gmd
-
Darstellung von Umlauten und Sonderzeichen JSON Schnittstelle
gmd antwortete auf EASYs Thema in Erweiterungen (Plugins)
ok, zu spaet fuer heute .. kann nicht mehr richtig denken... ich schau mir morgen mall beispiele an wie das bei mir kommt .. Ich hatte beim einlesen von files einiges zu probieren, ich muss mal explizit umlaute schicken ueber die schnittstelle.. das kann ich ja noch probieren. Gruss Gmd -
Vielleicht mache ich mal wieder einen denkfehler, aber das wirst du mir schon sagen .. wenn ein signal schaltet (benutzerbedingt durch doppelclick oder auch stellpult etc) kann ich es immer auf stop zwingen solange keine bedingung erfuellt ist die ich setzen kann. Das einzige problem ist bei formsignalen, geht die animation los, also hoch und dann wieder runter.. bei lichtsignalen funktioniert das ohne flickern .. eine frage des scriptes .. Gruss Gmd
-
Habe dein beispiel angeschaut .. 5 clicks und zwei zuege sind ineinander gefahren .. Das ist das was ich versuche zu verhindern auch wenn man manuell rumklickt und vieles mehr. gruss Gmd
-
Du kapierst es immer noch nicht, lass uns einfach aufhoeren daruebr zu reden. hier noch ein letzter versuch und dann gebe ich es auf .. Ich kann natuerlich die bevorzugte fahrrichtung usw errechnen wenn ich eine "fertige" gleisanlage habe .. das ist aber nicht der punkt .. es geht darum alle sicherungsinstrumente im obigen beispiel automatisch zu setzen ich kann auch erkennen dass es sich hier um eine eingleisige strecke handelt, aber ohne weitere informationen ob es nur in einer richtung befahrbar is oder nicht kann man das nicht entscheiden .. Ich kann natuerlich einen default annehmen fuer solche faelle aber wenn man nun genau das gegenteil will dann braucht es einen indikator, einfach und schnell zu setzen Das waere mir zu umstaendlich, wahrscheinlich werde ich einen der kontakte misbrauchen und als richtungsanzeiger verwenden, wenn alles andere nackt ist. auch die weichensignale und vieles andere ist positionierbar. Es gibt so viele kleine dinge im MBS die es wert sind zu verwenden, kosten aber jede menge zeit und fallen meist hinten runter oder werden nur in einzelfaellen verwendet. Gruss Gmd
-
Es gibt eine ganze reihe von unterschieden ob modell oder real, jedenfalls fuer mich .. das nenne ich nicht sicherung .. hier passiert nichts weil die fahrstrasse die weiche schaltet und ein querfahrt verhindert. das ist sicherung, aber dazu muss man ein weiters signal setzen und auch verknuepfen weiterhin die fahrstrasse besteht aus mehreren bloecken hier im beispiel .. und wird geschaltet wie sie physisch eingerichtet ist (per definition), blockiert aber gegebenen falls vorrangverkehr mit fahrplan zeitziel, weil innerhalb von fahrstrassen keine blockverwaltung stattfindet es sei denn man definiert fuer jeden block eine fahrstrasse.. Die alte diskussion blockverwaltung vs fahrstrassen, wir haben halt nicht soviel platz fuer lange strecken wie in der realen welt. Es gibt fuer mich noch viele andere punkte die du ja nicht zu sehen willst, da du ja immer recht haben musst .. Gruss Gmd
-
Darstellung von Umlauten und Sonderzeichen JSON Schnittstelle
gmd antwortete auf EASYs Thema in Erweiterungen (Plugins)
Easy, nicht visual basic aber dies ist meine connect function public static async Task ConnectAsync() { try { lock (_lock) { if (_tcpClient != null && _tcpClient.Connected) { return; // Already connected } } _tcpClient = new TcpClient(); await _tcpClient.ConnectAsync(_host, _port); var networkStream = _tcpClient.GetStream(); _writer = new StreamWriter(networkStream, Encoding.UTF8) { AutoFlush = true }; _reader = new StreamReader(networkStream, Encoding.UTF8); } catch (Exception ex) { throw new Exception($"Error connecting to server: {ex.Message}", ex); } } Encoding.UTF8 ist hier der punkt .. Latin1 funktioniert glaube ich auch .. Du musst deinem programm sagen was fuer zeichenencoding zu erwarten ist. gruss Gmd -
Hallo, brauch mal etwas input fuer mein vorhaben und mit fahstrassen habe ich nicht viel erfahrung, da ich ja ein etwas anderes konzept verfolge. Allerdings bin ich jetzt an einem punkt in der entwicklung, wo ich anfange gleiskontakte, signale, vorsignale usw. automatisch zu setzen. Ich will dabei natuerlich versuchen weitestgehend konzepte und gepflogenheiten der anlagenbauer hier zu beruecksichtigen. Grund, meine entwicklung ist nicht nur alleine mit der zugehoerigen steuerung zu gebrauchen. Es ist zu erwarten dass eine ganze reihe von nuetzlichen funktionen (moeglicherweise plugins) entstehen, die auch alleinstehend sinn machen. Deshalb die frage. Ich verwende mal den begriff der fahrstrecke um von fahrstrasse zu unterscheiden. Fahrstrecke ist fuer mich die theoretische verbindung zwischen zwei punkten unter der beruecksichtigung eine bevorzugten bzw. notwendigen fahrtrichtung, diese kann, musser aber nicht einer fahrstrasse entsprechen. Das Mbs hat ja nun strategien wie die fahrstrassen zwischen punkten definiert werden, mit oder ohne weichenstellung zu beachten. Will man einen "umweg' muss man wegpunkte setzen. Ok, soweit nichts neues. Nun aber, wie definiert ihr fahrtrichtung ? erlaubter gegenverkehr ? (mit ausweich) Aufbau fuer bevorzugte oder erlaubte richtung ist bestimmt durch signalplazierung und anderes.. Im Mbs ist es aber moeglich fahrstrassen in gegenrichtung zu schalten, es sein denn man beachtet dies bei der manuellen erstelllung der fahrstrassen oder auch bei der steuerung. Da ich fahrstrassen nicht manuell erstellen will, sondern automatisiert, inclusive sicherungseinrichtungen, suche ich nach konzepten wie ich eine "fahrstrecke" anlege, dass genuegend informationen zur verfuegung stehen fahrstrassen automatisch gemaess der rahmenbedingungen (fahrtrichtung) zu setzen. Kontakte, kontaktrichtungen, schlagworte, alles moegliche tools eigenschaften zu definieren, die dann automatisiert verarbeitet werden koennen. Ich bin mir nicht sicher, ob ich die aufgabenstellung hier richtig beschrieben habe, aber vielleicht findet sich jemand mit ein paar ideen zum thema. Koennen ja noch etwas verfeinern, falls interesse besteht, und vielleicht kommen ja sogar erkenntnisse dabei heraus die auch fuer das Mbs interessant und nuetzlich sind. Gruss Gmd
-
Das ging schnell.. danke fuer die antwort. Nichts falsch an VB, fuer solche anwendung voellig ausreichend.. Und nun musstest du doch noch eine neue "Sprache" lernen - Lua Gruss Gmd
-
Hallo, ein update bezueglich des gleisplans. Hier eine kleine testanlage .. Ist ein teil meine gesamtanlage und hier der ausgelesene 3d spur plan. Die alte schnittstelle hat ein paar macken die man umschiffen muss.. mal sehen wie das alles mit der neuen geht. Wird aber noch dauern bis ich das umgestellt habe, da ich ja jetzt erst mal diese neuen daten verarbeiten kann und meine blockerkennung vorantreibe. Einige weichen werden noch nicht richtig gezeichnet, aber das werde ich auch noch beseitigen. Der plan is auch interaktiv, d.h. ich kann jedes spur segment selektieren und dann spaeter alle moeglichen funktionen dranhaengen. es sind strassen mit gezeichnet, da die schnittstelle sie als gleise meldet, wie auch die spuntwaende und tunnelroehre, aber das werde ich noch ausblenden, da ich ja alle guids kenne und mein katalog auch die typen kennt. Dann wird das auch schneller, weil ich nicht immer das MBS fragen muss. So ganz allmaehlich bekommt das ganze mehr form , allerdings immer noch eine menge zu tun. Gruss Gmd
-
Hallo, auf die gefahr hin ,dass ich daneben liege mit diesem vorschlag aber ich verstehe nicht warum die identifikation beim wagen/schlagwort/kontakt liegen muss. Kontakt oder was auch immer traegt waggon name in eine tabelle mit ladungskennzeichnung.. dann kannst du ueberall auch ohne kontakt oder event in der tabelle nachschauen was ein wagen geladen hat oder alle wagen mit einer bestimmten ladung .. usw ... Wenn du eine generelle list von waggons pflegst, die nur bestimmte ladung aufnehmen, kannst du noch viel flexiblere steuerungen bauen und am eingang einer verarbeitung (beladung) feststellen ob der waggon ueberhaupt geeignet ist usw. Gruss gmd
-
ja du kannst das tun, Rocrail exportiert layouts in xml die auch wieder importiert werden koennen. Ich kann den kompletten gleisplan des MBS auslesen. Ist halt eine frage diesen in das richtige xml umzuwandlen. Wenn du etwas von programmierung vetshets kann ich dir damit helfen, ich selbst habe allerdings kein interesse an Rocrail. Gruss Gmd
-
Hallo Easy, Kurzer test und feedback .. nicht wirklich ein stapel .. so weit so gut Was mir aufgefallen ist: wuerde nicht die werte zuruecksetzen wenn neue auswahl erfolgt, du hast ja einen button dafuer. Ein undo waere gut, objekte wieder entfernen, dann kann man verschiedene konfigurationen schnell ausprobieren. Was wirklich fehlt bei all diesen "externen" funktionen, dass man keine variationen setzen kann, aber das ist natuerlich nicht deine schuld. Auch fuer dein "random" plugin waere das natuerlich extrem nuetzlich. Welche software verwendest du fuer deine plugins ? Und noch eine frage bitte: Hast du das kommando 303 Gleis geometrie in der neuen schnittstelle gefunden. Ich meine nicht nur die laenge, die ist ja vorhanden, sondern alle gleissegmente. In der alten schnittstelle sind radius und angle fuer kurven nicht vorhanden, also habe ich diese durch die segmente berechnet. Ich finde aber keine funktion mit der ich die segmente bekomme um zum beispiel auch die verlegung des flexgleises zu erkennen. Gruss Gmd
-
Hallo, hier mal wieder ein update. Ein forummitglied hat die letzte version bekommen und erfolgrecih installiert und zum laufen gebracht, im wesentlichen als studienobjekt fuer seine eigene entwicklung zu steuerung einer echtanlage und Mbs als simulation. Die posts hier dienen auch als eine art dokumentation. Zwei themen heute, Animationen/Schalter und blockerkennung oder allgemeiner, spurenerkennung. Zunaechst Animationen Habe meine funktionen zur ordnung der animationen/schalter fertig. Kann gruppiere, sortieren, filtern und meine eigenen keywords hinzufuegen (gruppenweise) die dann als basis einer einheitlichen benennung dienen. Daraus wird dann ein mapper erzeugt der die "virtuellen einheitlichen" schalter auf die physisch vorhandenen schalter umlenkt, und vielleicht ist diese liste ja mal irgendwann leer, ich halte aber nicht den atem an . Nun zu blockerkennung. Weiter oben hatte ich ja schon beschrieben wie ich eine Tracer lok auf der anlage fahren lasse und ueber events das layout rekonstruiere. Das hat soweit auch funktioniert, ist mir aber einfach zu langsam und hat auch einen haken, es is nicht wirklich fuer strassen und auch nicht fuer isolierte spuren geeignet. Der gedanke kam in erster linie auch weil mein hirn nicht mehr so frisch ist wie es mal war .. und mein mathe kopf noch weniger. Nun habe ich mich aber doch durchgerungen mich wieder mit 3d geometrie zu beschaeftigen und lese die koordinaten,rotationen und geometrie informationen aus und errechne die verbundenen elemente. Und damit ich auch sehe was das passiert habe ich ein paar simple 3d klassen gesucht, die in meiner umgebung helfen ein 3d layout anzuzeigen, und zwar nur spuren, keine gleise, oder strassen etc. Lediglich zu dem zweck blockstrecken, unschuetzbare verbindungen usw zu identifizieren und schliessendlich auch kontakte und signale automatisch zu positionieren. Ich habe die routinen fuer gebogene und gerade spuren fertig und baue jetzt an den weichen (ist ja nur eine kombination der fertigen funktionen) und dann noch das flexgleis mit wer weis wievielen segmenten. Ist aber auch nur eine kombination schon vorhandener logik. Jetzt kann ich kuerzester zeit layouts einlesen und darstellen und konfigurieren und muss nicht mehr endlos lange auf die tracer lok warten, die sowiso nicht ueberall hinkommt. Wird interessant wenn ich das auf strassen mit x fahrspuren anwende, aber das ist noch zukunft . Hier ein beipiel der ausgabe, noch ganz elementar mit gleisnamen als label und mittelpunkte und endpunkte markiert. Aus der moeglichkeit jetzt jedes gleis und jede strecke genau zu kennen, lassen sich natuerlich auch weitere funktionen ableiten, wie anzeige von streckenlaengen, berechnen von bremsbereichen usw. Das ist ein wesentlicher schritt zur schnelleren streckenerkennung und verwertung. Gruss aus dem warmen Australien. Im Nordosten hatten wir in 3 tagen einen meter regen .. nicht schnee aber regen. Weiss gar nicht was das in schnee waere , sowas wie 10m ? So wie derzeit in Japan. - Gmd
-
Eindeutigkeit von Objekten über JSON Schnittstelle
gmd antwortete auf EASYs Thema in Erweiterungen (Plugins)
Vielen Dank, das spart mir eine menge zeit bei der umstellung. Muss aber erst einige performancetests machen. V9 ist deutlich langsamer als V8 und die grosse zeichenmenge der neuen schnittstelle hilft nicht gerade bei grossen anlagen. Ich habe "aussetzer" in der scriptausfuehrung festgestellt, habe aber noch nicht weiter detailliert getestet. Ich musste delays im programm einbauen fuer die positionierung von objekten, aber immer dann wenn ein objekt nocht nicht geladen war (internet). Das ist ja ok und nicht schuld der V9, aber an anderer stelle beim umbenennen einer grossen anzahl von objekten (alte schnittstelle) kommt es vor, dass objekte ueberbleiben und ich den vorgang fuer die restlichen wiederholen muss. Habe das aber noch nicht konsequent getestet. Es sind aber nicht immer die gleichen die ueberbleiben, ist ein zufaelliges ergebnis. Gruss gmd -
Alles schoen und gut .. Fuer lichter sind die schalter ja ok, aber fuer pantografen oder tueren ?? Da benutze ich doch lieber die veralteten Animationen. gruss Gmd
-
Eindeutigkeit von Objekten über JSON Schnittstelle
gmd antwortete auf EASYs Thema in Erweiterungen (Plugins)
Prima das habe ich noch nicht so ausprobiert mit der neuen schnittstelle. Ist das objekt selektiert nach der einfuegung ? Welche aktion verwendest du zum einfuegen mit der neuen schnittstelle ? Habe ich noch nicht ausprobiert. Danke Gruss Gmd