-         

Ergebnis 1 bis 9 von 9

Thema: Reverse engineering eines Protokolls. Und UART mit BASCOM

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    08.06.2011
    Ort
    Ruhrgebiet
    Alter
    28
    Beiträge
    42

    Reverse engineering eines Protokolls. Und UART mit BASCOM

    Anzeige

    Guten Abend!

    Ich habe einen industriellen Thyristorsteller und dieser besitzt zur parametrierung eine UART Schnittstelle. Mit dem zugehörigen PC Programm lassen sich aber nicht nur die Parametersätze ändern. Auch kann man sich Momentanwerte wie Spannung, Strom, Leistung, etc. anzeigen lassen. Diese Werte würde ich gerne mit einem Mikrocontroller vom Thyristorsteller anfordern und auf einem LCD darstellen.

    Zuerst habe ich die Kommunikation mit meinem Speicheroszilloskop aufgenommen und mir die Telegramme angeschaut. Am einfachsten war es, mit der Abfrage der Kühlkörpertemperatur anzufangen. Das Telegram dafür war simpel zu finden. Mit Finger auf Temperatursensor drücken und gucken in welchem Telegramm sich Bytes ändern.

    Nun möchte ich zum debuggen/testen, diesen Thyristorsteller der Parametrierungssoftware vorgaukeln.

    UART Parameter sind: 38400 Baud, 8N1.

    Hier Beispiele für die Kommunikation:
    Software sendet zur Abfrage der Temperatur: 02 8E 90
    Thyro liefert für Kühlkörpertemperatur 31,0°C: 02 8F 00 00 07 03 00 01 00 00 9C
    Klicke auf die Grafik für eine größere Ansicht

Name:	31_0grade.png
Hits:	12
Größe:	31,5 KB
ID:	30481

    Software sendet zur Abfrage der Temperatur: 02 8E 90
    Thyro liefert für Kühlkörpertemperatur 31,1°C: 02 8F 00 00 07 04 00 01 00 00 9D
    Klicke auf die Grafik für eine größere Ansicht

Name:	31_1grade.png
Hits:	2
Größe:	31,6 KB
ID:	30482

    Software sendet zur Abfrage der Temperatur: 02 8E 90
    Thyro liefert für Kühlkörpertemperatur 31,3°C: 02 8F 00 00 07 05 00 01 00 00 9E
    Klicke auf die Grafik für eine größere Ansicht

Name:	31_3grade.png
Hits:	3
Größe:	31,6 KB
ID:	30483

    Es ändern sich nur das sechste und elfte Byte in der Antwort. Zwischendurch sendet die Software immer wieder "02 80 00 82", was mit "02 81 01 09 8D" auf der Geräteseite beantwortet werden muss, um der Software die Betriebsbereitschaft des Thyros anzuzeigen. Ansonsten wird ein Übertragungsfehler gemeldet.

    Nun sind meine bisherigen Erfahrungen mit UART bei Bascom eher bescheiden. Und ich bräuchte wohl einen Anstoß in die richtige Richtung, wie ich die teils unterschiedlich langen Bytefolgen am besten einlesen und auswerten sollte. Sollte ich jedes empfangene Byte einzeln in einem Byte-Array speichern? oder wie würde man es am sinnvollsten angehen?

    Das war mein erster Ansatz um die UART Kommunikation zum Controller mit einem Terminalprogramm zu testen. Funktioniert soweit auch. Nur für die Auswertung von langen Bytefolgen fehlt mir der Lösungsansatz.

    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    $hwstack = 20
    $swstack = 20
    $framesize = 20
    $baud = 38400
    
    Enable Interrupts
    
    Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
    
    Config Lcd = 16 * 2
    
    Config Serialin0 = Buffered , Size = 20 , Bytematch = All
    
    Declare Sub Serial0bytereceived
    
    Dim Incomingdata As Byte
    
    
    Do
    
    !NOP
    
    Loop
    
    End
    
    Sub Serial0bytereceived()
    
    Inputbin Incomingdata
    
    If Incomingdata = &HAF Then
    
    Printbin &H02 ; &H80 ; &H90
    
    Else
    
    Print "Bitte AF(HEX) senden!"
    
    End If
    
    Clear Serialin
    
    End Sub
    Ich hoffe meine gegebenen Informationen reichen erstmal aus.

    Danke!

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Scheint, als ob jede Anfrage mit 02 beginnt. Dann kommt der Parameter dann die PrüfSUMME im wahrsten Sinne. Als Antwort kommt auch zuerst 02 und dann der Parameter +1 sowie die Werte. Zuletzt eine einfache PrüfSUMME
    02 + 8F + 00 + 00 + 07 + 03 + 00 + 01 + 00 + 00 = 9C

    Von Systernals gibt es einen Logger für die Schnittstelle, wenn ich mich nicht irre.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    59
    Beiträge
    2.435
    Hallo,

    Ich gehe da auch einig, dass mit 0x02 (STX = Start of TeXt) der Anfang markiert wird.
    Hinten ist eine Prüfsumme angehängt.

    Das zweite Byte (Befehl) scheint bei der Antwort um eins erhöht, in der Antwort zu stehen. Dazu müsste man aber unterschiedliche Abfragen auswerten.


    Die dritte Antwort verwirrt mich etwas:
    Entweder müsste die Temperatur 31.2°C sein oder in der Antwort 0x06 anstatt 0x05 vorkommen ?

    MfG Peter(TOO)
    Geändert von Peter(TOO) (17.07.2015 um 12:54 Uhr) Grund: tippfehler bei 0x02
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  4. #4
    Erfahrener Benutzer Begeisterter Techniker Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    41
    Beiträge
    398

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    59
    Beiträge
    2.435
    Hallo,
    Zitat Zitat von schorsch_76 Beitrag anzeigen
    Passt aber nicht:
    1. das 2te Byte ist bestimmt nicht die Länge, sondern der Befehl.
    2. Hier wird am Ende die Prüfsumme gesendet und kein XOR.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    08.06.2011
    Ort
    Ruhrgebiet
    Alter
    28
    Beiträge
    42
    Zitat Zitat von Peter(TOO) Beitrag anzeigen
    Hallo,
    Die dritte Antwort verwirrt mich etwas:
    Entweder müsste die Temperatur 31.2°C sein oder in der Antwort 0x06 anstatt 0x05 vorkommen ?

    MfG Peter(TOO)
    Hi und vielen Dank für eure konstruktiven Antworten. Im Moment hab ich etwas wenig Zeit, deswegen nur kurz . . .

    Die Lücken haben mich auch irritiert. Ich sehe darin auch kein Muster. Die angehängte Tabelle habe ich wie folgt erstellt. Oszilloskop an den UART, seriellen Trigger auf das Telegramm eingerichtet. Die PC Software des Thyros aktualisiert den Wert so gefühlt jede Sekunde, zeitgleich sah ich es auch auf dem Oszilloskop. Da konnte ich dann gemütlich das Oszilloskop stoppen und die Bytes notieren. So sind die Werte mit dem Vermerk "gemessen" zustande gekommen. Die Lücken in 0,1 °C Schritten werden niemals angezeigt. Egal wie lange ich die Software laufen lasse, oder ich den Temperatursensor auch trieze. Aus diesem Grund möchte ich der PC Software jetzt den Thyro vorgaukeln. Da sich die weiteren Temperaturwerte schwer ableiten lassen, wenn die Lücken so unregelmäßig vorhanden sind.

    Klicke auf die Grafik für eine größere Ansicht

