murat1895 Geschrieben 2. März 2015 Teilen Geschrieben 2. März 2015 Hallo zusammen, im Rahmen eines Hochschulprojekts sollen wir im Team von 5 Gruppen eine Auswertungssoftware für eine Zeitmessanlage entwickeln. Die Zeitmessanlage wird von einem Verein zum Erfassen von Rundenzeiten entwickelt. An den enstrechenden Objekten wird ein Transponder der Marke MyLaps verwendet. Die Transponder werden bei überquerung einer Aktiv-Schleife an einen AMB-Decoder weitergeleitet. Der AMB-Decoder kann per Netzwerkkabel an einen PC angeschlossen werden. (So wurde das bisher immer gemacht, es gibt auch eine bestehende Software aus Kanada, die ist allerdings teilweise schlecht umgesetzt) Wie kommen wir nun an die Daten ran? Hat da wer nen Stichwort, zu dem man sich schlau machen kann? Danke und Gruß! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
afo Geschrieben 2. März 2015 Teilen Geschrieben 2. März 2015 (bearbeitet) Der AMB-Decoder kann per Netzwerkkabel an einen PC angeschlossen werden. (So wurde das bisher immer gemacht, es gibt auch eine bestehende Software aus Kanada, die ist allerdings teilweise schlecht umgesetzt) Wie kommen wir nun an die Daten ran? Hat da wer nen Stichwort, zu dem man sich schlau machen kann? Ihr könnt ja mal mit Wireshark belauschen was das Ding so "spricht". Wenn das TCP/IP ist, dann ist das schon die halbe Miete. Es kann natürlich immernoch sein, dass das Anwendungsprotokoll irgendwie verschlüsselt ist. Edit: So, ich habe ein wenig deine Arbeit gemacht: Das Ding müßte auch eine serielle Schnittstelle haben (vielleicht euer Modell nicht). Darüber müßte es einfacher sein an die Daten zu kommen. Bearbeitet 2. März 2015 von afo Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
murat1895 Geschrieben 2. März 2015 Autor Teilen Geschrieben 2. März 2015 Vielen Dank für deine Arbeit! Ja das ding hat ne serielle Schnittstelle. Allerdings wird der Decoder ca. 20-25Meter vom Laptop, auf dem die Software laufen soll, entfernt sein (Zwischen den beiden Geräten wurde im letzten Jahr ein Cat7 Kabel verlegt). Ich werde morgen mal Wireshark drüber laufen lassen. Aber ich gehe mal davon aus, das es TCP/IP sein wird.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Wuwu Geschrieben 2. März 2015 Teilen Geschrieben 2. März 2015 Mal ganz bloede gefragt: Was sagt denn das Handbuch oder der Hersteller, wie Du an die Daten kommst? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
murat1895 Geschrieben 4. März 2015 Autor Teilen Geschrieben 4. März 2015 Der folgende Auszug stammt aus der Beschreibung. ++++++++++++++++++++++++++++++++++++++++++++++++ 1.3.4. MENU Dataserver This function enables the decoder to contact a server to upload data to. Contact AMB i.t. for more details. Within the server menu you can see/change: -Enabled: Live upload to a data server is enabled. -Host: Host name or IP address of a server to upload data to. -Port: TCP/IP port where the server receives the data -MyLaps practice code: a unique code which should be used for registering on MyLaps Practice website (Home - MYLAPS Sports Timing practice). Please visit MyLaps.com for more information about online race results +++++++++++++++++++++++++++++++++++++++++++++++++ Also muss ich irgendwie diesen bestimmten Port "abhören". Aber da es ja nicht UDP sondern TCP ist, muss ich ja eine Verbindung erstmal aufbauen?! Und wie komme ich dann an die Daten? Ich habe bisher einfach keine Ahnung davon ... -.- Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mfk'); DROP TABLE Users;-- Geschrieben 4. März 2015 Teilen Geschrieben 4. März 2015 Aber da es ja nicht UDP sondern TCP ist, muss ich ja eine Verbindung erstmal aufbauen?!Nein, du sollst einen Server implementieren. Der Verbindungsaufbau geht vom Client aus. Und wie komme ich dann an die Daten? Ich habe bisher einfach keine Ahnung davon ... -.- -> Contact AMB i.t. for more details. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
murat1895 Geschrieben 8. März 2015 Autor Teilen Geschrieben 8. März 2015 Wenn ich das ganze als Server implementieren soll, müsste ich doch bei Wireshark sehen können, das der AMB Decoder versucht, eine Verbindung aufzubauen. Allerdings sehe ich bei Wireshark nichts. Habe die IP-Adresse vom Server entprechend angepasst. Lediglich wenn ich die alte Software zur Zeitmessung starte gibt´s bei Wireshark entsprechende Einträge. Hier mal ein Screenshot. IP vom Decoder: 192.168.1.10, IP vom PC: 192.168.1.11 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mfk'); DROP TABLE Users;-- Geschrieben 8. März 2015 Teilen Geschrieben 8. März 2015 Lediglich wenn ich die alte Software zur Zeitmessung starte gibt´s bei Wireshark entsprechende Einträge.Diese Einträge zeigen aber, dass der Verbindungsaufbau vom PC ausgeht. Also ist das nicht der oben beschriebene "MENU Dataserver"-Mechanismus. Also nochmal ins Handbuch gucken. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
murat1895 Geschrieben 12. März 2015 Autor Teilen Geschrieben 12. März 2015 Soo ich habe nun folgenden Quellcode verwendet: using System; using System.Net; using System.Net.Sockets; using System.Text; public class ConsoleApplication1 { public static void Main() { string input, stringData; TcpClient server; try { server = new TcpClient("192.168.1.10", 5100); } catch (SocketException) { Console.WriteLine("Unable to connect to server"); return; } NetworkStream ns = server.GetStream(); byte[] data = new byte[server.ReceiveBufferSize]; int recv = ns.Read(data, 0, data.Length); stringData = Encoding.ASCII.GetString(data, 0, recv); Console.WriteLine(stringData); while (true) { input = Console.ReadLine(); if (input == "exit") break; ns.Write(Encoding.ASCII.GetBytes(input), 0, input.Length); ns.Flush(); data = new byte[server.ReceiveBufferSize]; recv = ns.Read(data, 0, data.Length); stringData = Encoding.ASCII.GetString(data, 0, recv); Console.WriteLine(stringData); Console.WriteLine("Neue Daten"); } Console.WriteLine("Disconnecting from server..."); ns.Close(); server.Close(); } } Nachdem startet die Console. Gibt auch etwas aus. Allerdings nur eine Zeile. Bei der While-Schleife hakt es dann. Wenn ich Beispielsweise einen Transponder über die Zeitmessanlage fahre, sehe ich diesen nun auch bei Wireshark. Aber in der Console erscheint nichts. Womit könnte das zu tun haben? Wahrscheinlich daran, dass das Progrämmchen nicht weiß, wann die Daten alle angekommen sind und geschrieben werden kann? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mfk'); DROP TABLE Users;-- Geschrieben 12. März 2015 Teilen Geschrieben 12. März 2015 Ist dir klar, dass Console.ReadLine() blockiert, bis du tatsächlich die Eingabetaste drückst? Falls ja, ist dir klar, wie das Gerät auf deine Eingaben reagiert? Hältst du dich da an ein Protokoll? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
murat1895 Geschrieben 12. März 2015 Autor Teilen Geschrieben 12. März 2015 Ach sorry, habs nun hinbekommen und zwar so: using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Text.RegularExpressions; public class ConsoleApplication1 { public static void Main() { string stringData; TcpClient server; try { server = new TcpClient("192.168.1.10", 5100); } catch (SocketException) { Console.WriteLine("Unable to connect to server"); return; } NetworkStream ns = server.GetStream(); byte[] data = new byte[server.ReceiveBufferSize]; int recv = ns.Read(data, 0, data.Length); stringData = Encoding.ASCII.GetString(data, 0, recv); Console.WriteLine(stringData); while (true) { data = new byte[server.ReceiveBufferSize]; recv = ns.Read(data, 0, data.Length); stringData = Encoding.ASCII.GetString(data, 0, recv); Console.WriteLine(stringData); } Console.WriteLine("Disconnecting from server..."); ns.Close(); server.Close(); } } Ich füge nochmal ein Bild bei, wo man den ausgegebenen String erkennt. Die 3973767 ist nun die ID vom Transponder. Wie bekomme ich es nun ideal und schlau hin, nur die IDs zu bekommen. Man könnte natürlich jetzt mit regulären Ausdrücken machen. Aber das macht man doch sicherlich nicht so oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mfk'); DROP TABLE Users;-- Geschrieben 13. März 2015 Teilen Geschrieben 13. März 2015 Normalerweise macht man so etwas, indem man sich die Protokollspezifikation ansieht. Hast du eine? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
murat1895 Geschrieben 17. März 2015 Autor Teilen Geschrieben 17. März 2015 Ne, die hab ich leider nicht. Aber ich weiß ja, dass es nach dem 11. Byte mit der Transponder-ID losgeht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
afo Geschrieben 17. März 2015 Teilen Geschrieben 17. März 2015 Ne, die hab ich leider nicht. Aber ich weiß ja, dass es nach dem 11. Byte mit der Transponder-ID losgeht. Dann brauchst du ja kein Regex. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
murat1895 Geschrieben 17. März 2015 Autor Teilen Geschrieben 17. März 2015 Dann brauchst du ja kein Regex. Okay, ging doch nicht. Erst waren die Daten, die übertragen wurden nur 42 Byte groß. Nach einiger Zeit werden sie allerdings schon 43 Byte. Und das Byte schiebt sich vorne mit ein. Vorne wird irgendetwas hochgezählt beim Übergang von 9 auf 10 hakt es dann. Da sich alles logischerweise um eine Stelle verschiebt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mfk'); DROP TABLE Users;-- Geschrieben 17. März 2015 Teilen Geschrieben 17. März 2015 Du hast da doch offensichtlich ein textbasiertes Protokoll, d.h. die Länge einer Nachricht ist nicht fest, sondern hängt von der Größe der Werte darin ab. Da sollte doch von vornherein klar sein, dass die Daten keine festen Positionen haben können. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
murat1895 Geschrieben 17. März 2015 Autor Teilen Geschrieben 17. März 2015 Okay und wie geht man dann bei textbasierten Protokollen vor? Mit regulären Ausdrücken? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mfk'); DROP TABLE Users;-- Geschrieben 17. März 2015 Teilen Geschrieben 17. März 2015 Das kommt darauf an, wie komplex das Protokoll ist. Hier würde ich einfach den String am Trennzeichen splitten und dann die Teile weiterverarbeiten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.