Zusi-TCP-Schnittstelle für .NET

Soundthesizer, Zusitool und andere Zusatzsoftware

Moderatoren: Andreas Damm, Jens Haupert

Nachricht
Autor
Andreas Karg
Beiträge: 4718
Registriert: 28.04.2002 12:56:00
Kontaktdaten:

Zusi-TCP-Schnittstelle für .NET

#1 Beitrag von Andreas Karg »

Ich habe vor einiger Zeit eine Kapselung für die TCP-Schnittstelle von Zusi 2 in C# geschrieben. Mit dieser kommt man recht einfach an die Daten von Zusi heran, ohne dass man etwas über Netzwerkprogrammierung und das Zusi-Protokoll wissen müsste. Die DLL lässt sich von jeder .NET-Sprache aus einbinden. Beigelegt sind einige Beispiele in Visual Basic. Eine Portierung nach C# ist vorgesehen.

Die Dokumentation der DLL ist über den Objektbrowser von Visual Studio erreichbar. Wenn trotzdem Fragen und Probleme auftauchen, helf' ich natürlich gern weiter. Für die Verwendung der Schnittstelle ist es hilfreich zu wissen, was Delegaten und Ereignisse sind - ganz doof den Code aus dem Beispielprogramm kopieren geht aber auch. So kompliziert isses nicht.

Ich wünsche viel Spaß beim Basteln!

Download:
Vorkompiliert (mit Beispielen in Quellcode)
Github (Quellcode inkl. Beispiele)

Kommentare, Anregungen, Kritik und Fragen sind generell äußerst erwünscht - insbesondere hinsichtlich des Programmierstils. Man will sich ja weiterbilden. :-)

Grüße
Andi

Edit 17.06.13:
Der obligatorische Hotfix um kurz nach Mitternacht auf Version 1.2a.
  • Absturz bei regulärem Disconnect behoben.
  • C#-Beispiel von F. Schn. integriert.
Edit 16.06.13:
Release der neuen Version 1.2.
  • Diverse behobene Abstürze
  • Sinnvollere Fehlermeldungen
  • Unterstützung für die PZ80 mit den Zugartleuchten U und M
  • ZusiTcpConn heißt jetzt ZusiTcpClientConnection. Der alte Name kann vorläufig(!) weiter verwendet werden - eine entsprechende Warnung wird beim kompilieren angezeigt.
  • Diverse kleine Fehlerbehebungen
Besonderer Dank geht an F. Schn. für viele Anmerkungen, die Codebeispiele und Arschtritte, wenn ich mal wieder welche brauchte.

Edit 28.10.12/2:
Release der neuen Version 1.16.
  • Neue Überladung: ZusiTcpConn.Connect(IPEndPoint)
  • Nochmal Korrekturen an der Doku
  • Die eigentlich nicht zum Gebrauch bestimmte TCPCommands-Klasse wird für die IDE ausgeblendet.
  • Diesmal mit richtiger Zahl in der Assembly-Version.
Edit 28.10.12:
Release der neuen Version 1.15.
Der Quellcode der Schnittstelle wurde noch ein bisschen aufgeräumt, die Beispiele sind jetzt ordentlich eingepflegt und die Lizenztexte passen auch zusammen. :-)

Edit 27.10.12:
Release der neuen Version 1.1.
Diverse Änderungen, die so aufgelaufen sind; u.A. neue Ereignisbehandlung mit Unterscheidung aller Datentypen, die Zusi ausgibt.
Es sind ein paar Beispielprogramme in VB.Net beigelegt, die freundlicherweise von F. Schn. hier aus dem Forum beigesteuert wurden. Eine Portierung der Beispiele nach C# steht noch aus.

Die TCP-Schnittstelle steht nunmehr unter der LGPL.
Zuletzt geändert von Andreas Karg am 17.06.2013 01:54:37, insgesamt 11-mal geändert.

funkheld
Beiträge: 305
Registriert: 15.09.2010 11:52:44

Re: Zusi-TCP-Schnittstelle für .NET

#2 Beitrag von funkheld »

