Hallo zusammen,
ich habe, auch mit HIlfe dieses Forums ("von VB.net mit Falcon über Weinzierl 332 zum KNX-Bus"), in VB.net (VS17) und Falcon 5.7.426 ein Programm realisiert, welches alle KNX-Telegramme am Bus mitliest - bei hoher KNX-Bus-Aktivität gehen aber Telegramme vorloren.
ich öffne die Verbindung mit dem Bus:
bus = New Bus(UsbConnectorParameters.FromAddress(f1KNXdev))
AddHandler bus.GroupValueReceived, AddressOf BusOnGroupValueReceived
bus.Connect()
und empfange die Telegramme mit
Private Sub BusOnGroupValueReceived(ReceivedValue As GroupValueEventArgs)
' ein KNX-Telegramm wurde empfangen - es steht in ReceivedValue in der Struktur GroupValueEventArgs
' -------------------------------------------------------------------------------------------------
' Gruppenadresse auf String GA umwandeln
Dim GA As String
GA = ReceivedValue.Address.ToString
' die Daten im Object Daten speichern - das ist ein Array von Bytes
Dim daten
daten = ReceivedValue.Value.Value
' Verarbeitung durch sleep simulieren
System.Threading.Thread.Sleep(50) '50 msec warten
End Sub
wenn ich nun viele Telegramme gleichzeitig erzeuge (zB durch Aufruf einer Szene mit 30 Leuchten) dann gehen Telegramme verloren - je länger die Verarbeitung (simuliert durch den Sleep) dauert, umso mehr gehen verloren, bei 500msec bereits ganz deutlich!
Ich hab schon "alles" probiert und finde ganz einfach keine bessere Programmierung (ist ja eh schon minimal) - zum Beispiel bei TCP werden bei hohem Nachrichten-Anfall mehrere gesendete Nachrichten in einer empfangenen Nachricht geblockt zugestellt und der Empfänger muss sie dann selbst auseinander-klabüsern - auch diese Analogie hat mir keine Erhellung gebracht...
Zwei konkrete Fragen
Kann mir jemand zuflüstern wie ich das besser/korrekt mache?
Wir könnte ich erkenne, dass Nachrichten verloren gegangen sind?
Ich hoffe da kann mir jemand helfen - Danke, freundliche Grüsse
Franz
PS: wie kann ich übrigends meinen Code in so "Kästchen" hervorheben?
ich habe, auch mit HIlfe dieses Forums ("von VB.net mit Falcon über Weinzierl 332 zum KNX-Bus"), in VB.net (VS17) und Falcon 5.7.426 ein Programm realisiert, welches alle KNX-Telegramme am Bus mitliest - bei hoher KNX-Bus-Aktivität gehen aber Telegramme vorloren.
ich öffne die Verbindung mit dem Bus:
bus = New Bus(UsbConnectorParameters.FromAddress(f1KNXdev))
AddHandler bus.GroupValueReceived, AddressOf BusOnGroupValueReceived
bus.Connect()
und empfange die Telegramme mit
Private Sub BusOnGroupValueReceived(ReceivedValue As GroupValueEventArgs)
' ein KNX-Telegramm wurde empfangen - es steht in ReceivedValue in der Struktur GroupValueEventArgs
' -------------------------------------------------------------------------------------------------
' Gruppenadresse auf String GA umwandeln
Dim GA As String
GA = ReceivedValue.Address.ToString
' die Daten im Object Daten speichern - das ist ein Array von Bytes
Dim daten
daten = ReceivedValue.Value.Value
' Verarbeitung durch sleep simulieren
System.Threading.Thread.Sleep(50) '50 msec warten
End Sub
wenn ich nun viele Telegramme gleichzeitig erzeuge (zB durch Aufruf einer Szene mit 30 Leuchten) dann gehen Telegramme verloren - je länger die Verarbeitung (simuliert durch den Sleep) dauert, umso mehr gehen verloren, bei 500msec bereits ganz deutlich!
Ich hab schon "alles" probiert und finde ganz einfach keine bessere Programmierung (ist ja eh schon minimal) - zum Beispiel bei TCP werden bei hohem Nachrichten-Anfall mehrere gesendete Nachrichten in einer empfangenen Nachricht geblockt zugestellt und der Empfänger muss sie dann selbst auseinander-klabüsern - auch diese Analogie hat mir keine Erhellung gebracht...
Zwei konkrete Fragen
Kann mir jemand zuflüstern wie ich das besser/korrekt mache?
Wir könnte ich erkenne, dass Nachrichten verloren gegangen sind?
Ich hoffe da kann mir jemand helfen - Danke, freundliche Grüsse
Franz
PS: wie kann ich übrigends meinen Code in so "Kästchen" hervorheben?
Kommentar