Jump to content

C# Client (Beta)


Mikel_60

Empfohlene Beiträge

Ein Hallo in die Runde,

nachdem ich seit ein paar Wochen das 3D-ModellbahnStudio getestet habe und alle möglichen Ratschläge und Hinweise im Forum gelesen habe, möchte ich mich Heute endlich mal zu Wort melden ;).

Im Moment fehlt mir einfach der Platz für eine Anlage in Orginal, so das mir die Version auf dem PC sehr entgegen kommt. Mich interessieren vor allem die automatischen Abläufe einer Modelleisenbahn. Da ich mich mit C# besser auskenne als mit VB, stelle ich mal eine Beta Vorlage eines C# MBS-Client hier vor.

Das 'Beta' verschwindet, wenn ich selber damit zufrieden bin ^^.

 

Michael
 

PS: Bin aus dem Beta-Stadium raus. Aktueller Download ist jetzt Version 1.0.

###############################################################################################

http://www.3d-modellbahn.de/forum/thema/6520 (MBSControl) rein.C# Client (Beta) hat seit Jan. 2015 einen Nachfolger, schaut bitte bei

###############################################################################################

C_mbs_client_1.0.zip

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Mikel_60,

erst einmal willkommen hier im Forum.

Obwohl ich in C# nur wenig Ahnung habe, freut es mich, daß es durch Deine Arbeit nun auch die Möglichkeit geben wird in C# mit der Schnittstelle zu arbeiten.

Ein kleiner Fehler ist mir in "MBS_Enums.cs" aufgefallen:

Zitat

// Die Liste der Events, Kommandos, Parameter und die Rückgabewerte findet man unter:
        // http://www.3d-modellbahn.de/wiki/3415#Sec1_1_1
        // Strg+Rechtsklick zum Öffnen des Links

... es ist Strg+Linksklick zum Öffnen...

Daß Du die Ereignisse und Kommandos über Enums "verwaltest", halte ich für eine gute Idee. Ich hatte es für den VB-Client auch mal angedacht, bin aber wieder davon abgekommen. Nachdem ich es bei Dir gesehen habe, werde ich noch einmal in mich gehen. Vielleicht wäre es sinnvoll, wenn wir uns auf gemeinsame Bezeichnungen und Sprache (Ereignisse und Kommandos in der selben Sprache) einigen... 

... eventuell hat Neo noch den einen oder anderen Vorschlag...

Noch eine Anmerkung: Ich setze die Form1 gene "TopMost", damit sie nicht immer "verschwindet", wenn man mal etwas im MBS anklickt... ist aber ansichtssache...

Wie gesagt ich habe von C# wenig Ahnung, aber wenn Du "logistische" Unterstützung brauchst... gerne!

Gruß

EASY

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke EASY,

mit Rechts und Links lässt sich schnell ändern, war ja auch schon zu vorgerückter Stunde Gestern ;). Die Vereinheitlichung der Enums wäre sinnvoll. Ich habe erstmal einfach so angefangen, wie ich es aus meiner Sicht für sinnvoll gehalten hatte. Die englischen Begriffe kommen bei mir automatisch, liegt an meiner Arbeit. Wenn du im VB-Client die Enums einfügst, können wir uns ja nochmal über die Syntax einigen. 

Das mit dem TopMost ist eine gute Idee, mache ich bei meinen Visualisierungen für Machinensteuerungen eigentlich auch so.

Ich hab schon Version 0.91 in Arbeit, eine Exception beim Disconnect wurde nicht abgefangen.

 

Gruß Michael

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mallo Michael,

Zitat

Die englischen Begriffe kommen bei mir automatisch...

... dann werde ich mich erst einmal etwas an dem orientieren, was Dir so einfällt (ich tue mich da manchmal etwas schwerer...) ... wobei ich mir nicht ganz vorstellen kann, daß "Zug betritt ein Gleis" in einer Maschienensteuerung vorkommt;)...

Gruß

EASY 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Den Clienten werd ich noch weiter testen und etwas ausbauen. Hier mal eine Version um den Baukran zu animieren. Eigentlich kann man damit alles um seine Z-Achse rotieren lassen, Hauptsache es heist 'Baukran_001' ;). Im Moment ist der Name noch nicht eingebbar, kommt aber bestimmt noch.C_mbs-client_baukran_animation.png

