Mr.F
Mitglieder-
Gesamte Inhalte
14 -
Benutzer seit
-
Letzter Besuch
-
Hi @Neo, das ist die Info die ich brauchte, DANKE . Aber die Info das die Schalter sich an dem verbundenen Object orientieren, habe ich im Wiki nicht finden können. Wäre vllt. eine ergänzung Wert, das finde ich ist schon eine wichtige Information. Hab mir schon den Kopf zerbrochen, wie man das anstellen kann und so einfach ist es. Bei den Signalen, kann man ja Zustände beim Importieren festlegen, bei Schaltern gings nicht, daher dachte ich ist nicht so einfach machbar. Ich danke euch für euren Support. Dann kann ich ja loslegen wenn die DLL für die Schnitstelle fertig ist. Nette Grüße, Mr.F.
-
Hallo @Reinhard, danke dir schonmal für die Infos. Vllt. hat ja noch ein "Experte" hier eine Idee bezüglich der Schalter. Meine einzige Idee wäre, zu versuchen die Model-Datei nach dem Import auf der Platte zu sichern, und mal zu schauen ob ich mit Reverse-Engeneering da was machen kann, aber damit würde ich vermutlich gegen die EULA verstossen(auch wenn ich die exe nicht anfassen täte). Nette Grüße, Mr.F. Wobei nach weiterer überlegung, bringt das wohl auch nichts, wenn ich das/die Bytes finde welche für den ObjectTyp sind und so zum schalter mache, wird das MBS sicher trotzdem nur 2 Zustände nutzen.
-
Hi, ich plane nun auch ein paar Modelle zu machen. Bevor ich mir die Mühe mache und alles mit NormalMaps und LightMaps mache, frage ich lieber erstmal nach, was so machbar ist. Sind NormalMaps unterstützt? Sind LightMaps unterstützt? Wie ist das mit den Dateilstufen? Im Wiki steht das X-Dateien mit Dateinamen die auf _LOD1 und _LOD2 enden automatisch geladen werden. Wie soll das dann aussehen? model.x model.x_LOD1 model.x_LOD2 oder model.x model_LOD1.x model_LOD2.x ? Zu Schaltern: Bei analogen Schaltern kann man Werte -100 .... +100 setzen. Digitale Schalter haben nur 2 Zustände. Wie soll man da sinnvoll einen Schalter für eine Kreuzweiche machen? Habe ich zwar schon testweise hinbekommen(analog), aber dann kann man nicht durch klicksen auf's Object durch die Zustände Schalten, nur wenn markiert, durch die trackBar im Property-Fenster. Klar könnte ich den Schalter einfach als Signal importieren, aber dann ist das halt ein Signal und kein Schalter und wird auch so vom MBS interpretiert. Kann man da irgendwie Tricksen? Nette Grüsse, Mr.F.
-
Bitte einen weiteren Command in der Schnittstelle.
Mr.F antwortete auf Mr.Fs Thema in Feature-Wünsche
Hi, jetzt gerade beim schreiben der Bibliothek viel mir noch eine kleinigkeit auf, bei den Signalen kann man den Zustand setzen, auslesen. Aber nicht wie z.B. bei Gleisen mit mehreren Routen die Anzahl der Routen auslesen. Wenn du auch noch rein machen würdest das man feststellen kann wie viele Status(man beachte den Plural) ein Signal hat, wäre ich dir sehr dankbar, da dies u.U. eine wichtige information sein kann. Weitere Wünsche bezüglich der Schnittstelle kann ich jetzt schon sagen werde ich keine haben, dieser Punkt viel mir leider jetzt erst auf. Nette Grüße Mr.F. -
Hey, ich hatte zwar dran gedacht einfach nur die DLLs(x86, x64) zu teilen, aber ich wäre auch bereit den Source hier unter MIT-License zu teilen. Ist ja kein Projekt, mit dem ich $'s generieren würde. Ich hätte aber auch Bedenken, was Runables angeht. Ich hätte zwar nicht obfuskiert, der Code wäre aus dem Kompilat also fast zu 100% wieder herstellbar mit ilspy. ( .NET-Decompiler), aber so ist uns beiden wohl bei der Sache. Ich schätze am Wochenende werde ich alles implementiert haben, muss dann nur noch mal alles durch debuggen, mache dann einen Thread auf, in dem ich dann das Projekt inkl. Support anbieten werde. Nette Grüße, Mr.F.
-
Bitte einen weiteren Command in der Schnittstelle.
Mr.F antwortete auf Mr.Fs Thema in Feature-Wünsche
Nabend Neo, das ist echt toll . Ich glaube sobald V5 auf DVD erscheint, gönn ich mir die Version auch. Hab mir das mit den LUA-Scripten oberflächlich mal angeschaut, finde ich soweit ganz toll, kann man einiges mit zaubern. Nette Grüße Mr.F. -
Nabend, kannst du warscheinlich doch. Jeder moderne Webbrowser kann sie darstellen. Auch nahezu jedes "Malprogramm" kann das, zumindest das erst Bild in der GIF(Ist ja ein Container in dem mehrere Bilder sein können, Paint.net z.B. kommt nur ans erste bild daraus). Beim nächsten mal wenn kein grafikprogramm installiert ist, das damit umgehen kann, einfach im Webbrowser öffnen. Nette Grüsse, Mr.F.
-
Moin, auch wenn die Schittstelle veraltet ist, bitte ich um ein einen weiteren Parameter für's Event 70 (Animation wurde gestartet/gestoppt). Event->Parameter:(3. Parameter neu) String - Name des Objektes String - Name der Animation Zahl - 0 für Gestoppt, 1 für gestartet. Auch ein Command 154 wäre toll, mit 153 kann man die Position in der Animation setzen, aber man kann sie nirgends auslesen.
-
I am currently doing a DLL for .NET. It will support everything the interface offers. A few extras I will gradually add, for example. a simplified train control over track names in connection with the events. I think I have 35% ready now(Eventlistening is nearly done, all that's left is the rest of the commands) but when LUA gets a network-interface in the MBS, I will take a look at it too. The current state of work.
-
Hi, es wäre wirklich sehr gut, wenn man für eigene analoge Schalter selbst ein minimum und ein maximum angeben kann, (Prozent oder Anzahl Stellmöglichkeiten). Immer -100 bis +100 Prozent, ist nicht wirklich komfortabel. Ein festlegbarer Default-Wert und ein Button um diesen zu setzen(Wo die Trackbar für % ist, wie bei den Triebwagen/Loks), wäre auch fein. Nette Grüsse, Mr.F
-
Hi, ich mache mir gerade eine DLL für .NET. In einer oder zwei Wochen sollte ich das fertig haben. (Wenig Zeit) Wenn es erlaubt ist DLL-Dateien hier anzubieten, werde ich sie euch hier gerne zur verfügung stellen. @Neo Wie sieht es hier mit DLLs und EXEs aus? Darf man so etwas hier im Forum verbreiten? Hier habe ich dir ein wenig Code vorbereitet(aus meinem Code zurechtkopiert), so siehst du schon mal wie du Commands versendet und die Antworten auswertest. Mit dem Code kannst du die Soll- und Ist- Geschwindigkeit setzen, wie auch auslesen(Funktionen GetVehicleSpeed und SetVehicleSpeed, beide callen SendCommand, so täte ich das dann auch bei Signalen oder Tracks machen). Ich denke mal damit solltest du klar kommen, alle Commands sind ja gut dokumentiert. Denke daran IP, Port und Name der Lok anzupassen. Imports System.Net.Sockets Imports System.Text Public Class Form1 Const IP As String = "127.0.0.1" Const CommandPort As Integer = 31285 Public Enum MBSCommandId GetVehicleSpeed = 370 SetVehicleSpeed = 371 End Enum Public Enum SpeedModes [Is] = 0 Should = 1 End Enum Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Timer1.Interval = 500 Timer1.Start() End Sub Private Sub SetVehicleSpeed(vehicleName As String, speed As Single, speedMode As SpeedModes) SendCommand(MBSCommandId.SetVehicleSpeed, {vehicleName, speedMode, speed.ToString()}) End Sub Private Function GetVehicleSpeed(vehicleName As String, speedMode As SpeedModes) As Single Return CSng(SendCommand(MBSCommandId.GetVehicleSpeed, {vehicleName, speedMode})) End Function Private Function SendCommand(commandId As Integer, Optional params() As String = Nothing) As Object Using client As New TcpClient client.Connect(IP, CommandPort) If client.Connected Then Using stream As NetworkStream = client.GetStream() Dim query As String = "" If params Is Nothing Then query = commandId & vbLf Else query = commandId & ";" For i = 0 To params.Length - 1 If i = params.Length - 1 Then query &= params(i) & vbLf Else query &= params(i) & ";" End If Next End If Dim buf() As Byte = Encoding.Default.GetBytes(query) stream.Write(buf, 0, buf.Length) If stream.CanRead Then buf = New Byte(1024) {} Dim readed As Integer = stream.Read(buf, 0, buf.Length) Dim x As String = Encoding.Default.GetString(buf, 0, readed) If x.Contains(";") Then Dim data() As String = x.Split(";") If data(0) = "1" Then Select Case commandId Case MBSCommandId.GetVehicleSpeed Return CSng(data(1).Replace(".", ",")) End Select Else Select Case commandId Case MBSCommandId.GetVehicleSpeed Return -1111.1F End Select End If End If End If End Using End If End Using Return Nothing End Function Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick Dim speedIs As Single = GetVehicleSpeed("Bahn1", SpeedModes.Is) 'ist geschwindigkeit Dim speedShould As Single = GetVehicleSpeed("Bahn1", SpeedModes.Should) ' soll -geschwindigkeit If speedIs < -1000 OrElse speedShould < -1000 Then Return '-1111.1F means an error End If 'show values as text of the form Text = speedIs & " / " & speedShould End Sub End Class
-
Moin, ja eine Netzwerkschnittstelle ist brauchbar . Mich hat FileMapping( Named Shared Memory ) begeistert, ein Entwickler eines Rennspiels welches ich Spiele, hat das für Telemetry-Daten implementiert, kann also jederzeit aktuelle Werte des aktuellen Rennens und des Fahrzeugs auslesen, den Zugriff kann man Les- und Schreib- bar machen. https://docs.microsoft.com/en-us/windows/win32/memory/sharing-files-and-memory
-
Also wenn es die Schnittstelle nicht mehr gäbe, dann ein TCP Plugin, so das ich Datenstränge hin und her bekomme. Wobei ich erstmal Wissen muss, was da alles an Plugins machbar ist, daher die Frage zu Dokumentationen. Schade das die Schnittstelle schon veraltet ist, hätte ich jetzt eine NET-DLL gemacht, aber lohnt nicht mehr. Mit VB.Net und ein paar Arduino Nano's auf der (realen)Anlage und diesem Simulator, wär schon eine feine Steuerung. Ich schau mir mal die Sache mit den LUA-Scripten an, hatte ich bisher noch keinen kontakt mit, vllt. stehen ja Sockets zur Verfügung. Mal schauen was so drin ist...
-
Hi, mittlerweile hab ich mir das Modelbahnstudio gegönnt. Hab schon die ersten Fragen. Damals im Eisenbahnplaner 2013 gab es eine Schnitstelle für .NET. Gibt es das auch für das Modelbahn-Studio? Wie kann man sonst noch mit eigenen Programmen kommunizieren? Wie entwickel ich Plugins? Gibt es offizielle Dokumentationen? Danke im voraus