Förkortningar / terminologi

Det finns massor av förkortningar och olika terminologier när man tittar genom PLC-dokumentation, vissa är leverantörsspecifika, andra är mer generaliserade bland olika PLC-tillverkare. När jag började tyckte jag att det var mycket svårt att veta vad någon menade med "Skapa en INT" eller "Denna POU borde vara i en separat uppgift".

Förhoppningsvis kommer nedan att vara användbara för människor och hjälper till att få bättre förståelse för vad dokumentationen verkligen säger att du ska göra!

Programstruktur relaterad

POU

Programorganisationsenhet

Detta är ett objekt som har logik som används för att utveckla din applikation. Dessa kan deklareras som olika olika typer (som ändrar deras beteende) men POU: er till slut tjänar en funktion - Att hålla och köra din kod. Förutom att deklareras som olika typer (som vi kommer vidare till) kan POU: er också förklaras använda ett annat språk. Detta betyder inte ett annat talat språk som engelska, men ett annat programmeringsspråk (vi kommer att täcka dessa senare också)

Uppgift

En uppgift exakt hur det låter, det är en uppgift som berättar din applikation att köra en uppsättning POU: er eller samla IO-data. I vissa PLC: er utför uppgifter olika andra uppgifter också och kanske inte alls kallas "Uppgifter" (titta på dig Siemens, OB1, OB35 etc är i princip uppgifter).

I de flesta PLC: er kan uppgifter definieras med en rad olika parametrar, t.ex.

  • Uppgiftsläge: Läget som uppgiften arbetar i, till exempel cyklisk exekvering, händelsedriven, frihjul. Det är förmodligen bäst att leta upp de olika tillgängliga lägena och vad de betyder för PLC som du använder eftersom de inte alltid görs på samma sätt.
  • Timeout för vakthund : Den tid då hela uppgiften MÅSTE slutföras. Underlåtenhet att slutföra uppgiften under denna tid kommer att höja en intern flagga som släpper alla utgångar till ett säkert tillstånd. Vissa PLC: er låter dig konfigurera vad som händer vid Watchdog-fel, andra gör det inte. Se dokumentation för din egen PLC.

En viktig regel att komma ihåg är att om en POU inte kan spåras tillbaka till en uppgift kommer den inte att genomföras. Till exempel:

Uppgift >> Huvud (PRG) >> Sub (PRG) >> Area_1 (FB) >> Funktion (FB)

Ovanstående visar "Uppgift" som kallar "Huvud" som kallar "Sub" och så vidare. Om "Area_1" raderades skulle "Funktion" inte ha någon väg till en uppgift och skulle därför inte längre köras i programmet. De flesta (inte alla) PLC-programmeringsmiljöer säger att en POU är föräldralös från en uppgift.

PRG och FB i exemplet ovan är typer av POU, som vi kommer att täcka nu.

PRG

PR O G RAM

En PRG är en typ av POU i de flesta PLC: er (inte alla, återigen tittar på Siemens där PRG inte finns). Minst en PRG måste existera eftersom uppgifter bara kan ringa en PRG. Eftersom en PRG helt enkelt är en typ av POU, fungerar den på samma sätt som alla andra POU och kan deklareras på olika språk.

En PRG kan ringa en annan PRG samt ringa någon annan typ av POU. En PRG kan också förklara sina egna variabler (täckas senare).

Obs : I vissa PLC: er kan PRG: er ange egna variabler men de upprätthålls inte mellan PLC-skanningar (en fullständig exekvering av en uppgift). Denna typ av variabler benämns vanligtvis Temp-variabler .

FB

F- funktion B- lås

Ett funktionsblock är förmodligen den vanligaste POU som används i en PLC. De används för att skapa kodblock som kan användas om och om igen genom att helt enkelt släppa FB i en POU eller någon annan FB. FB: er består av ingångs- och utgångsparametrar (vi kommer att täcka dessa mer i detalj) som gör att data utanför FB kan tas in och data som gjorts av FB kan skickas tillbaka till den som ringer. Till exempel

Ovanstående visar att FB_1 kallas på rad 1 (en PRG kallar det). Inmatningsdata har Sensor_1 skickas till den. FB_1- objektet utför en uppgift och matar sedan ut Output, som överförs till Output i PRG som ringer FB .

Rad 2 visar FB_1_CALL.Counter används, men vi kan inte se "Räknare" som en parameter för FB_1 ? Detta beror på att "Counter" är en statisk variabel (en variabel som används för att hålla information snarare än att skicka den någonstans). I de flesta PLC: er är statisk variabel information tillgänglig om instansen av dessa data också deklareras.

Vad är instansdata?

