Laden...

Forenbeiträge von Ozzy Ingesamt 2 Beiträge

13.01.2021 - 06:28 Uhr

Hallo,

bisher habe ich in C# immer eher kleine Projekte gebastelt ohne mich je näher mit der Architektur auseinander zu setzen. Nun möchte ich das bei meinem nächsten Projekt aber ändern. Eigentlich geht es nur darum, Werte von einem an den PC angeschlossenen Mikrocontroller auf einer GUI anzuzeigen. Der uC sendet dafür in regelmäßigen Abständen die Daten über ein eigenes Protokoll.
Nun habe ich eine Klasse für das Protokoll erstellt, dem ich die Einstellungen aus der GUI für die serielle Kommunikation übergebe (Port, Baudrate), und die sich dann mit einem SerialDataReceivedEventHandler um die Daten und die Dekodierung kümmert. Nun möchte ich die Werte allerdings auch in der GUI anzeigen. Eigentlich komme ich aus der C-Programmierung, da würde ich jetzt eine Callback-Funktion in der Protokoll-Klasse registrieren die immer dann aufgerufen wird, wenn ein (spezieller) Wert übermittelt wurde (ungefähr so)


typedef void dataCallback_t( uint16_t value );

void prc_registerCallback( uint16_t ID, dataCallback_t *callback )
{
   dataCallbackFunctions[ID] = callback;
}

...

if ( dataCallbackFunctions[ID] != NULL )
   dataCallbackFunctions[ID]( receivedValue );


void updateData1( uint16_t value )
{
   ...
}

void registerCallbackFunctions( void )
{
   prc_registerCallback( 1, updateData1 );
   ...
}

Ich habe zwar gesehen, dass es in C# so etwas ähnliches auch gibt (Delegates), habe aber nicht genau verstanden, wie das funktioniert.
Die Frage ist auch: ist das eigentlich der "beste" Weg, oder wie würdet Ihr das machen?

Vielen Dank für Eure Tipps und viele Grüße!

23.12.2012 - 13:15 Uhr

Hi,

ich bin neu hier und bräuchte bitte Eure Hilfe! Und zwar bin ich gerade dabei, Messdaten mit einem "Moving Graph" darzustellen. Dafür verwende ich ein Liniendiagramm und eine DataTable. Die Daten werden von links nach rechts gezeichnet, und anschließend fangen die Daten wieder von links an. Dabei sollen die alten Daten nach und nach gelöscht werden, also nicht der ganze Screen auf einmal. Das geht auch alles, indem ich einfach Zeilen aus der DataTable lösche, wenn die Zeiten bis auf einen Abstand überein stimmen. Einziges Problem dabei ist, dass eine Linie von rechts nach links gezogen wird, wenn ich mit den Daten wieder von linka anfange.

Gibt es überhaupt eine Möglichkeit, diese Linie zu unterbrechen? Ich hatte schon überlegt mit mehreren Serien zu arbeiten, und wenn ich links anfange, mit einer neuen Serie zu starten. Oder gibt es eine bessere Möglichkeit?
Sind Charts überhaupt geeignet dafür? Finde das so schön einfach mit dem Plotten...

Vielen Dank schon einmal im Voraus für Eure Hilfe!!!