Falscher Zeichensatz nach RS232-Abfrage?!?

  • Hallo Forum,

    ich habe folgendes Problem: Ich möchte einen RS232-RFID-Reader abfragen und die Seriennummer des RFID-Tags auslesen. Leider bekomme ich als Antwort unleserliche Zeichen. Ich habe den Verdacht, dass der Zeichensatz falsch ist, bin aber nicht sicher wo das Problem wirklich liegt. Mit demselben Skript andere Geräte ansprechen (Conrad Relaiskarte, ein ISDN-Telefon) klappt Problemlos.

    Auch ergibt die Abfrage je nach RFID-Tag die gleiche Antwort,so dass man an der Antwort erkennen kann, dass der RFID-Tag erkannt wird. Nur kann ich aus den wilden Zeichen einfach nicht die Seriennumer des RFID-Tags ableiten.

    Im Anhang schicke ich mal das "magere" Protokoll des Readers. Ich sende "03 02 05" und erwarte als Antwort "06 03 " + die Seriennummer. Ich bekomme: "6 <ACK><ETX>ˆ<EOT>Ô#Œ"

    Ich habe schon mit einigen Konvertierungen "experimentiert" und auf einen Glückstreffer gehofft, das hat aber bisher nicht geklappt und ich bin mit meinem Ideen am Ende.
    Habt Ihr eine?

    Danke im Voraus!

  • Wichtig sind die Funktionen, die du zum Auslesen der Antwort verwendest. Es wäre schön, dazu einmal ein wenig Code zu sehen. Nur allein mit dem falschen Resultat lässt sich wenig Aufschluss über das Problem an sich geben.

  • naja, du bekommst das Ergebnis als String zurückgeliefert, und nicht als Hexcode.

    [autoit]

    stringtobinary()

    [/autoit]

    sollte helfen...
    Schau mal im Anhang der AutoIt-Hilfe in die Ascii-Tabelle,
    <ACK> ist 0x06 und <ETX> ist 0x03, also genau dein erwartetes Ergebnis!

  • minx,
    das werde ich berücksichtigen und nächstes mal den Code posten. Hast natürlich recht...

    Andy: Das war es! Vielen Dank! Allerdings wäre ichda nie drauf bekommen. Wiso muss denn das zu binary gewandet werden? Ich bekomme doch einen String und möchte diesen mit einem anderen String vergleichen, bzw. den String ausgeben lassen. Da ist mir nicht klar, wieso das dann in ein binary gewandelt werden muss.

    Aber hauptsache ist erstmal: Es klappt! Danke nochmals.

    Falls mir das jemand mit dem binary erlären kann, sehr gern. Ich lasse zu diesem Zweck den Status mal noch 2 Tage auf "offen".
    Vielen Dank nochmals!!!

  • Hi,

    Zitat

    Falls mir das jemand mit dem binary erlären kann, sehr gern.

    mit Sicherheit kann dir das jemand anhand deines Script (-ausschnittes) erklären!

  • Falls mir das jemand mit dem binary erlären kann, sehr gern

    Das ergibt sich aus dem angegeben Protokoll für den Mifare Reader.
    Dort ist bei Stream Format für die Länge,Commando&Checksumme jeweils ein BYTE als Größe angegeben.
    Ein Byte ist 8bit groß und kann deshalb Werte von 0 bis 255 annnehmen.

    Wenn nun in den Bsp. zB. "02 03 05" steht, dann bedeutet das 3 Bytes gesendet werden sollen. (eben mit dem Wert 2 3 5)

    Ein String ist aber in ASCII kodiert. Sprich "02" steht dort für das ASCII Zeichen "0" das mit 48 kodiert ist & "2" hat den ASCII-Code 50.
    Wenn also der String "02" über die ser. Schnittstelle gesendet wird. So wird die Zahl 48 & 50 übertragen...
    Erwartet wird aber nur eine Zahl (Byte) mit dem Wert 2.

    Hoffe alle Klarheiten beseitigt zu haben ^^

    /Indi2Go