Hmm...., ich möchte das in Purebasic machen.
Wie hast du das Zusi2 direkt angezapft , ohne Netzwerk usw ?
Oder wie kann ich die Daten direkt mit meinem Clienten mit Purebasic abfragen ?

Danke.

Gruss
Zuletzt geändert von funkheld am 05.02.2012 18:55:20, insgesamt 1-mal geändert.

Andreas Karg
Beiträge: 4718
Registriert: 28.04.2002 12:56:00
Kontaktdaten:

Re: Zusi-TCP-Schnittstelle für .NET

#3 Beitrag von Andreas Karg »

Hallihallo. Meine Schnittstelle benutzt genauso den TCP-Server wie alle anderen auch. Was ich gemacht habe war lediglich, die ganze Bitschubserei (und davon gibt's einige!) so zu kapseln, dass man sie nicht mehr sieht.
Wer meine Schnittstelle verwendet, muss folglich von dem ganzen Gedöns keine Ahnung mehr haben. Es reicht, dem Programm weiterzugeben, wo es den TCP-Server findet und welche Daten von Zusi gewünscht sind.
Wenn du das selber implementieren willst, empfehle ich die Lektüre der Hilfedatei des TCP-Servers. Da ist das Protokoll drin beschrieben.

funkheld
Beiträge: 305
Registriert: 15.09.2010 11:52:44

Re: Zusi-TCP-Schnittstelle für .NET

#4 Beitrag von funkheld »

Hallo, kannst du davon eine fertige EXE herstellen für mich und wie ich mit dem Programm kommuniziere ?

Danke.

Gruss

Andreas Karg
Beiträge: 4718
Registriert: 28.04.2002 12:56:00
Kontaktdaten:

Re: Zusi-TCP-Schnittstelle für .NET

#5 Beitrag von Andreas Karg »

Öhmmmmmmmmm... Ich glaube, wir haben da unterschiedliche Vorstellungen davon, wie das funktionieren soll. Wie soll denn eine solche EXE mit deinem Programm kommunizieren? Per TCP? Dann wären wir wieder am Anfang. :-}
Das, was du dir da oben runterladen kannst ist eine fix und fertige DLL, die man superbequem in ein .NET-Projekt einbinden kann. Dazu muss man aber halt eine .NET-Sprache benutzen. Wenn du bei deinem BASIC bleiben willst, wird dir wohl nix anderes übrigbleiben als das Protokoll selber zu implementieren. :-/

Benutzeravatar
Max Senft
Administrator
Beiträge: 3004
Registriert: 04.11.2001 14:01:40
Aktuelle Projekte: Dies und das
Wohnort: Blieskastel, Saarland, Deutschland
Kontaktdaten:

Re: Zusi-TCP-Schnittstelle für .NET

#6 Beitrag von Max Senft »

Hi,

eine kurze Recherche ergab, dass "Purebasic" auch externe DLLs aufrufen kann. Schaut auch nicht allzu kompliziert aus... wie "drin" bist du denn in der PureBasic Programmierung?

Grüße
Max
Administrator, Programmierer, Ansprechpartner bei Problemen mit dem Board

Andreas Karg
Beiträge: 4718
Registriert: 28.04.2002 12:56:00
Kontaktdaten:

Re: Zusi-TCP-Schnittstelle für .NET

#7 Beitrag von Andreas Karg »

.NET-DLLs von einer Nicht-.NET-Umgebung aus? Geht sowas?

Benutzeravatar
F. Schn.
Beiträge: 6607
Registriert: 24.10.2011 18:58:26

Re: Zusi-TCP-Schnittstelle für .NET

#8 Beitrag von F. Schn. »

Offenbar ja :] (über einen COM-Funktionsaufruf): http://de.wikipedia.org/wiki/.NET#Managed_und_Unmanaged ?(
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat

Andreas Karg
Beiträge: 4718
Registriert: 28.04.2002 12:56:00
Kontaktdaten:

Re: Zusi-TCP-Schnittstelle für .NET

#9 Beitrag von Andreas Karg »

