Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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ß!

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 von afo

  • Autor

Vielen Dank für deine Arbeit! :D

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....

  • Autor

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 ... -.-

  • Autor

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 post-70962-14430449963202_thumb.jpg

  • Autor

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?

  • Autor

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?

post-70962-14430449969857_thumb.jpg

  • Autor
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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.