128er
16.07.2015, 20:04
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
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
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
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.
$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!
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
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
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
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.
$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!