Plc’s kunnen meer dan je denkt

Het zijn twee gescheiden werelden. Softwareontwikkelaars uit het high-end- en embedded-domein praten zelden met hun vakgenoten uit het plc-circuit. Dat is zonde, want plc’s zijn tegenwoordig zo veel meer dan de ouderwetse relaistechnologie. Sterker nog: het leeuwendeel van de meeste machines bestaat uit standaard componenten en kan uitstekend met plc’s worden ingevuld. Dat scheelt een hoop werk.

Alexander Pil
23 april 2021

Hardcore softwareontwikkelaars doen plc’s meestal af als inferieure technologie. Leuk voor simpele machientjes, maar absoluut ontoereikend voor de complexe systemen waar zij aan werken. ‘Dat is zó jaren tachtig’, hoor je dan. Lang hadden ze wellicht ook een punt; plc’s werken in principe altijd cyclisch en die takttijd kon weleens roet in het eten gooien als je het uiterste uit je systeem wilde halen. Voor moderne plc’s is een cyclustijd van minder dan tien milliseconden heel normaal. Systemen die realtimegedrag vereisen, kunnen zelfs gebruikmaken van plc’s die in minder dan een milliseconde klaar zijn voor de volgende lus.

B&R biedt de mogelijkheid om code in bijvoorbeeld Java, C++ of Python uit te rollen op een plc-platform.

Bas Michielsen, salesmanager bij B&R Industrial Automation, weerlegt graag het beeld dat een plc ouderwetse technologie is. ‘Natuurlijk zijn het twee aparte werelden: plc’s aan de ene kant en high-end embedded software aan de andere. Maar ze komen steeds meer naar elkaar toe.’ Zijn eigen bedrijf overbrugt de kloof onder meer door het mogelijk te maken om code in bijvoorbeeld Java, C++ of Python uit te rollen op een plc-platform. ‘Dat geeft ontwikkelaars de vrijheid om twee paden te bewandelen. Een deel doen ze direct op de plc-omgeving en het andere deel bouwen ze in hun eigen geavanceerde ontwikkeltool.’

Als de rekenkracht van een plc ontoereikend is, kun je uitwijken naar een industriële pc, betoogt Michielsen. ‘Binnen het aanbod aan plc’s heb je al een range aan keuzes, maar als dat niet volstaat, laat je een applicatie gewoon op een industriële pc draaien. Het is allemaal heel schaalbaar.’

Klaas van Gend, softwarearchitect en C++-programmeur bij Sioux Technologies, vraagt zich af: ‘Waar ligt de grens? Kun je bijvoorbeeld beeldverwerking in een plc of ipc doen?’ Bij zijn huidige opdrachtgever Philips is in het verleden de keuze gemaakt om alle realtime componenten in C++ uit te voeren. ‘Als ik jou zo hoor, had een groot gedeelte daarvan ook prima met een plc-platform kunnen worden opgelost. Het lastige is echter dat er een compleet 3d-model meeloopt om ervoor te zorgen dat het systeem op tijd stopt en er geen botsingen plaatsvinden. Dat model alleen legt al beslag op een moderne pc-processorcore.’

‘Het houdt inderdaad een keer op’, geeft Michielsen toe. ‘Je moet voortdurend kijken waar je welke functionaliteiten onderbrengt. Een van onze klanten zit in de groente- en fruitsortering. Om te bepalen of het een goede appel is of niet, is geavanceerde beeldverwerking nodig en dat vergt zo veel rekenkracht dat alles niet meer op één pc past. Er staat daarom een apart 19 inch rek naast de machine.’

NIH-syndroom

Van Gend werkt bij Philips momenteel mee aan de positioneringssoftware. ‘Ik heb me weleens afgevraagd waarom je zo’n applicatie zou schrijven in C++. Waarom doen we het niet in een omgeving die is gericht op de realtime besturing van apparaten? Eerlijk gezegd, heb ik nooit de tijd genomen om plc’s als oplossing te overwegen. Dat komt onder meer omdat het gevoel bij mij ook speelt dat het ouderwetse technologie is’, erkent Van Gend.

‘Wat een boer niet kent, dat vreet hij niet’, lacht Michielsen. Voor een deel is dat inderdaad waarom plc-technologie in de embedded- en high-end-markt nog slechts zeer beperkt wordt toegepast. Maar er is meer aan de hand. ‘Bij de meeste opdrachten waaraan ik heb gewerkt, ging het om kleine systeempjes waarin de logica niet groter mocht zijn dan, pakweg, een mobiele telefoon’, zegt Van Gend. ‘Dan heb je dus niet de uitwijkmogelijkheid om zaken via een 19 inch rek op te lossen. Als je systeem door een pijp van 5 centimeter doorsnede moet kunnen en de vormfactor een grote rol speelt, kom je er niet onderuit om het helemaal met de hand te schrijven. Aan de andere kant, voor een waferstepper of een elektronenmicroscoop staan die rekken er toch al, en zou het dus wel degelijk kunnen. Waarom het dan niet gebeurt? Dat is duidelijk het NIH-syndroom: not invented here.’

En: ‘Er zit heel veel geschiedenis in die software. De oudste stukken die ik ben tegengekomen, dateren van de jaren tachtig. Even overstappen vinden ze dus niet zo leuk’, zegt Van Gend met gevoel voor understatement. ‘In de embedded-wereld wordt steeds meer geabstraheerd van functionaliteit zodat alles backwards compatibel is via generieke interfaces en het gebruik van open standaarden als Robot Operating System of het gebruik van hogere ontwerptalen als Dezyne.’

De kern van high-end systemen is vaak te complex voor plc’s, maar er is ook een deel van die machines waaraan ze wel invulling kunnen geven.

Michielsen: ‘Kijk naar een machine van ASML. De kerntechnologie is zo super-high-end dat je dat met geen mogelijkheid redt met een plc. In die zin loopt de plc-wereld voortdurend achter. Er zal altijd een high-enddeel in geavanceerde machines blijven dat vooruitloopt op wat er standaard in de markt verkrijgbaar is. Dat gaan we ook nooit inhalen. Maar er is net zo goed een deel van die machine waaraan plc’s wel invulling kunnen geven.’

Waar die grens ligt, vindt Michielsen moeilijk te bepalen. ‘Hij verschuift continu; plc-technologie kan een steeds groter deel afdekken’, zegt hij. Als voorbeeld verwijst Michielsen naar het intelligente shuttlesysteem dat B&R onlangs op de markt bracht. ‘Daarmee halen we een herhaalnauwkeurigheid van vijf micrometer. Bij ASML hoef ik daar niet mee aan te komen, maar er zijn legio toepassingen waar dat ruim voldoende is.’

Bouwblokken configureren

Van Gend en Michielsen constateren dat er in de twee werelden een andere manier is van softwareontwikkeling. ‘Als je code schrijft in C, dan is het timinggedrag iets dat volgt en waar je in een tweede stap voor optimaliseert. Dat kan ook prima’, zegt Van Gend. ‘Alleen als het echt cruciaal is, let je vanaf het begin op de timingsaspecten.’ Uit zijn tijd bij Vector Fabrics, de failliete leverancier van dynamische softwareanalysetools, weet Van Gend dat programmeurs ‘berucht slecht weten waar de bottlenecks in hun software zitten. Ik heb er zelden eentje gezien die precies de vinger op de zere plek kon leggen.’

Het alternatief is om heel deterministisch te werk te gaan en per lus te definiëren wat er moet gebeuren. ‘Dit is ook hoe het Arduino-platform wordt geprogrammeerd’, zegt Van Gend. ‘Is dat ongeveer zoals het in de plc-wereld gaat?’

‘Deels wel’, antwoordt Michielsen. ‘In de machinebesturing kijk je veel meer naar de functionaliteit: wat moet die machine straks daadwerkelijk gaan doen? Er zijn heel veel zaken die je overal ziet terugkomen. Denk aan toegangsbeheer, safety of vision. Voor dat soort functies zijn standaard bouwblokken beschikbaar die je eenvoudig in je systeem kunt trekken. De code is zo ingericht dat je kunt configureren en niet hoeft te programmeren. En als je toch dieper wilt, heb je de vrijheid om bestaande blokken te modificeren, of hele nieuwe blokken te creëren voor de coretechniek waarmee je je echt onderscheidt van de concurrenten.’

Functioneel programmeren

‘Als je C of C++ gebruikt, ben je imperatief aan het programmeren. Stapje voor stapje beschrijf je wat er moet gebeuren’, gaat Van Gend verder. ‘De heilige graal in computerland is om weg te komen van die imperatieve talen en de overstap te maken naar functionele talen zoals Haskell, Ocaml of F#. Daarin beschrijf je wat je wilt hebben en laat je de compiler zelf uitvogelen hóe hij dat doet. In Simulink doe je dat in feite ook. Je zegt dat je een pid-regelaar nodig hebt en met welke parameters. Je trekt een lijntje naar de component waarmee hij moet praten, en klaar. Dat daar een zwik code uit komt, en dat die code cyclisch is, daar heb je nauwelijks weet van. In de gehele softwareautomatisering zie ik een switch naar declaratief en functioneel programmeren. Voor een gebruikersinterface kan het al helemaal declaratief bijvoorbeeld met Qt en QML. ‘Ik wil een knop en als je erop drukt, moet er dit en dit gebeuren.’ Daaronder schakel je dan naar een C++-laag voor de echte besturing.’

‘In de plc-wereld definieer je ook welke functionaliteit er achter zo’n knop zit’, zegt Michielsen. ‘Die moet je eerst bouwen en daar bieden we kant-en-klare blokken voor, waar onder de motorkap heel wat code schuilgaat.’

Tot slot, welke boodschap heb je voor de andere wereld? Michielsen: ‘Kijk voor een volgend project eens naar een plc-oplossing want er kan meer dan je denkt.’

‘Volgens mij is dat inderdaad een belangrijke conclusie. Mensen in mijn wereld weten onvoldoende wat de mogelijkheden zijn’, erkent Van Gend. ‘Mijn oproep aan de plc-gemeenschap is misschien een beetje flauw: ga eens nadenken over iets anders dan een 19 inch rek of een Din-rail. Als je echt voet aan de grond wilt krijgen in embedded systemen, moet het kleiner.’