28 November 2024
In december vorig jaar deed ik mijn eerste ervaring op met de Arduino Professional OPTA PLC. Het concept van de PLC (Programmable Logic Controller) werd in 1968 geïntroduceerd en vond zijn eerste praktische toepassing in de automotive-industrie. De voorlopers van de PLC waren gebaseerd op traditionele relaissystemen, die veel onderhoud vergden, regelmatig opnieuw bedraad moesten worden en bijzonder kostbaar waren bij aanpassingen. De komst van de PLC bracht hierin een revolutie. Dankzij de introductie van zogenaamde ‘ladderdiagrammen’ en grafisch programmeren werd de overstap voor traditionele elektrotechnici eenvoudiger, omdat ladderdiagrammen sterk lijken op de bekende relaisschema’s. Vorig jaar introduceerde de samenwerking tussen Finder en Arduino Professional een nieuwe klasse: een industriële PLC van hoog niveau, die zowel programmeerbaar is met de vijf gestandaardiseerde IEC 61131-3 PLC-talen als met C++ via de Arduino IDE.
Mijn eerste kennismaking was vanuit de C++-kant, maar inmiddels, bijna een jaar later, heb ik ook de PLC-programmeerbenadering omarmd, en dat heeft voor mij een nieuwe wereld geopend. Het programmeren met ladderdiagrammen, structured text en function block diagrams zorgt voor gestructureerde en robuuste code. Bovendien is het programmeren van PLC’s ontzettend leuk, omdat je direct resultaat ziet van je werk. De logica en structuur die je bedenkt, zorgt ervoor dat machines bewegen en processen automatisch verlopen. Het biedt ruimte voor creativiteit en daagt je uit om slimme oplossingen te bedenken voor complexe problemen. Dankzij de flexibiliteit van PLC-programmeren wordt het opnieuw bedraden van knoppen, actuatoren, motoren en sensoren tot een minimum beperkt. De logica is losgekoppeld van de hardware, wat betekent dat toepassingen snel kunnen worden aangepast en meegroeien met een veranderende omgeving.
Bekende leveranciers van PLC’s zijn onder andere Siemens met de Simatic S7 en TIA Portal, Rockwell Automation (Allen-Bradley) met de ControlLogix, CompactLogix en MicroLogix series, en Studio 5000 software. Mitsubishi biedt de MELSEC series en GX Works 2-3 software aan. Hitachi heeft de HX, F300 en X-series PLC’s, evenals WebCon software. Schneider Electric levert de Modicon, M340, M580 en Quantum series, met de EcoStruxure Control Expert software.
Hoewel PLC-programmeren en C++ op het eerste gezicht heel verschillende omgevingen lijken, delen ze verrassend veel fundamentele concepten. Zo spelen bekende programmeerprincipes een rol, zoals conditionele logica (IF/THEN/ELSE, AND, OR, XOR) en het definiëren van variabelen en datatypes, zoals booleans, integers en floats/reals. Inputs en outputs moeten worden beschreven om ze tijdens de uitvoering van het programma aan te spreken, zoals IN, OUT, GPIO’s en interfaces zoals I2C, UART of RS485. Bij PLC’s maak je gebruik van timers en counters, zoals TON (On-Delay Timer), TOF (Off-Delay Timer) of CTU (Count Up). In C++ zie je vergelijkbare functies, zoals delay() of millis(). Debugging vertoont ook overeenkomsten: bij PLC’s kun je eenvoudig variabelen in real-time uitlezen, terwijl je in C++ vaak creatief moet nadenken over hoe je runtime-waarden inzichtelijk maakt. Kortom, logische structuren, timing, variabelen, modulariteit en foutafhandeling zijn thema’s die in beide werelden een grote rol spelen. Mijn programmeervaardigheden zijn hierdoor goed toepasbaar in zowel C++ als PLC-omgevingen.
Mijn eerste PLC-programma was een simpele ‘hello world’-opzet: een knipperlicht waarbij de aan- en uit-tijd werd gedefinieerd. Met behulp van function block diagrams, zoals PT (Pulse Timer) en TON (On-Delay Timer), was het eenvoudig om een schakellamp te maken. In PLC-termen zijn schakelaars ‘contacts’, en lampen, motoren en actuatoren ‘coils’. Een visuele weergave van een schakeling ontstaat door in een ladderdiagram verschillende sporten te definiëren, waarin condities of functieblokken zijn opgenomen. Naast dit programma maakte ik ook een counter, die bijhoudt hoe vaak een sensor wordt gepasseerd. Zodra de drempelwaarde van 10 bereikt is, wordt een controlelamp geactiveerd. Hiervoor gebruikte ik de CTU (Count Up Function Block Diagram). Verder ontwierp ik een opzet met een dubbele heater als IO-uitbreiding. Deze kan met twee relais op halve of volledige kracht worden ingeschakeld. Ik bouwde twee grote schakelaars in om de heaters afzonderlijk te bedienen, en voegde signaallampen toe om de actieve status van de heaters te tonen. In mijn PLC-programma gebruik ik ladderdiagrammen om de heaters te schakelen en integreerde ik een analoge temperatuursensor. Met structured text zet ik de gemeten spanning om naar een berekende temperatuur. Met de WATCH-functie hou ik variabelen in de gaten, terwijl de Oscilloscope een grafische weergave van de temperatuur biedt.
Ik ben verrast door hoe snel je een robuuste, industriële automatiseringsunit precies kunt laten doen wat je voor ogen hebt, mits je de logica eenduidig kunt beschrijven en abstraheren naar contacts, coils, variabelen en function block diagrams. De toepassing van de IEC 61131-3 PLC-talen is bovendien internationaal gestandaardiseerd, waardoor PLC-code eenvoudig kan worden gedeeld met klanten en collega’s over de hele wereld.