Die Bühler Holding AG ist ein international tätiger Technologiekonzern mit über 12'000 Mitarbeitenden in 140 Ländern. Milliarden Menschen kommen täglich mit Technologien von Bühler in Kontakt. Ihre Technologien sind in Smartphones, Solarmodulen, Windeln, Lippenstift und Geldscheinen enthalten. Sie sind in den Lebensmitteln zu finden, die wir essen, und in den Fahrzeugen, mit denen wir fahren. Bühlers Ziel ist es, Innovationen für eine bessere Welt zu entwickeln, die gesund, sicher und nachhaltig sind.
Ein Tätigkeitsbereich von Bühler ist die Herstellung von Anlagen für die Produktion von Lithium-Ionen-Batterien. Das Kernstück für die dafür benötigte Elektrodenpastenproduktion ist ein Zweiwellenextruder. Die Pastenproduktion wird mit dem Qualitätskontrollsystem QuaLiB in Echtzeit überwacht. Dies führt zu höherer Produktqualität, weniger Ausschuss und besserem Prozessverständnis.
Wir begleiten und unterstützen Bühler beim Entwickeln der dahinterliegenden Software. Diese basiert auf Python und Docker, nutzt OPC Unified Architecture (OPC UA) zur Kommunikation mit der Hardware, InfluxDB um die Messdaten zu persistieren, Redis fürs Caching und Dash / Plotly fürs User Interface. Unsere Arbeit besteht darin, einen sauberen und sicheren Stand des Codes sicherzustellen und damit die kontinuierliche Wartbarkeit zu gewährleisten. Weiter unterstützen wir beim Entwickeln von neuen Features und der Behebung von Fehlern.
Bei der Übernahme dieses Auftrags bestand das Einrichten der Software, lokal für die Entwicklung wie auch im Endprodukt, zu grossen Teilen aus manuellen Prozessen mit wenig Automatisierung.
Eine erste grosse Herausforderung war es, eine ausreichende Testabdeckung zu erreichen, ohne den Code mehr als nötig zu verändern. Die Schwierigkeit dabei war, dass der bestehende Code nicht aufgebaut war, um testbar zu sein. Wir setzten deshalb als erstes auf umfassendes End-to-End-Testing, um Regressionen zu vermeiden. Darauf aufbauend führten wir Refactorings durch, um die Software testbarer zu machen und erreichten mittels automatisierten Unit- und Integrationstests eine Testabdeckung von rund 90% der kritischen Komponenten.
Für das Projektsetup setzten wir auf den modernen Python Paket- und Dependency-Manager Poetry. Poetry ermöglicht es, reproduzierbare Python Umgebungen zu erstellen und hilft dabei, die Abhängigkeiten aktuell zu halten.
Die weitere Zusammenarbeit beinhaltet neben der Entwicklung auch viel Wissensvermittlung bezüglich Python, eine Programmiersprache, auf die wir seit mehreren Jahren im Zusammenhang mit Machine Learning setzen.
Was wir an diesem Projekt neben dem Software-Engineering besonders schätzen, ist die enge Zusammenarbeit mit Bühler, die trotz der Grösse des Konzerns, der komplexen Organisation und der Vielfalt der Tätigkeitsbereiche sehr unkompliziert und effizient ist.