Name:	TempTabelle.png
Hits:	23
Größe:	35,4 KB
ID:	30490

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    59
    Beiträge
    2.435
    Hallo,

    nur mal schnell überflogen: Der Umrechnungsfaktor ist 5,8, das erklärt die Lücken.
    Möglicherweise rechnet das Ding intern in °F.
    Byte4 und Byte 5 scheinen die Temperatur zu sein, wobei von Byte 4 nur Bit 0 sicher der Wert ist.

    Wieso von Byte 4, die Bits 1+2 auf 1 stehen, weiss ich nicht?

    Ich komme auch erst am Montag dazu, mehr rauszufinden.
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    08.06.2011
    Ort
    Ruhrgebiet
    Alter
    28
    Beiträge
    42
    Kurze Info

    Dieses Programm hat sich als Ideal rausgestellt für meine Zwecke:
    http://docklight.de/

    Man kann z.B. serielle Datensequenzen aufspüren und mit einer vorher definierten Antwort reagieren.

    Werde morgen mal etwas damit experimentieren.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    08.06.2011
    Ort
    Ruhrgebiet
    Alter
    28
    Beiträge
    42
    Aktueller Stand:

    Ich kann den Thyristorsteller fehlerfrei der Software vorgaukeln. Habe ca. 70% der erstmal wichtigen Telegramme identifiziert und fülle Listen mit Datensätzen. Es ist übrigens echt nervig die Telegramme von Hand zu schreiben/inkrementieren und die damit korrespondierenden physikalischen Einheiten aus der Software in eine Tabelle abzuschreiben. Auch bei den Werten wie Spannung, Strom und Leistung gibt es diese Lückenproblematik wie bei den Temperaturwerten. Ich kann also nicht einfach blind alles hintereinander wegschreiben.

    Momentanwerte Außenleiter L1:

    Klicke auf die Grafik für eine größere Ansicht

Name:	L1 Tabelle.png
Hits:	13
Größe:	38,2 KB
ID:	30504

    Das läuft alles soweit sehr gut. Nun zurück zu meinem ersten Posting in diesem Beitrag. Die implementierung in Bascom fällt mir noch etwas schwer, bzw. mir fehlt der richtige Ansatz. Gebt mir bitte mal einen Anstoß, was das Lesen/Schreiben von längeren Byteketten in Bascom angeht. Zumindest ein Stichwort wo ich dann weiter lesen kann.

    Danke!

Ähnliche Themen

  1. LED reverse voltage
    Von Siro im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 12.04.2010, 15:26
  2. BASCOM 2te UART oder software UART
    Von Snecx im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 19.02.2009, 00:25
  3. Servo-Reverse
    Von Feizi im Forum Elektronik
    Antworten: 21
    Letzter Beitrag: 02.07.2008, 17:56
  4. Maxim Engineering Journal
    Von Manebacher im Forum Buchempfehlungen
    Antworten: 4
    Letzter Beitrag: 18.02.2006, 16:54
  5. Code Analysis / Reverse engineering
    Von PicNick im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 03.05.2005, 17:23

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •