Een technische duik in Ferro Techniek

De uitdagingen en keuzes

Ferro Techniek is specialist in email- en dikke filmtechnologie. Het in 1933 opgerichte bedrijf, met het hoofdkantoor in Gaanderen, is een innovatieve organisatie dat zich richt op vier verschillende bedrijfsdomeinen: algemene emaillering, dikke film verwarming, warmtewisselaars voor rookgasreiniging en emailleren van roestvrij staal.

Na het binnenhalen van een grote order voor verwarmingselementen voor elektrische auto’s kwam Ferro Techniek voor een paar nieuwe uitdagingen te staan. Een hiervan was de kwaliteitscontrole van de geproduceerde elementen.

Om deze kwaliteitscontrole mogelijk te maken is een handmatige teststraat opgezet. In deze straat heeft Ferro Techniek heeft meerdere nieuwe meetinstrumenten opgetuigd om zo de kwaliteit van de geproduceerde producten te testen.

In een latere fase van het project is de handmatige teststraat overgezet naar een geheel geautomatiseerde teststraat. Hierdoor kan de productie worden opgeschaald en kan Ferro Techniek voldoen aan de vraag. Bij dit automatiseringsvraagstuk is Covadis aangesloten. Met als initiële vraag om de informatie uit de verschillende testapparaten uit te lezen en de informatie daaruit te interpreteren. Hieronder schrijven we het gerealiseerde proces voor je uit, gaan we in op de technische opzet, de communicatie, onze keuze voor taal en framework.

Proces

Het proces in de geautomatiseerde teststraat werkt nu als volgt: Er is een testmachine, deze wordt aangestuurd door een PLC (Siemens). De elementen komen via een lopende band naar de testmachine, daar wordt een code gescand en waarna ze vervolgens op een soort treintje worden gelegd. Wanneer de elementen op de teststations zijn aanbeland geeft de PLC dit door aan onze applicatie. Op dat moment kan de applicatie zijn werk gaan doen. Het resultaat hiervan sturen wij terug aan de PLC. Als de PLC alle resultaten binnen heeft weet de PLC dat hij verder kan en begin het proces weer opnieuw.

Technische opzet

Bij de technische opzet is ervoor gekozen om per teststation een module te maken die wordt aangestuurd door een orchestrator. De orchestrator bewaakt het proces en de losse modules voeren de stappen uit. Daarnaast bewaakt de orchestrator door middel van health checks of de modules nog werken en “gezond” zijn. De opzet is “loosely coupled”, dit biedt een aantal voordelen:

• De code heeft geen kennis van andere processen. Je hebt hierdoor minder kans op bugs in de applicatie.
• De modules zijn allemaal los van elkaar te updaten, zonder dat dit invloed heeft op de werking van de applicatie.
• De modules zijn potentieel los op machines te installeren zonder dat dit problemen oplevert, dit is bij een opzet die erg gekoppeld is niet zo eenvoudig.

Het nadeel van de opzet is dat je een extra communcatielaag toevoegt, waardoor het in eerste instantie wellicht complexer is om direct te begrijpen.
Bij de opzet van het systeem is er gebruik gemaakt van een aantal principes uit domain driven design. Hier is voor gekozen omdat de code op die manier goed te testen is en de businesslogica op één plek staat in de code, dit verhoogt de onderhoudbaarheid van de code.

Communicatie

Tussen de “orchestrator” en de verschillende modules wordt gecommuniceerd via twee protocollen: namelijk het HTTP protocol, waarbij JSON wordt gebruikt. De standaard dus. Voor de communicatie tussen hardware aansturing en een module wordt gebruik gemaakt van gRPC. De reden hiervoor is dat gRPC veel beter geschikt is voor het verzenden van binaire data. De hardware waarmee gecommuniceerd wordt communiceren op binair niveau, daarom is de keuze gemaakt voor gRPC.

Taal en frameworks

Voor de codebase is er gebruik gemaakt van .NET 5 en C# met een MSSQL-database met Entity Framework. Het systeem heeft een user interface omdat de gebruikers eventueel een testresultaat moeten kunnen terughalen, of juist een test moeten kunnen configureren. Daarnaast is er een live-dashboard ontwikkeld waarmee continue een overzicht wordt gegeven van de kwaliteit van de geteste elementen. Voor deze interface is gebruik gemaakt van ASP.NET MVC.

Conclusie

De achterliggende gedachte bij dit project is geweest om de code zo flexibel en onderhoudbaar mogelijk te maken. De reden hiervoor is dat de teststraat anders kan worden ingericht, door een andere opstelling of het implementeren van een ander meetinstrument. In die gevallen wil je op een snelle manier je software kunnen aanpassen. Daarom is ervoor gekozen om de businesslogica te clusteren in een domain en de koppeling tussen verschillende onderdelen zo laag mogelijk te houden.
Verder is er gebruik gemaakt van feature folders hierdoor zo de overdraagbaarheid van de code te waarborgen en om dit te waarborgen is er ook gebruik gemaakt van “convention over configuration”. Op die manier kan een andere ontwikkelaar in de toekomst makkelijk instappen, mocht dit nodig zijn.

Technische uitdaging voor Covadis

Initieel was de uitdaging voor Covadis om de informatie uit de verschillende testapparaten uit te lezen en de informatie daaruit te interpreteren. In de eerste fase van dit project, lag de uitdaging vooral bij het ontwikkelen van de services om de meetinstrumenten uit te lezen. Bij veel van deze instrumenten moest op socket-niveau worden gecommuniceerd met de testinstrumenten. Waarbij ook vaak de documentatie niet altijd toereikend was, waardoor het toch veel trial-and-error werk werd.

Bij het overzetten naar de automatische teststraat kwamen er andere uitdagingen kijken, zoals externe factoren. Wat als er in de straat iets misgaat? En allerlei “edge-cases” die alleen in productie optreden. Ook de communicatie met de PLC via het OPC-UA protocol was een uitdaging aangezien dit voor ons ook nieuw was.

Een andere belangrijke uitdaging is dat het systeem robuust, snel, zelf herstellend en 24/7 beschikbaar moet zijn. Hiervoor moet je rekening houden met allerlei fouten in bijvoorbeeld de meetinstrumenten of externe factoren die kunnen optreden.

In totaliteit een behoorlijke uitdaging dus, die wij samen met Ferro Techniek tot een goed einde hebben gebracht. En daar zijn wij trots op!