Blog

De kracht van een framework 

Image

Vandaag de dag zien we nog regelmatig dat voor iedere machine of installatie de volledige PLC-software opnieuw wordt geschreven en veel code wordt uitgekopieerd. Behalve dat dit arbeidsintensief is, is de kans op fouten groot. Doordat de functionaliteit van machines en installaties toeneemt, neemt de codeer- en testtijd toe en wordt het steeds lastiger om op tijd de software gereed en getest te krijgen. Daarnaast is er vaak geen uniformiteit tussen bijvoorbeeld de verschillende machines. Wij komen machines tegen van dezelfde fabrikant met een totaal verschillende bedieningsfilosofie. Op zich hoeft dit niet erg te zijn, als de verschillende machines bij verschillende eindklanten komen te staan. Maar als de machines worden opgenomen in één productielijn, dan wordt het een ander verhaal: er ontbreekt dan een uniforme bediening. Daarnaast ontstaat tijdens de inbedrijfstelling vaak de noodzaak voor meerdere software engineers. Dit komt doordat verschillende programmeermethodes worden gebruikt en men elkaars code niet goed kan lezen. Met de huidige krapte op de arbeidsmarkt kan dit tot problematische situaties leiden. 

Een oplossing is het standaardiseren of modulariseren van de software. Om dit te kunnen doen moet je als softwareteam met elkaar afspraken gaan maken rondom coding-guidelines en naming conventions. Als richtlijn of hulpmiddel zou je gebruik kunnen maken van de coding-guidelines van PLCOpen, deze kunnen als een mooi vertrekpunt worden gebruikt. In de praktijk blijkt vaak wel dat deze nog bijgeschaafd moeten worden, totdat ze voldoen aan de specifieke wensen van het softwareteam en toepassing. 

Standaard framework 

Naast het standaardiseren en modulariseren kan een standaard framework helpen om snel code te ontwikkelen. Onder een standaard framework verstaan wij, als Gain, de basissoftware waarin het nodige al is geregeld. Denk hierbij aan alarmafhandeling, mode control, eventueel een stuk logging en datatracking, etc. Als basis voor een framework kan worden gekeken naar de Pack-ML standaard of SA-88. De keuze van een standaard is afhankelijk van de wensen en toepassing. 

Behalve een stukje standaardisatie biedt een framework een aantal andere voordelen. Met een framework is het eenvoudiger om in een groter softwareteam te werken. Er kan bijvoorbeeld een splitsing gemaakt worden in een framework development team en een machine development team. Hierbij kan het framework team meer kennis van softwareontwikkeling hebben, terwijl het machine team meer domeinkennis heeft. Eventueel kunnen de teams nog worden uitgebreid met een testteam. 

Met de beschikking over een framework kan een fabrikant veel sneller machines of installaties ontwikkelen. Vanuit Gain hebben we de ervaring dat het mogelijk is om tot 50% tijd te besparen op het ontwikkelen van prototypemachines. Ook hebben we gemerkt dat het inschatten van budget en doorlooptijd veel beter gaat. 

Daarnaast is het mogelijk om het framework continu uit te breiden met extra functionaliteit. Afhankelijk van de functionaliteit kan deze eenvoudig bij een upgrade van een machine worden toegevoegd. Denk hierbij aan bijvoorbeeld OEE-registratie, logging, performance optimalisatie, etc. Eventueel is het mogelijk om dit op basis van licenties te doen. 

Programmeertalen 

De huidige programmeertalen bieden steeds meer mogelijkheden op het gebied van “Object Oriented programming” afgekort OOP. OOP is perfect voor het maken van een standaard framework. Met OOP heb je de mogelijkheid om basis functieblokken of classes te maken met daarin de gewenste basisfunctionaliteit voor bijvoorbeeld alarmafhandeling en modecontrol. Door middel van encapsulation en overerving kunnen deze basisblokken worden uitgebreid met de gewenste functionaliteit voor de machine en/of installatie. 

Met name de Codesys programmeeromgeving die wordt gebruikt door veel verschillende PLC-fabrikanten, het nieuwe Siemens platform Simatic AX en TwinCAT van Beckhoff, zijn zeer geschikte programmeerpakketten. Deze pakketten hebben een goede ondersteuning voor OOP. 

Naast OOP is goed librarybeheer met versiebeheer noodzakelijk. Gelukkig gaan steeds meer softwarepakketten gebruik maken van Git, waardoor het beheer eenvoudiger wordt. Belangrijk hierbij is dat de broncode in een separate tekstfile wordt opgeslagen. TwinCAT en het toekomstige Simatic AX blinken hierin uit. Veel andere pakketten hebben nog een matige tot slechte ondersteuning doordat de broncode als bijvoorbeeld een enkele binary file wordt opgeslagen. Hierdoor is merging en vergelijken van de code uit verschillende versies alleen maar mogelijk met de tools die door de leveranciers worden geleverd. Vaak missen deze een integratie met Git en zijn ze niet altijd van het gewenste niveau. Als de code wordt opgeslagen in tekstfiles, dan kan gebruik worden gemaakt van standaard open-source tooling die voorhanden is, zoals bijvoorbeeld WinMerge. 

Ontwikkeling framework 

Het ontwikkelen van een framework vraagt de nodige aandacht, dit gaat vaak veel verder dan alleen het ontwikkelen van software. Men grijpt dit moment ook wel aan om niet alleen de software kant op te pakken, maar ook de mechanica en de hardware. Hierdoor kan een project al gauw te groot en complex worden, met het risico op mislukken. Mijn advies is: begin klein met een eenvoudige machine of installatie als basis en ontwerp hierop het nieuwe framework. Het framework zal in het begin zeker nog niet compleet zijn en niet voldoen aan alle verwachtingen. Het voordeel is dat men kan wennen aan de nieuwe aanpak en het framework kan uitbreiden en aanpassen met de ervaringen die men opdoet. Bovendien heeft het ontwikkelteam op deze manier een goede use-case. Een nadeel kan zijn dat het framework te veel is toegespitst op de specifieke oplossing en hierdoor niet flexibel genoeg is. 

Voor het ontwikkelen van een framework hebben wij bij Gain de ervaring dat een scrumachtige benadering het beste werkt. De waterval methodiek is vaak wat minder geschikt omdat het ontwikkelen van een framework over het algemeen een ontwikkeltraject is, waarbij het exact specificeren van alle gewenste functionaliteit in het begin lastig is. Als tooling kan hiervoor bijvoorbeeld DevOps of Jira worden gebruikt. 

Tijdens het coderen van de software kan al worden begonnen met het testen van de basisfunctionaliteit van het framework. Dit kan worden gedaan met unit-tests. Unit-tests zijn kleine stukjes software die de functionaliteit testen van een bepaalde functie. Deze testen kunnen eventueel worden geautomatiseerd. 

Nadat het framework is ontwikkeld kan de specifieke software voor de eerste machine of installatie worden geschreven en getest. 

Behalve het coderen van een framework is het beschrijven van de werking en het gebruik noodzakelijk. Belangrijk is dat er handleiding beschikbaar komt met daarin beschreven hoe de verschillende blokken werken en hoe een project kan worden gemaakt met het framework. Ook is het van belang dat er duidelijke coding-guidelines zijn. 

 

Onderhoud en uitbreiding framework 

Na de eerste release van het framework wordt onderhoud belangrijk. Denk hierbij aan het oplossen van bugs, hardware- en/of firmware wijzigingen. 

Naast onderhoud is vaak uitbreiding van de gewenste functionaliteit gewenst. Hierbij is het aan te raden om dit op een gestructureerde manier aan te pakken. Dit zou bijvoorbeeld ook op basis van scrum kunnen. Uiteraard dient de nieuwe functionaliteit goed getest te worden. 

Voor het onderhoud en uitbreiding van het framework is het van belang om een goede strategie en tooling rondom versiebeheer te hebben. Hiervoor kan bijvoorbeeld Git worden gebruikt als tooling, Gitflow kan als strategie worden gebruikt. Gitflow kent oplossingen voor het beheren van releases en hotfixes. 

Standaard framework Gain 

Ook binnen Gain maken we gebruik van een door ons ontwikkeld framework. Dit framework is door de jaren heen ontwikkeld en vormt de basis voor Beckhoff en Codesys projecten die wij voor klanten uitvoeren. Daarnaast wordt dit framework, of een afgeleide versie, gebruikt door klanten van Gain voor hun eigen software. 

Het Gain Beckhoff framework is gebaseerd of de Pack-ML standaard. Met de Pack-ML heeft Gain inmiddels al ruim 14 jaar ervaring. Naast verschillende basisblokken voor Units, equipmentmodules en controlmodules bestaat het framework uit de nodige library functies voor servo’s, wiskundige berekeningen, diverse control modules zoals kleppen en motoren, etc.  

Naast de software is er een volledige beschrijving van alle framework items. 

Omdat Gain beschikt over de volledige sourcecode kunnen we het framework als geheel of gedeeltelijk gebruiken voor jouw framework. 

Heb je interesse in het ontwikkelen van een eigen framework of wil je gebruik maken van het Gain Beckhoff framework? Neem dan contact op met je accountmanager of Otto Bouman of ondergetekende. Samen kunnen we kijken naar de mogelijkheden. 

 

  Geplaatst: oktober 2023

Heeft dit blog je geïnspireerd?

Wil je werken bij Gain of weten of wij ook jou kunnen helpen bij jouw verbetertraject? Neem gerust contact met ons op.

Logo Gain Automation Technology
Image