Minimum und Maximun sind die beiden Winkelpositionen zwischen denen der Kran hin und her schwenkt. (-180 bis 0 und 0 bis 180grd einstellbar) Am jeweiligen Ende macht er eine Pause von 5 sec.

Mh, ok die Taktzeit ist nicht x1s sondern aktuell x100ms, die Schrittweite beträgt 0,05Grad, sonst ruckelt der Kran zu sehr.

Meine Großbaustelle, fürchte die wird nie fertig.

Baukran_animiert1.png

Hoffe es kann jemand gebrauchen und hat noch ein paar Anregungen.

Ich hätte da schon was in Vorbereitung, Ein- und Ausschalten von der EV aus.

 

Gruß Micha

Mbs_baukran.zip

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

hab den Client jetzt auf Version 1.0 hochgestuft ;), werd wohl sonst nie fertig damit. Der Client steht zur allgemeinen Verfügung, falls ihr ihn in eigene C# Projekte einbinden möchtet. ich habe ihn so angepasst, das er in meine geplanten Projekte am Besten reinpasst. Wer noch Wünsche oder Fragen dazu hat, darf sich gerne bei mir melden.

@Neo, darf ich mir noch ein Event wünschen, das das MBS wirft sobald er beendet wird, bzw. das Projekt geschlossen wird. Event 21 würde sich dazu prima anbieten. ;)

20:  Neues Projekt wurde geladen

21: Projekt wurde geschlossen

 

LG Michael

C_mbs_client_1.0.zip

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Michael,

ich habe deinen Client mit in die Liste der vorhandenen Vorlagen aufgenommen. Eine kleine Bitte noch: Wenn du deinen Client aktualisierst, dann bearbeite am besten deinen ersten Beitrag und ersetze die Datei direkt dort. Ansonsten müssten die Leute immer erst durch das gesamte Thema durchscrollen um die aktuellste Version zu finden.

Das Ereignis 21 werde ich für das nächste Update vorsehen.

Viele Grüße,

Neo

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Micha,

... da ich neugierig bin und Du geschrieben hast:

Zitat

ich habe ihn so angepasst, das er in meine geplanten Projekte am Besten reinpasst

... würde mich natürlich interessieren wo(-rin) Deine "spezielle" Anpassung (be-) steht.

Einen kleinen Verbesserungsvorschlag in den Enums hätte ich noch...

Zitat

 GroupTwoObjects = 140,  // Verknüpft zwei Objekte (A folgt B)
 UngroupObject = 141,    // Hebt die Verknüpfung eines Objektes auf.

... da eine Verknüpfung eine gewisse Funktion hat (A folgt B) sollte sie sich namentlich von einer Gruppe abheben. Mein Vorschlag wäre:

LinkTwoObjects = 140 und UnlinkObjekt = 141

In der "alten" Schnittstelle (EP13), hatte Neo einen "Befehssatz" vorgegeben... Ich hänge ihn einfach mal mit an... nur als Anregung für Enums (wobei ich Deine Namensgebungen teilweise für besser verständlich halte)... ist aber (wie so vieles) persönliche Ansichtssache...

Gruß

EASY

P.S. @alle: .... um Missverständnissen vorzubeugen... Der Befehlssatz in der PDF hat nichts zu tun mit der MBS-Schnittstelle (nur die Funktionen sind teilweise die gleichen...)

Ep13-schnittstelle-befehlssatz-2013-04-11.zip

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo EASY,

danke für den ep13-schnittstellen-befehlssatz, ich werde meine Übersetzungen nochmal anpassen, falls sich die Funktionen dadurch besser selbst erklären.

Jetzt zu deiner Frage mit der Anpassung. Der Client kann als DLL in das Programm eingebunden werden, ähnlich dem EBPControl() aus der ep13-Schnittstelle. In meinen Projekten binde ich den Client dann als externe Abhängigkeit, die zum Erstellen der Software erforderlich ist mit ein. Dazu wird keine Kopie mit eingecheckt sondern Verweise auf Repositorities.  (siehe: http://svnbook.red-bean.com/de/1.6/svn-book.html#svn.advanced.externals )

Damit kann ich bei Änderungen am Client, diese alle meinen Projekten zur Verfügung stellen, ohne mit Kopieren beginnen zu müssen. Auch Änderungen an der Übersetzung z.Bsp. wären dann in allen Projekten gleich aktualisiert.

Die Kommandos kann man später dann auch über die Schnittstelle des Client aufrufen, ohne den Kommandostring selber zusammen bauen zu müssen. Siehe auch hier die EP13-Schnittstelle. ;)