Spannend. Müsste man sich fast mal genauer angucken... Ansonsten könnt ich die Schnittstelle vermutlich mit vertretbarem Aufwand nach C++ portieren und dann als normale DLL anbieten.

funkheld
Beiträge: 305
Registriert: 15.09.2010 11:52:44

Re: Zusi-TCP-Schnittstelle für .NET

#10 Beitrag von funkheld »

Mir ging es nur darum, den Zusi-TCP-Server mit Purebasic zu nutzen um dann meine eigene Grafikspielerei damit herstellen, die Daten Grafisch darstellen nach meinen vorstellungen.
Die Anbindung mit Purebasic an den Zusi-TCP-Server hat jetzt wunderbar geklappt und funktioniert tadellos:
http://forum.zusi.de/viewtopic.php?f=34&t=10704

Jetzt steht der eigenen Kreativität nichts mehr im Wege, wenn mir einer noch erzählen kann, wie die 4Btye-Werte ausgewertet werden als normale zu verarbeitende Zahl.

Danke.

Gruss
Zuletzt geändert von funkheld am 08.02.2012 15:03:01, insgesamt 2-mal geändert.

Stephan/Taschi
Beiträge: 1050
Registriert: 30.10.2009 11:40:27
Aktuelle Projekte: Zusi boykottieren, gelegentlich mal gesperrt sein

Re: Zusi-TCP-Schnittstelle für .NET

#11 Beitrag von Stephan/Taschi »

Andreas Karg hat geschrieben:Spannend. Müsste man sich fast mal genauer angucken... Ansonsten könnt ich die Schnittstelle vermutlich mit vertretbarem Aufwand nach C++ portieren und dann als normale DLL anbieten.
Wäre zumindest toll - ich hätte ja ein paar Kleinigkeiten, die ich gerne mal umsetzen würde, aber mit .NET werde ich mich nie anfreunden.

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33375
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Zusi-TCP-Schnittstelle für .NET

#12 Beitrag von Carsten Hölscher »

zur 4byte-Frage s. Doku vom TCP-Server. Wie man das in basic macht, müßte dann mal ein Basicexperte sagen.

Carsten

Jan
Beiträge: 511
Registriert: 28.11.2007 19:13:51
Wohnort: Stutensee

Re: Zusi-TCP-Schnittstelle für .NET

#13 Beitrag von Jan »

Andreas Karg hat geschrieben:.NET-DLLs von einer Nicht-.NET-Umgebung aus? Geht sowas?
Man kann anscheinend auch ohne COM auskommen, und Funktionen in einer .NET-DLL direkt für Win32 exportieren, das Stichwort lautet Reverse P/Invoke. Ausprobiert habe ich es aber auch nicht...

funkheld
Beiträge: 305
Registriert: 15.09.2010 11:52:44

Re: Zusi-TCP-Schnittstelle für .NET

#14 Beitrag von funkheld »

Es reicht, dem Programm weiterzugeben, wo es den TCP-Server findet und welche Daten von Zusi gewünscht sind.
Sag mal, das wünschen der Daten verstehe ich nicht.

Wenn ich mein Display-programm von Purebasic einbinde im TCP, muss ja Zusi als letzte an den TCP gebunden werden und da erscheint in Zusi dann die Auflistung der Daten, die angefordert werden.

Ich kann dann im danach den Datenstrom im Hinblick auf die gewünschten Daten nicht mehr ändern, das geht nur, wenn ich erst wieder alles vom Netz nehme und alles neu Starte.

Wie machst du das?

Danke.

Gruss

Andreas Karg
Beiträge: 4718
Registriert: 28.04.2002 12:56:00
Kontaktdaten:

Re: Zusi-TCP-Schnittstelle für .NET

#15 Beitrag von Andreas Karg »

Genau so. Der Schnittstelle muss erst gesagt werden, was gebraucht wird. Dann kann man sie mit dem TCP-Server verbinden und dann Zusi mit selbigem. Braucht man andere Daten, muss man die Verbindungen erst alle wieder trennen und kann sie dann neu aufbauen. Ist halt leider ein Problem im Protokoll...

Benutzeravatar
F. Schn.
Beiträge: 6607
Registriert: 24.10.2011 18:58:26