Instansdata är de data som tillhör en FB. I exemplet ovan innehåller FB_1_CALL all instansdata för FB_1. Det är anledningen till att förklaringen "FB_1_CALL.Counter" fungerar korrekt. FB_1 är namnet på FB, FB_1_CALL är data för det specifika samtalet för den FB.

Om FB_1 kallades igen på rad 3, måste du ge den en annan uppsättning instansdata genom att deklarera en annan identifierare för den, till exempel "FB_1_CALL2".

Detta tillvägagångssätt gör det möjligt att ringa ett FB hundratals gånger utan att påverka varandras datauppsättningar.

FC

F UN C TION

En funktion liknar ett funktionsblock, men den har inte egna data för mer än 1 PLC-skanning, alla variabler är tillfälliga .

PLC: er hanterar funktioner på olika sätt, till exempel CoDeSys gör att du kan lämna gränssnittsstift utan tilldelning där Siemens inte gör det. De flesta PLC: er säkerställer också att en variabel returneras när funktionen är klar. Denna variabel måste deklareras när funktionen skapas. Det är mycket vanligt att se funktioner som returnerar en Byte eller Word som innehåller en status för huruvida funktionen har slutförts utan problem.

VAR

VAR IABLE

En variabel är en behållare som innehåller information, det finns många olika typer och igen beror det på PLC som används. De viktigaste variabeltyperna (även känd som Datatyper) är:

  • BOOL: Digitala data (sant / falskt)
  • BYTE: Numeriska data / Bitvisa data (0 - 255)
  • INT: Numeriska data (-32768 - 32767)
  • UINT: Numeriska data (0 - 65535)
  • SINT: Numeriska data (-128 - 127)
  • USINT: Numeriska data (0 - 255)
  • DINT: Numeriska data (-2147483648 - 2147483647)
  • WORD: Numeriska data / Bitvisa data (0 - 65535)
  • DWORD: Numeriska data / Bitvisa data (0 - 4294967295)
  • REAL: Numeriska data (-3.402823e + 38 - 3.402823e + 38)
  • ARRAY: Array av vilken datatyp som helst (deklarerad som "ARRAY [0..10] OF DataType )

De flesta PLC: er stöder ovanstående, vissa PLC: er stöder ett urval av nedanstående också:

  • LWORD: Numeriska data / Bitvisa data (0 - 18446744073709551615)
  • UDINT: Numeriska data (0 - 4294967295)
  • LINT: Numeriska data (-9, 223, 372, 036, 854, 775, 808 - 9, 223, 372, 036, 854, 775, 807)
  • ULINT: Numeriska data (0 - 18446744073709551615)
  • VARIANT: Objekt (Allt)
  • NULL: Objekt (ingenting)

Ytterligare variabler stöds vanligtvis endast av 64bit PLC: er och Runtimes. Variant & Null datatyper är avancerade och inte vanliga i PLC: er.

Förutom ovanstående datatyper finns det också olika variabla attribut (lägen om du vill):

  • KONSTANT - Variabel som är hårdkodad och inte kan ändras vid körning
  • RETAIN - Variabel som kommer ihåg det sista värdet mellan förlust av strömförsörjning till PLC. De flesta PLC: er har en gräns för den maximala mängden data som kan bevaras. Äldre PLC: er kan behålla allt som standard eller ha specialregister som behålls, så se till att du kontrollerar.
  • PERSISTENT - En variabel som behåller sitt sista värde även efter en nyinitiering av PLC eller PLC är varmstartad. Det enda sättet att ladda om standarddata är att kallstarta PLC eller utföra en fullständig nedladdning. Obs : Persistenta variabler kan vara farliga om de används på fel sätt, särskilt om indirekt adressering / pekare används.

GRÄNSSNITT

Ett gränssnitt är deklarationen av variabler som en PRG, FB eller FC förväntar sig att använda. Det finns några nyckelord som kan användas för att deklarera gränssnitt:

  • VAR_INPUT - Data skickas till POU
  • VAR_OUTPUT - Data skickas ut från POU
  • VAR_IN_OUT - Data som skickas in och ut från POU till samma variabel (Om du vet lite om datorprogrammering, tänk på detta som vidarebefordran)
  • VAR - Data som är lokala för POU, Vissa PLC: er tillåter åtkomst till informationen endast med uttrycklig referens (till exempel "POU.VARIABLE")
  • VAR_STATIC - Samma som VAR, men tillåter inte åtkomst till data utanför blocket
  • VAR_TEMP - Tillfällig data, värdena lagrade i TEMP förloras när blocket lämnas
  • END_VAR - En obligatorisk uppsägningsdeklaration efter att du har deklarerat dina variabler.

Här är ett exempel med ovanstående deklarationer:

 VAR_INPUT Input_1: BOOL; END_VAR VAR_OUTPUT Output_1: BOOL; END_VAR VAR RETAIN Retained_Variable_1: INT; END_VAR VAR PERSISTENT Persistent_Variable_1: Byte; END_VAR VAR TEMP Temp_Variable_1: DWORD; END_VAR 

VAR_GLOBAL

GLOBAL Variabler är specialvariabler som är tillgängliga var som helst i ett projekt. De fungerar som ett bra sätt att överföra information mellan olika projektområden.

En del människor använder Globals för allt och deklarerar inga VAR i POU. Jag fraråder detta eftersom det blir rörigt snabbt!

Globaler definieras vanligtvis i en speciell Global Variable-lista eller symboltabell beroende på PLC du använder

(Siemens använder DB: er, variabler lagrade i DB: er som inte är Instans-DB: er motsvarar globala variabler)

POU-språk

Som nämnts tidigare kan POU: er skrivas på olika språk. Nedan är de vanligaste (skärmbilder från CoDeSys)

POJKE

LAD DER

Stege är förmodligen det vanligaste språket. Det är lätt att läsa och följa och felsökning.

FDB

F UNCTION B LOCK D IAGRAM

FBD är väldigt mycket lik Ladder, det brukar användas för projekt som består av många separata funktioner (därav namnet). Logik som jämför Bool-värden är lättare i Ladder än i FBD.

ST

S TRUCTURED T EXT

Strukturerad text är ett av (om inte, det mest) flexibla av språken. Det är snabbt att programmera in, lätt att läsa, men kan snabbt bli rörigt om formateringsregler inte följs.

SFC

S ekvivalent F unktion C hart

Detta språk är utmärkt för sekvensering (därav namnet!). Men det är en av de svårare att förstå. I exemplet nedan är det viktigt att notera att steget "ProcessTimer" måste anropas i vilket scenario som helst, annars uppdateras inte timern och håller det sista värdet. Det är mycket lätt att fastna med SFC och lämna variabler i tillstånd som inte var avsedda

SFC behöver förmodligen sin egen dedikerade artikel för att förklara vad som exakt händer här (jag länkar det här när det är skrivet!)

CFC

C ONTINUOUS F UNCTION C HART

CFC är mycket lik FBD, men du är inte begränsad till nätverk (horisontella platshållare), du är fri att rita din logik hur du vill. Det här språket är användbart för elektriker som överförs till PLC-logik, eftersom det läser samma sak som en ritning. Det finns dock några saker att vara försiktiga med, logiken kanske inte flyter som förväntat. Det finns små nummer som visar logikflödet, det är viktigt att hålla reda på vad som händer och var.

Avancerade tillbehör

Ovanstående visar de grundläggande byggstenarna som behövs för att bygga nästan alla applikationer. Det finns några lite mer avancerade extrafunktioner som kan användas för att göra saker lite lättare.

Strukturer (DUT / UDT)

Strukturer är bra för upprepade uppsättningar med variabler. En struktur är i princip en grupp variabler som kan kallas med gruppens namn. Tänk nedan:

 TYPSIGNALBOX: STRUKT Signal1: BOOL; Signal2: BOOL; SIGNAL 3: BOOL; SignalCount: INT; END_STRUCT END_TYPE 

Ovanstående struktur kallas "SIGNALBOX" och kan deklareras som en variabel typ som nedan:

 BOX1: SIGNALBOX; BOX2: SIGNALBOX; 

Detta skulle skapa två instanser av "SIGNALBOX", som båda har tillgång till strukturdata. Till exempel kan du använda variabeln "BOX1.SignalCount".

Fördelarna med att använda strukturer är att du snabbt och enkelt kan skapa grupper av stora datamängder och veta att alla nödvändiga signaler definitivt finns där.

BIBLIOTEK

Bibliotek är en samling av POU: s och variabla listor som kan flyttas från projekt till projekt. Detta gör att du kan ha en standarduppsättning POU: er, testade och testade som kan släppas in till ett projekt vid behov.

Bibliotek kan kapslas också, så ett bibliotek kan ringa ett annat bibliotek vid behov. Alla storskaliga programvaruhus har nästan definitivt en standardbibliotek.

CoDeSys

Alla skärmdumpar för denna artikel erhölls från CoDeSys 3.5. Det är ett gratis utvecklingspaket som kan simulera hårdvara. Det är gratis och enkelt att få. Tillverkare som ABB, IFM, Wago, Schneider och mer använder CoDeSys för att driva sina PLC: er.

Om du vill utveckla din förståelse och din färdighet, skulle jag starkt rekommendera det som en plats att börja!