Ich werde nicht alle Kommandos sofort einbinden, sondern nach und nach.

War das ausreichend als Antwort erstmal?

Viele Grüße Michael

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Michael,

Danke ... erstmal ausreichend:)... als "Hobbyprogramierer" brauchte ich etwas länger, bis ich durch "Analyse" Deiner Version 1.0 zu der Vermutung gelang bin, daß der Client auf eine DLL hinausläuft. Daß Du meine Vermutung bestätigst, freut mich natürlich... Da ich die Idee der Aktualisierung auf diese Weise sehr interessant finde, bin ich etwas "angefressen" und auch wenn ich noch nicht weiß, wie man so etwas in VB umsetzen könnte, sehe ich es mal als kleine Herausforderung für lange Winterabende und (wenn Du nichts dagegen hast), werde ich bei Dir noch etwas "abspicken"...

Zu den Enums habe ich mir noch ein Paar Gedanken gemacht.

In meiner "Logik" schreibe ich nach "Get" bzw. "Set" nicht das was gemacht wird, sondern mit wem was gemacht wird...

Beispiel mit Objekten:

Statt...

ListNames = 100,    // Liefert eine Liste der Namen aller Objekte auf der Anlage zurück.
GetTypOfObject = 101,   // Gibt den Typ eines Objektes zurück.
GetPosOfObject = 102,   // Gibt die 3D-Position eines Objektes zurück.
SetPosOfObject = 103,   // Setzt die 3D-Position eines Objektes.
GetAngleOfObject = 104, // Gibt die Rotation eines Objektes um die 3 Achsen zurück.
SetAngleOfObject = 105, // Setzt die Rotation eines Objektes.
GetScaleOfObject = 106, // Gibt die Skalierung eines Objektes zuzrück.
SetScaleOfObject = 107, // Setzt die Skalierung eines Objektes.
GetSizeOfObject = 108,  // Gibt die Größe eines Objektes zurück.

... sieht es bei mir so aus... (halte ich für etwas übersichtlicher wenn beim Programmieren "Eingabevorschläge" gemacht werden...)

 GetObjectNames = 100    ' Liefert eine Liste der Namen aller Objekte auf der Anlage zurück.
 GetObjectTyp = 101   ' Gibt den Typ eines Objektes zurück.
 GetObjectPos = 102   ' Gibt die 3D-Position eines Objektes zurück.
 SetObjectPos = 103   ' Setzt die 3D-Position eines Objektes.
 GetObjectAngel = 104 ' Gibt die Rotation eines Objektes um die 3 Achsen zurück.
 SetObjectAngel = 105 ' Setzt die Rotation eines Objektes.
 GetObjectScale = 106 ' Gibt die Skalierung eines Objektes zuzrück.
 SetObjectScale = 107 ' Setzt die Skalierung eines Objektes.
 GetObjectSize = 108  ' Gibt die Größe eines Objektes zurück.

... ich hänge mal meine derzeitige Liste als einfache Textdatei mit an.

P.S. Bei mir heißen die Enums "Commands" und "Events", da mir VB den Namen "Event" als "ungültigen Bezeichner" verweigert (gibt es in VB schon...)

... Der Link geht überigens nicht... unvollständig?

Gruß

EASY

Enums.zip

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Easy,

erstmal auf die Schnelle, mit dem Link war mein Fehler, zeigt auf eine Seite unseres internen Wikis auf Arbeit. Ich korrigiere den Link Oben auf eine deutsche Beschreibung zu SVN.Externals (Dependencies).

http://svnbook.red-bean.com/de/1.6/svn-book.html#svn.advanced.externals

Deine Notation für die Enums gefällt mir, ich werde sie bei mir auch so übernehmen.

 

Gruß Micha

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...