Re: Zusi-TCP-Schnittstelle für .NET

#16 Beitrag von F. Schn. »

Andreas Karg hat geschrieben:Ich würde mich freuen, wenn der eine oder andere Nutzer seine Meinung und Erfahrungen über mein Werk kundtäte. Das hilft mir, die Schnittstelle weiter zu verbessern.
Mal eine Frage: Waum nutzt du keine Ereignisse (events), sondern "feste" Delegaten?
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat

Andreas Karg
Beiträge: 4718
Registriert: 28.04.2002 12:56:00
Kontaktdaten:

Re: Zusi-TCP-Schnittstelle für .NET

#17 Beitrag von Andreas Karg »

Weil mir bis vor 10 Sekunden (habs eben nachgelesen) der Unterschied nicht soweit klar war, dass ich mich bewusst für das eine oder andere entschieden habe. :-D Habs mir mal vorgemerkt für die nächste Version.

Im Übrigen hab ich mich entschlossen, den Quellcode zur Schnittstelle zu veröffentlichen. Er findet sich jetzt hier. Vielleicht bringt's ja dem einen oder anderen was. :-)

Man beachte, dass die Historie auf Github unvollständig ist. Ich hab die Schnittstelle erst komplett ohne Versionskontrolle, dann mit Subversion, dann mit Mercurial und jetzt schlussendlich mit Git geschrieben. Da ich zu faul war, mich jeweils in die Tücken der Umwandlung von einem Repostyp zum nächsten einzuwurschteln, hab ich einfach bei Null angefangen. Dürfte jetzt nicht mehr passieren, weil ich mich bei Git bestens eingelebt hab. Kann ich nur jedem empfehlen, das Teil. :-)

Benutzeravatar
Erik Semt
Beiträge: 111
Registriert: 11.08.2009 18:37:46
Aktuelle Projekte: Bau Führerstand 1216 | Taurus MFA
Wohnort: Lohsa/ Nürnberg

Re: Zusi-TCP-Schnittstelle für .NET

#18 Beitrag von Erik Semt »

Alter Schwede....

da haste dir ja die Finger blutig geschrieben wa? :)

Gruß Erik
Aktuelles Projekt:
Fahrpult der BR 183/ Rh 1216 | Taurus MFA

Benutzeravatar
Jens Haupert
Beiträge: 4896
Registriert: 23.03.2004 14:44:34
Aktuelle Projekte: http://www.zusidisplay.de
Wohnort: Berlin
Kontaktdaten:

Re: Zusi-TCP-Schnittstelle für .NET

#19 Beitrag von Jens Haupert »

Erik Semt hat geschrieben:da haste dir ja die Finger blutig geschrieben wa? :)
Hallo Erik,
du bist scheinbar nicht im "Programmiergeschäft" tätig, oder? :D Mein Zählskript sagt 838 Zeilen. Zum Vergleich hat ZusiDisplay (und damit nix Dolles) etwas über 209.000 Zeilen.

@Andreas: prima Sache, damit sollte jeder aufsetzen können. Die Umsetzung mit den Delegaten wie du's gelöst hast, kannte ich selbst gar nicht. :hat2

MfG Jens

Andreas Karg
Beiträge: 4718
Registriert: 28.04.2002 12:56:00
Kontaktdaten:

Re: Zusi-TCP-Schnittstelle für .NET

#20 Beitrag von Andreas Karg »

Um mal die Maßstäbe klarzumachen: Zusi 2.1 hatte anno 2002, als Carsten zum Zweijährigen ein kleines Gewinn-Schätzspiel ausgeschrieben hat, ungefähr 70.000 Codezeilen oder so. Das weiß ich nur, weil ich damals 65536 geschätzt hatte und damit relativ nah dran lag. ^_^
Mit anderen Worten: ZusiDisplay kann heute mehr als Zusi vor 10 Jahren. X-)

Danke übrigens für die lobenden Worte. *verbeug*
Alles nur eine bescheidene Nebenbei-Leistung im Vergleich zum Display und anderen Projekten.

Antworten