Liste der Anhänge anzeigen (Anzahl: 3)
Reverse engineering eines Protokolls. Und UART mit BASCOM
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
Anhang 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
Anhang 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
Anhang 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!
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
Peter(TOO)
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.
Anhang 30490
Liste der Anhänge anzeigen (Anzahl: 1)
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:
Anhang 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!