SLSS CANopen Analyser

  • Entwicklungsstand: in Entwicklung (letzte Aktualisierung: 08.12.2022)
  • Veröffentlichungen: (Python-Offline veröffentlicht / C# Live Analyser ausstehend)

 

Vorgeschichte

Mit meiner CAN Bus-Software SLSS CANAnalyser* schein ich doch bei so einigen CAN Interessierten einen Nerv getroffen zu haben.
Durch den kostenlosen Download und den „cheap’n’open hardware“ Ansatz habe ich mittlerweile einige nette Kontakte knüpfen können (sogar weltweit was ich immer noch Wahnsinn finde).

Da meine beruflichen „Wurzeln“ bis Anfang letzten Jahres eigentlich immer fest im Automotive Sektor verankert waren, war für mich bis dahin das Multi-Master-Prinzip und die unabhängige Botschaftszuordnung stets das was den CAN Bus ausmachte und wofür ich Ihn einsetzte. Diese grundsätzliche Auslegung findet man zum Beispiel auch in den Beschreibungen der CAN Übertragungsverfahren*, wie hier zum Beispiel auf Wikipedia!

Im Zuge eines Jobwechsels wurde ich dann im ersten Projekt jedoch gleich mit dem Thema CANopen* konfrontiert.
Das Wort „CANopen“ war mir zwar bekannt und bis dahin auch schon einige Male an diversen Stellen „untergekommen“, doch war ich immer weit genug entfernt um mich nicht tiefer mit dem Thema beschäftigen und auseinandersetzen zu müssen!
Da mein neuer Projektleiter jedoch eher die Einstellung „learning by doing“ vertritt (was ich sehr an Ihm mag) und in unserer Abteilung noch kein Wissen hinsichtlich CANopen vorhanden war, wurde ich gleich ins kalte Wasser geworfen und musste mich mit den „Eigenheiten“ des CANopen Protokolls vertraut machen.
Schnell stellte ich fest, dass der CAN Bus selbst und der Aufbau der darauf versendeten Botschaften (CAN Frames) immer noch dasselbe war, doch altbekannte Dinge wie das Multi-Master-Prinzip mittendrinnen obsolet und durch mir bis dahin unbekannte Sachen wie Guarding, Heart-Beat, Node-IDs, SDOs, PDOs oder das ominöse Objektverzeichnis (object dictionary) ersetzt worden waren! So musste ich selbst erst einmal lernen was CANopen überhaupt ausmacht, welche Vorteile und evtl. auch Nachteile der Einsatz von CANopen mit sich bringt und wie die Daten auf dem Bus zu interpretieren sind.

Mehr lesen

Python UDP-Communication Class

Vorgeschichte

2020 kam ein Freund auf mich zu und fragte mich, ob es nicht irgendwie möglich wäre seine smarte Haustürklingel in die von ihm installierte Hausautomatisierung zu integrieren. Beim Betätigen der Klingel sollte ein Bediendisplay aus dem Bildschirmschoner in den Anzeigemodus wechseln und so das Videobild der in der Klingelanlage verbauten Kamera angezeigt werden, ohne das man vorher auf den Bildschirm klicken muss. Da die eingesetzte Hausautomatisierungslösung auf CentOS aufgesetzt war, brauchte er eine Schnittstellenlösung welche dort leicht zu implementieren war. Damit war damals bereits der Grundstein für die Python UDP-Communication Class gelegt.

 

Warum UDP Kommunikation

Auf diese Frage gibt es eine ganz einfache Antwort: Die Klingel stellte nur die Möglichkeit, ein UDP-Datagramm an einen vorkonfigurierbaren Port zu senden, bereit. Das gezielte Erhalten einer Botschaft via TCP gab es schlichtweg nicht. Damit war die Auswahl auf UDP beschränkt und die Umsetzung bereits festgelegt.

Mehr lesen

Nextion Display und ESP8266

Vorgeschichte

Nachdem ich die DIY-Wetterstation* und die dazugehörige Anzeige aufgezeichneter Wetterdaten* mittels Web-Script fertiggestellt hatte, fehlte eigentlich nur noch, wie bei käuflichen Wetterstationen, ein Anzeigedisplay, welches man sich ins Wohnzimmer stellen kann. So ist es damit möglich auch einmal einen Blick auf die aktuellen Temperaturen werfen zu können, ohne das Handy oder den PC anschalten zu müssen. Aus diesem Grund entstand fast zeitgleich mit der Wetterstation das Wetterdisplay, welches ich hier gern vorstellen möchte. 

In diesem Beitrag werde ich versuchen die Vorteile der Displays der Firma Nextion und den Aspekt der Kommunikation zwischen Micro-Controller und Display ein wenig hervorzuheben, da man diesen Teil auch für andere Projekte gut verwenden könnte. 

KOMMENTAR DES AUTORS

 

Hardwareauswahl

Die Auswahl der zu verwendenden Hardware stand bei  diesem Projekt eigentlich schon vorab fest. Da die DIY-Wetterstation* die anzuzeigenden Wetterdaten in meinem lokalen Netzwerk ablegt, brauche ich natürlich eine Möglichkeit diese von da aus auch zum Display zu bekommen. Der einfachste Weg hierfür erschien mir die Verwendung des bereits bei der Wetterstation selbst eingesetzten ESP8266* Micro-Controllers, da dieser nicht nur Daten an ein Webscript senden, sondern auch eine Webseite auslesen kann.

Mehr lesen

Anzeige aufgezeichneter Wetterdaten

In diesem Beitrag möchte ich nun noch auf das Speichern und Anzeigen der Messdaten, welche durch meine DIY ESP8266 Wetterstation* viertelstündlich an meinen NAS übermittelt werden, ein wenig näher eingehen. Da die Art der Daten dabei eigentlich nur eine untergeordnete Rolle spielt, habe ich diesen Beitrag von der Wetterstation getrennt erstellt, so könnte er vielleicht auch als Vorlage für die Anzeige anderer Daten als Inspiration dienen.

 

Datenempfang und Speicherung

Der Empfang und das Speichern der Messdaten ist recht trivial. Die Wetterstation ruft nach dem Verbinden mit dem Netzwerk ein PHP-Script auf, welches die Messwertdaten per HTTP_GET entgegennimmt und dann innerhalb einer Datei speichert. An dieser Stelle sei gesagt, dass das Sammeln der Daten natürlich genauso gut (oder vielleicht sogar besser) in einer Datenbank machbar wäre. Ich habe mich damals für die Dateivariante entschieden, da sich diese beim Erstellen der Scripte leichter überprüfen und debuggen lassen hat. 

Um eine übersichtliche Einteilung der Daten zu erreichen, werden vom Script automatisch Unterordner für den aktuellen Monat des Jahres und den jeweiligen Tag der Messaufzeichnung wie folgt erstellt. Für den unwahrscheinlichen Fall, dass irgendwann eine zweite Wetterstation hinzukommen sollte, wird geprüft, ob der innerhalb der Wetterstation gesetzte Gerätename als oberste Verzeichnisebene vorhanden ist. Ist dies der Fall wird geprüft, ob der Ordner für den aktuellen Monat vorhanden ist – falls nicht, wird dieser erzeugt. Danach wird geprüft, ob der Ordner für den aktuellen Tag vorhanden ist – falls nicht, wird auch dieser erzeugt. Im letzten Schritt wird geprüft, ob innerhalb des Tagesordners die Messdatei vorhanden ist – falls nicht, wird diese ebenfalls erzeugt. Anschließend werden die Messdaten in diese Messdatei geschrieben und die Datei gespeichert.

Mehr lesen

DIY-Wetterstation mit dem ESP8266 (2018)

Vorgeschichte

Nachdem ich bereits diverse Elektronikprojekte umgesetzt hatte, entstand im Jahr 2018 die Idee ein wenig mehr mit Sensoren zu experimentieren. Da der Bau meiner Innenraumtemperatursensoren* nun schon einige Jahre her war und ich zwischenzeitlich immer mal wieder Temperatursensoren in anderen Projekten eingesetzt hatte, dachte ich mir das es diesmal ruhig ein wenig mehr als nur eine Temperaturmessung sein darf. Damit war die Idee der DIY-Wetterstation geboren, welche ich hier kurz vorstellen möchte.

Leider habe ich das Layout der Platine und die Verkabelung der Sensoren damals „on the fly“  erstellt und nicht dokumentiert, weshalb ich leider keinen detaillierten Schaltplan liefern kann. Da die Pin-Belegung der Sensoren aber nicht sonderlich kompliziert ist, denke ich das es kein Problem sein sollte, die Wetterstation auch ohne einen Schaltplan komplett, oder auch nur teilweise nachzubauen. Falls dennoch jemand Unterstützung benötigen sollte, dann kann er sich gern per Mail unter info@langer-sebastian.de an mich wenden.      

Mehr lesen

SLSS SearchClass – Excelsuche leichtgemacht

Überlegungen und Vorgeschichte

Wie bei vielen anderen Menschen auch, gehört die Verwendung von Microsoft Excel bei mir zum Arbeitsalltag genauso dazu wie die morgentliche Tasse Kaffee oder das Online-Meeting via Microsoft Teams. Dabei bin ich in der Vergangenheit bei vielen meiner Listen an den Punkt gekommen, an welchem ich die aktuelle oder auch andere Exceldateien nach bestimmten Werten durchsuchen musste, oder dem Nutzer die Möglichkeit geben wollte dies zu tun. Jetzt bietet VBA* mit der Range.find Methode* schon eine recht gute Funktion zum Suchen nach bestimmten Werten an, doch musste ich hiermit entweder „das Grundgerüst“ für den Suchaufruf immer wieder neu schreiben und an die aktuelle Datei anpassen, oder den Code aus einer anderen Liste „recyclen“, wofür aber ebenfalls immer Anpassungen nötig waren.

Um mir diese Arbeit ein wenig zu erleichtern, kam mir die Idee eine Funktionsbibliothek oder Klasse zu programmieren, mit deren Hilfe ich die gewünschten Funktionen einfach in ein anderes Projekt, oder eine neue Liste importieren kann. Das Ergebnis ist die hier folgende SLSS SearchClass, in welcher ich initial erst einmal die für mich wichtigsten Funktionen umgesetzt habe.

Die folgenden Absätze geben einen tieferen Einblick in die Nutzungsmöglichkeiten und den Funktionsumfang der Klasse und sollten daher nicht als Schritt für Schritt Anleitung angesehen werden. Für die meisten Leute sollte sich die Anwendung der Klassenfunktionen eigentlich relativ leicht aus der im Downloadordner vorhanden Beispielsammlung (SLSS_SearchClass_X.X.X.X.xlsm) herauslesen lassen!   

KOMMENTAR DES AUTORS

Mehr lesen

USB-Stick Kabinett – endlich Ordnung auf dem Basteltisch

Jeder (Elektronik-)Bastler kennt sicherlich das Problem: Man tüftelt an einer neuen Schaltung oder probiert auf dem Bread-Board nur einmal schnell etwas aus und schon hat man eine Handvoll Widerstände, Kondensator oder sonstige Bauteile auf dem Tisch liegen. Nun kommt man an den Punkt, an dem das aktuelle Bauteil gegen ein anderes getauscht werden muss und ehe man sich versieht herrscht Chaos, als hätte man 3 Wochen nicht aufgeräumt. Als wäre das nicht schon genug, kommen dann noch die „Neuerrungenschaften“, am Besten als SMD-Variante und andere Bauteile laufender Projekte hinzu, für welche man sich sowieso erst noch einen „Lagerort“ überlegen muss, um sie auch in 2 Wochen noch wiederfinden zu können.

Da ich an diesem beschriebenen Bastelplatz seit neuestem auch meine tägliche Arbeit verrichte, möchte ich natürlich nicht die ganze Zeit irgendwelche Kleinteile rumliegen haben, weshalb nun endlich eine Lösung für dieses Ordnungsproblem her musste. Da sich zu den elektronischen Bauteilen auch noch der ein oder andere USB-Stick, USB-Kartenleser oder auch USB-UART-Konverter gesellte, sollten auch diese gleich einen festen Platz in dieser Lösung erhalten.

Die grobe Zielsetzung war also eine Aufbewahrungsmöglichkeit für USB-Sticks und allmögliches Kleinteilzeugs zu schaffen, um einerseits die Ordnung und Ansehnlichkeit des Arbeits- und Bastelplatzes zu verbessern und andererseits die Teile trotzdem immer griffbereit zu haben.

Mehr lesen

SLSS PictureSort (Update 1.0.1.0 – 09/2021)

Vorgeschichte

Für die Entstehung von SLSS PictureSort gab es mehrere Gründe. Zum einen wollte ich meine erlernten C# Kenntnisse etwas weiter ausbauen, wofür ich natürlich ein passendes Projekt brauchte, zum anderen besitzen meine Frau und ich mittlerweile unüberschaubar viele digitale Fotos aus den unterschiedlichsten Quellen (Digitalkamera, Smartphones, WhatsApp, etc…), welche wir zwar immer fleißig auf unserem NAS gespeichert und dort auch grob sortiert haben, doch eine chronologische Anordnung, gerade bei den unzähligen Bildern unserer Kinder, wäre bei der Masse an Dateien eine reine Fleißaufgabe gewesen. Da meiner Ansicht nach Computer-Programme genau für solche Zwecke, nämlich Menschen lästige Fleißarbeiten abzunehmen, gemacht werden, war der beste Kompromiss aus Lernen und Nutzen gefunden.

Mehr lesen

Flashforge Dreamer NX

3D-Drucker – „die Zweite

Nachdem mir mein  Prusa i3 Hephestos* knapp 5 Jahre lang gute Dienste geleistet hat und ich in dieser Zeit einiges an Erfahrungen in Sachen Filamentauswahl, Druckereinstellungen und auch 3D Modellierung gemacht habe, störte mich eine Sache doch erheblich. Mit der offenen Bauart des Druckers war es schwierig gute Ergebnisse beim Drucken mit ABS Filament zu erreichen. Gerade wenn die Druckteile etwas höher waren, hatte ich, wie bereits im Beitrag – Der Weg zum 3d Druck* beschrieben, mit Warping und Rissen im Druckteil zu kämpfen.
Da ich zunehmend auch für Freunde und Bekannte immer mehr Teile mit höherer Hitzebeständigkeit benötigte (z.B. Halter und Blenden für Einbauten in Fahrzeugen), kam also die Idee auf einen neuen, respektive weiteren Drucker anzuschaffen. Dieser sollte auf jeden Fall über ein beheiztes Druckbett und ein geschlossenes Gehäuse verfügen, damit dann auch größere ABS Drucke problemlos gelingen.

Mehr lesen

SLSS CarNet (Update 2021)

Die letzten Tage habe ich meine HTML-basierte Software des „SLSS CarNet Command Centers“ (Hauptartikel: SLSS CarNet*) weiter um- und ausgebaut. Nach der Installation der Hardware im Sommer 2020 konnte ich auf meinen Testfahrten (welche coronabedingt leider nicht so häufig waren wie gehofft) einiges an Erfahrungen und Eindrücken sammeln. Die ersten Erkenntnisse daraus habe ich nun in Form von Updates und Verbesserungen in die Software einfließen lassen. Das es an der einen oder anderen Stelle Verbesserungspotential geben wird, war mir bereits bei der Entwicklung der Soft- und Hardware klar. Ich war ziemlich erstaunt, dass sowohl die GPS-Ortung inkl. Richtungs- und Geschwindigkeitserkennung, als auch andere Komponenten, welche ich vorher nicht während der Fahrt (also „in Bewegung“) testen konnte, auf Anhieb funktionierten. Somit beschränken sich die Verbesserungen auch eher auf Optimierungen in Sachen Performance, Usability und Reaktionsgeschwindigkeit.

 

Verbesserung der CAN-Bus Reaktionsgeschwindigkeit dank Python

Eine Sache, welche mich schon beim Erstellen der Software beschäftigte, war die Erkennung der über den CAN-Bus gesendeten Botschaften. Ursprünglich nutze ich hierfür ein PHP-Script, welches per „shell_exec()„-Befehl das Lesen der CAN-Daten übernahm. Das Problem hierbei war zum einen, dass dieses Script nicht in einer Endlosschleife laufen konnte, da die so gesammelten Daten nach Zeit-X gespeichert werden mussten und dafür der Lesevorgang beendet werden musste. Zum anderen lief dieses Script innerhalb des „Command Centers“ was dazu führt, dass CAN-Daten nur erfasst wurden, wenn dieses auf einem Gerät ausgeführt wurde. 

Mehr lesen