+1 500 000 producten
7000 pakketten
+300 000 klanten uit 150 landen
Datum van publicatie: 14-03-2025 🕒 6 min leestijd
PLC-stuurprogramma's worden veel gebruikt in de industrie op alle plaatsen waar controle van parameters en procesbesturing noodzakelijk is. De ontwikkeling van ingebouwde elektronica heeft ervoor gezorgd dat dit apparaten zijn met hoge specificaties, bestand tegen EMI-storingen en omgevingsomstandigheden, en tegelijkertijd gebruiksvriendelijk. In tegenstelling tot vroeger zijn de omgevingen voor het maken van programma's erg vergelijkbaar en in de meeste daarvan is er een manier om een programma uit te voeren die ons zal bevallen. Dus hoe programmeer je een PLC-controller?
Programmeertalen voor PLC-controllers zijn het onderwerp geworden van de IEC 61131-norm die in 2013 is gepubliceerd. In deel 3 van deze norm zijn aanbevelingen opgenomen met betrekking tot talen en methoden voor het programmeren van PLC-controllers. Naast gegevenstypen, variabelen, configuratie en de manier waarop deze wordt beschreven, programma-organisatie-eenheden en objectgeoriënteerde programmeerprincipes, worden 5 basisprogrammeertalen voor PLC-controllers genoemd en worden de eisen aan hun functionaliteit gedefinieerd. Dankzij deze norm zijn de basisprogrammeertalen die door PLC-programmeurs worden gebruikt:
De meest populaire en in alle omgevingen beschikbare taal voor het maken van programma's voor PLC's is de laddertaal LD (of LAD). Het is een grafische taal, maar gebruikt eenvoudige symbolen, dus in oudere oplossingen werd semigrafiek gebruikt die werd gemaakt met behulp van standaard ASCII-tekens. Deze tekens waren ook gemakkelijk weer te geven op het PLC-scherm, wat het mogelijk maakte om eenvoudigere programma's ad hoc te maken zonder een pc te gebruiken. In deze taal wordt een programma-schema gemaakt met behulp van symbolen die lijken op die op elektrische schema's – spoelen en contacten. Contacten kunnen normaal open (NO) of normaal gesloten (NC) zijn, en spoelen kunnen verschillende functionaliteiten hebben, zoals instellen, resetten of negatie. Ook kunnen hier functies en hele functionele blokken worden ingevoegd, zoals timers, tellers of flip-flops. De laddertaal is zelfs voor een onervaren programmeur begrijpelijk.
Figuur 1. Fragment van een programma in de laddertaal LD (LAD)
Een andere zeer intuïtieve manier van programmeren, vooral voor mensen die bekend zijn met digitale techniek, is het functioneel blokdiagram FBD. Een voorbeeld van een "code"-fragment uitgevoerd met FBD wordt getoond in figuur 2. De afzonderlijke ingangen, uitgangen en operaties worden weergegeven door functionele blokken en poorten, die niet alleen logische functies uitvoeren, maar ook signalen kunnen verwerken volgens een bepaald algoritme. Onder de functionele blokken bevinden zich PID-regelaars, een breed scala aan golfvormgeneratoren, tellers en andere. Sommige programmeeromgevingen staan ook toe dat gebruikers hun eigen blokken definiëren met de vereiste functionaliteit. FBD is een grafische taal. De afzonderlijke blokken worden op het schema geplaatst en met elkaar verbonden, wat lijkt op het tekenen van logische schakelingen. Sommige programmeeromgevingen staan niet alleen het verbinden van ingangen/uitgangen toe, maar ook het maken van bussen en referenties die een reeks parameters doorgeven (in figuur 2 worden bussen weergegeven door dikke lijnen – hier geven ze meerbitige constanten en variabelen door).
Figuur 2. Voorbeeld van een programmafragment uitgevoerd met FBD
Gestructureerde tekst ST is een taal op hoog niveau, die doet denken aan de ooit zeer populaire taal Pascal. Het maakt meer complexe operaties mogelijk, waarvan de notatie niet beperkt is door een wirwar van lijnen op het scherm en de mogelijkheid om deze uit te voeren zoals bij FBD, wat vaak een groot scherm met een goede resolutie vereist. Programmeren in ST lijkt op het schrijven van code in traditionele programmeertalen voor pc's. Ondersteunde instructies zijn complexe instructies zoals lussen repeat…until, do…while, voorwaardelijke instructies if…then…else, case en wiskundige functies sqrt(), sin(). Belangrijk is dat, ongeacht de hardwarefabrikant of omgeving, de functies van de ST-taal voor hen gemeenschappelijk zijn en zijn gedefinieerd in de IEC 61131-norm. Omdat de genoemde norm het combineren van de daarin genoemde talen toestaat, kan de ST-taal ook worden gebruikt om "invoegingen" of niet-standaard FBD-blokken te maken.
Listing 1. Voorbeeld van een functie uitgevoerd in de ST-taal
//=======================================================================
// Function Block Timed Counter : Incremental count of the timed interval
//=======================================================================
FUNCTION_BLOCK FB_Timed_Counter
VAR_INPUT
//Trigger signal to begin Timed Counting
Execute : BOOL := FALSE;
//Enter Cycle Time (Seconds) between counts
Time_Increment : REAL := 1.25;
//Number of Desired Count Cycles
Count_Cycles : INT := 20;
END_VAR
VAR_OUTPUT
//One Shot Bit indicating Timer Cycle Done
Timer_Done_Bit : BOOL := FALSE;
//Output Bit indicating the Count is complete
Count_Complete : BOOL := FALSE;
//Accumulating Value of Counter
Current_Count : INT := 0;
END_VAR
VAR
//Timer FB from Command Library
CycleTimer : TON;
//Counter FB from Command Library
CycleCounter : CTU;
//Converted Time_Increment in Seconds to MS
TimerPreset : TIME;
END_VAR
// Start of Function Block programming
TimerPreset := REAL_TO_TIME(in := Time_Increment) * 1000;
CycleTimer(
in := Execute AND NOT CycleTimer.Q,
pt := TimerPreset);
Timer_Done_Bit := CycleTimer.Q;
CycleCounter(
cu := CycleTimer.Q,
r := NOT Execute,
pv := Count_Cycles);
Current_Count := CycleCounter.cv;
Count_Complete := CycleCounter.q;
END_FUNCTION_BLOCK
Het sequentiële functiediagram is een andere van de grafische programmeertalen. De voorloper was de GRAFCET-taal, gemodelleerd naar binaire Petri-netwerken. Het maakt het mogelijk om een reeks stappen (acties) te beschrijven die in een strikt bepaalde volgorde moeten worden uitgevoerd. Het is vooral nuttig voor het maken van programma's voor het beheren van processen die synchronisatie vereisen of processen die in fasen kunnen worden opgedeeld. De belangrijkste componenten van een programma in SFC zijn: stappen (fasen) gekoppeld aan acties, overgangen gekoppeld aan logische voorwaarden, directe verbindingen tussen stappen en overgangen.
Vaak wordt de SFC-taal gecombineerd met een andere programmeermethode, zoals de ladder LD. SFC is van nature een gelijktijdige programmeertaal, waarin meerdere POU's (Program Organization Units), d.w.z. eenheden die de stroom regelen, tegelijkertijd actief kunnen zijn. Sommige omgevingen maken ook het maken van macroacties mogelijk, d.w.z. acties binnen POU's die de status van een andere POU beïnvloeden. Op deze manier kan één POU beslissen over de actieve stappen die door andere POU's worden ondernomen.
Figuur 3. Voorbeeld van een programmafragment in de SFC-taal
De instructielijst wordt al beschouwd als een verouderde manier van programmeren. Deze taal lijkt enigszins op assembler, maar ondanks de implementatie voor verschillende PLC-controllers uitgerust met verschillende processors, is de IL-taal onafhankelijk van het type gebruikte processor. Net als assembler bestaat het uit zeer eenvoudige instructies, en meer complexe operaties vereisen het gebruik van veel van hen. De uitvoering van het programma wordt bestuurd door middel van spronginstructies en subroutine-aanroepen.
Veel fabrikanten van controllers, ondanks de volledige compatibiliteit van de aangeboden hardware en software met de IEC 61131-3-norm, bieden extra oproepen/functionele blokken die specifiek zijn voor de betreffende leverancier en zijn afgestemd op de door hem aangeboden hardware, zoals lezen of schrijven naar ingangen/uitgangen. Bijvoorbeeld, de IL-taal voor Siemens PLC-controllers wordt "Statement List" of "STL" genoemd in het Engels en "Anweisungs-Liste" of "AWL" in het Duits. De Duitse naam is ook overgenomen in de nationale versies van de runtime-omgeving in het Italiaans en Spaans. Een gebruiker van het Simatic-pakket kan kiezen tussen Duitse en internationale mnemonics om instructies weer te geven. Bijvoorbeeld, "A" betekent "AND" of "U" betekent "UND", "I" betekent "Input" of "E" betekent "Eingang", enz.
Listing 2. Voorbeeld van een programmafragment in de IL-taal
LD Speed
GT 2000
JMPCN VOLTS_OK
LD Volts
VOLTS_OK LD 1
ST %Q75
Het doel van deze tekst is niet om PLC-programmering te leren, maar om bepaalde mogelijkheden en keuzemogelijkheden aan te geven. Elke PLC-programmeur moet de methode kiezen die het meest geschikt is voor zijn behoeften, of ze combineren afhankelijk van de toepassing. Bijvoorbeeld, het FBD-diagram zal waarschijnlijk in de smaak vallen bij gebruikers die logische schakelingen kennen en begrijpen, terwijl de ladder LD nuttig zal zijn voor het programmeren van eenvoudigere besturingssequenties. Aan de andere kant zijn ST en SFC geschikt voor het programmeren van complexe processen, hoewel bijvoorbeeld de ST-taal is geïmplementeerd in de Easy micro-PLC-controller van Eaton, en deze is eerder nuttig voor het uitvoeren van eenvoudigere, minder veeleisende besturings- en controlefuncties. Aan de andere kant zijn er geen aanbevelingen die zeggen welke taal waarvoor mag worden gebruikt, welke waarvoor geschikt is. Met meer of minder moeite kan met behulp van elk van de besproken methoden passende software worden gemaakt. De beste optie lijkt het combineren van talen afhankelijk van de behoeften en om de leesbaarheid van de applicatie zo groot mogelijk te maken.
Transfer Multisort Elektronik (TME) is een van ’s werelds grootste distributeurs van elektronische componenten, elektrotechnische onderdelen, werkplaatsuitrusting en industriële automatisering. De catalogus bevat meer dan 1.500.000 producten van 1.300 toonaangevende fabrikanten. De moderne logistieke centra van TME in Łódź en Rzgów (Polen), met een totale oppervlakte van meer dan 40.000 m², verzenden dagelijks bijna 6.000 pakketten naar klanten in meer dan 150 landen.
TME investeert ook in de ontwikkeling van kennis en vaardigheden van jonge ingenieurs en elektronicahobbyisten via het TME Education-project, en ondersteunt de technologische gemeenschap door het organiseren van de TechMasterEvent -serie, die innovatie en kennisuitwisseling bevordert.