Selfbus Sommer-Release 🌞
Verfasst: 20. Aug 2024, 00:18
Tja, wir können es selbst kaum glauben: es ist Hochsommer und wir haben ein ganzes Paket an Releases fertig geschnürt und bereit zur Verwendung.
Lib 2.10
Ja, so ist das in der Entwicklung: eigentlich wollten wir was ganz anderes machen, doch dann meldete sich bei uns ein Anwender mit einem seltsamen Problem. So haben wir in den letzten Monaten mehrere zehn Millionen KNX-Telegramme aufgezeichnet und analysiert und dabei mehrere Gigabyte an Logdateien produziert.
Bereits in der letzten Lib-Version konnten wir sehr hohe Konformität zur KNX-Spec herstellen. Wir vermuteten daher Kollisionen als Ursache, forcierten bei uns möglichst viele davon und ... staunten nicht schlecht, als wir in unseren Installationen sogar zertifizierte Kaufgeräte gefunden haben, die sich in manchen Kollisionsszenarien nachweislich nicht an die KNX-Spec halten. Alle gefundenen Probleme haben wir gelöst und auch zu nicht-konformen Geräten sind wir nun toleranter. Der ganze Aufwand hat sich durchaus gelohnt: als sich im Juni ein weiterer Anwender mit einem ähnlich seltsamen Problem meldete, konnten wir einen aktuellen Entwicklungsstand weitergeben und bekamen die erhoffte positive Rückmeldung. Danke dafür, @maidou7!
Hier die Änderungen in der neuen Version:
Die fertigen Releases (.hex- und .jar-Dateien) liegen wie gewohnt in software-releases.
Und jetzt ran an den Updater und alle Geräte aktualisieren!
Lib 2.10
Ja, so ist das in der Entwicklung: eigentlich wollten wir was ganz anderes machen, doch dann meldete sich bei uns ein Anwender mit einem seltsamen Problem. So haben wir in den letzten Monaten mehrere zehn Millionen KNX-Telegramme aufgezeichnet und analysiert und dabei mehrere Gigabyte an Logdateien produziert.
Bereits in der letzten Lib-Version konnten wir sehr hohe Konformität zur KNX-Spec herstellen. Wir vermuteten daher Kollisionen als Ursache, forcierten bei uns möglichst viele davon und ... staunten nicht schlecht, als wir in unseren Installationen sogar zertifizierte Kaufgeräte gefunden haben, die sich in manchen Kollisionsszenarien nachweislich nicht an die KNX-Spec halten. Alle gefundenen Probleme haben wir gelöst und auch zu nicht-konformen Geräten sind wir nun toleranter. Der ganze Aufwand hat sich durchaus gelohnt: als sich im Juni ein weiterer Anwender mit einem ähnlich seltsamen Problem meldete, konnten wir einen aktuellen Entwicklungsstand weitergeben und bekamen die erhoffte positive Rückmeldung. Danke dafür, @maidou7!
Hier die Änderungen in der neuen Version:
- Pinout des neuen abgesicherten UP-Multi-IO-Moduls hinzugefügt
- Pinout des GNAX-Boards hinzugefügt
- Buszugriff hat nun immer die höchste Interruptpriorität
- Bus::maxSendTries() haben wir umbenannt zu maxSendRetries und den Bug behoben, bei dem der Wert 0 das Senden gänzlich deaktiviert hatte
- Variable systemTime ist nun nicht mehr direkt zugreifbar
- Master Reset PDU ist nun korrekter implementiert
- Punkt-zu-Punkt-Verbindungen werden vor einem Neustart nun immer geschlossen und das Senden aller Frames und deren Bestätigung abgewartet
- Punkt-zu-Punkt-Verbindungen sind nun zuverlässiger, wenn einzelne Frames aufgrund von Kollisionen nicht direkt gesendet werden können
- Konformität zur KNX-Spec
- Fairer Buszugriff implementiert (wichtig bei hoher Buslast)
- Timing innerhalb von Frames leicht angepasst
- Empfangenes NAK+BUSY wird nun wie BUSY behandelt
- Massive Verbesserungen rund um die Kollisionsbehandlung
Beispiel 1: In manchen Fallen haben wir zuvor einfach mitten in einem Telegramm den Bus auf 0 gezogen, wenn ein anderes Gerät am Bus nicht-konformes Timing hat.
Beispiel 2: Bei Kollisionen haben wir unendlich lange den Telegrammversand wiederholt, was zu 100% Buslast führen konnte, wenn sich zwei Geräte ständig gegenseitig unterbrechen.
- Bevor der Bootloader an die Applikation übergibt schaltet er nun die Programmier-LED an und wartet 250ms, was bei der Problemanalyse hilft
- Wiederherstellung der MCU-Register-Inhalte vor dem Start der Applikation zur Vermeidung potenzieller Fehlverhalten
- Es ist nun möglich, die Applikation in Blöcken zu 512 oder auch zu 1024 Bytes zu flashen
- Schnellere Übertragung
- UID-Unlock ist nun optional
- Buszugriff wird vor dem Flashen pausiert und danach fortgesetzt, somit sendet das aktualisierte Gerät keine sporadischen Nullen mehr auf den Bus (dies wird in einer künftigen Version auch für alle Applikationen gelten, aber wir wollten dieses Feature zuerst in den Bootloader bringen, da dieser am meisten flasht und daher am stärksten davon profitiert)
- Erste Version einer GUI für unseren Updater (Start indem gar keine Argumente auf der Kommandozeile angegeben werden)
Aktuell unterstützt die GUI den Anwender dabei, die richtigen Parameter für den jeweiligen Anwendungsfall zu finden und zeigt dann die Konsolenausgabe im Fenster des Updaters. Natürlich haben wir viele Ideen für weitere Features, aber irgendwo muss man ja anfangen - Übersichtlichere Ausgabe, insbesondere hinsichtlich des Fortschritts
- Warnungen gehören fast vollständig der Vergangenheit an
- Unterstützung für KNX Tunneling v2 hinzugefügt
- Unterstützung für "Interface Probing" hinzugefügt
- Argumente --timeout und --appVersionPtr entfernt
- Abruf der UID eines Geräts hinzugefügt: einfach die Updater-GUI starten und dort die UID auslesen lassen
- Cache für Hex-Dateien ist nun versionsunabhängig (der Cache ist nötig für differenzielle Updates)
- Neue Option --blocksize zur Angabe der Blockgröße (256, 512 oder 1024, standardmäßig 256 für Bootloader vor v1.20 und 1024 ab v1.20)
- Schnellere Übertragung (bis 10%) in Kombination mit Bootloader ab v1.20
- Option --uid ist in Kombination mit Bootloader ab v1.20 nun optional (sie ist dennoch empfehlenswert, um nicht fälschlicherweise ein anderes Gerät zu aktualisieren)
- Bei Fehlern wird das Gerät nicht mehr automatisch neu gestartet, damit es im Bootloader bleibt und ein erneuter Versuch unternommen werden kann
- ft12 Version 0.02: Wiederholungen sind nun deaktiviert
- in16 Version 1.12: Pinout für 2TE-Controller hinzugefügt, Buildkonfigurationen für neues abgesichertes UP-Multi-IO-Modul hinzugefügt
- out8 Version 5.12: Buildkonfigurationen für 2TE-Controller v1.03 hinzugefügt, App-Zustand wird auch bei Basic Restart PDU gesichert, Fix: Logisches UND funktioniert nun korrekt
- out-cs Version 1.21
- rtr: Upgrade von BCU1 zu BIM112, Fix: CCS811 Status wird nun geprüft bevor Daten abgerufen werden
Die fertigen Releases (.hex- und .jar-Dateien) liegen wie gewohnt in software-releases.
Und jetzt ran an den Updater und alle Geräte aktualisieren!