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!