Kapitel 4 Programmerbar logik Programmerbar logik (PLC: Programmable Logic Controller; fi. ohjelmoitava logiikka) är en sorts mikrodatorliknande instrument som är speciellt avsedda för logik- och sekvensstyrningsproblem. De introducerades inom den amerikanska bilindustrin på 1970-talet, för att effektivera omställningen av produktionslinjerna vid produktbyten. I dag används programmerbar logik rutinmässigt i all industri. En PLC kan schematisk se ut enligt följande: Insignalerna och utsignalerna är spänningar som kan tänkas Programmeringsenhet Elaggregat Processor Minne Gränssnitt Inputmodul Outputmodul Input Output Figur 4.1: Schematiskt diagram av PLC represenera boolska variabler (hög spänning = 1, låg spänning = 0). En PLC kan programmeras med logiska funktioner, så att utsignalerna är booleska funktioner av insignalerna och eventuellt tillståndsvariabler. Programmering av dagens PLC:n sker idag uteslutande med PC:n. Det existerar en stor mängd olika PLC:n på marknaden, nedan en lista på några viktiga leverantörer (i alfabetisk ordning): - ABB (PROCONTIC) - Allen-Bradley - Mitsubishi - Omron - Philips 61
62 KAPITEL 4. PROGRAMMERBAR LOGIK - Schneider (Telemecanique) - Siemens (SIMATIC) - Texas Instruments - Toshiba - m.fl. Figur 4.2: Illustration av modulär uppbyggnad, bilden från Allen-Bradleys websidor Dagens PLC:n har en modulär uppbyggnad, se Fig. 4.2 och 4.3. Man kan således köpa de klossar man behöver, t.ex - Digitala inputs (typiskt i paket av 4-32 st.) - Analoga inputs (typiskt i paket av 4-16 st.)
4.1. FUNKTIONSSÄTTET HOS EN PLC 63 Figur 4.3: Närmare bild av PLC, bilden från Omrons websidor - Digitala outputs - Analoga outputs - PID-regulatorer - Redundans för kritiska tillämpningar D.v.s. man kan och brukar även utföra konventionell analog reglering med dagens PLC:n. 4.1 Funktionssättet hos en PLC En PLC opererar enligt sekvensen 1. Läs och lagra insignaler i minnet 2. Exekvera programmet 3. Uppdatera utsignalerna Tillståndsvariablernas och utsignalernas värden evalueras således en gång per cykel, och man undviker problem som hasard, kapplöpning och oskillation som förekommer i analog logik. Däremot förekommer nog liknande beteende i PLC:n också, men det beror i så fall på programmeringsfel! Om t.ex. en variabel A i programmet tilldelas ett värde enligt A = A kommer värdet hos A att alternera periodiskt med den frekvens som sekvensen genomgår. 1 0
64 KAPITEL 4. PROGRAMMERBAR LOGIK Tiden för en cykel är typiskt i området 0.5-50 ms. Man låter oftast programmets längd påverka cykelns längd, dvs man börjar på nytt genast då man är färdig med en cykel. Leverantörer specificerar tider för hur länge det tar att utföra 1000 ord (time/kword) av programinstruktioner, och hur länge det tar att avläsa I/O. Dessa uppgifter kan användas för uppskattning av tiden t c för en cykel. Denna tid bör beaktas då man har snabba processer eller händelser med kort varaktighet: - Den tid som maximalt kan förflyta innan en förändring i en insignal påverkar utsignalerna är 2 t c (förändringen sker strax efter att insignalerna inlästs). - En insignalförändring som varar en tid kortare än t c kan bli odetekterad. 4.2 Programmering av en PLC Programmering av en PLC sker med hjälp av en skild programmeringsenhet, som i dagens läge är en PC. Det finns ett antal olika sätt att programmera PLC:n, och det finns fem stycken IEC(International Electrotechnical Commission)-standardiserade programmeringsspråk: - Structured Text (ST), hög-nivå textbaserat språk, liknar Pascal - Instruction List (IL), låg-nivå textbaserat språk, liknar assembler, beskrivs närmare i kapitel 4.2.1. - Ladder Diagram (LD), grafiskt språk, heter kontakt-diagram på svenska. Ett av de mest använda språken, beskrivs närmare i kapitel 4.2.2. - Function Block Diagram (FBD), grafiskt språk, har bl.a. logiska grindar och vippor som grundelement. - Sequential Function Chart (SFC), grafiskt språk baserat på Grafcet. I praktiken så har varje leverantör sina egna programmeringsverktyg, som mer eller mindre påminner om IEC-standarden. Förutom de ovan nämnda så används åtminstone FUP, vanlig Grafcet samt även C för programmering av PLC:n. 4.2.1 Låg-nivå programmeringsspråk (IL) PLC:n kan programmeras med speciella assemblerliknande programmeringsspråk. Uppbyggnaden av ett IL-program illustreras med ett exempel: Märke Operator Operand Kommentar LD Count (* Ladda variabeln Count i dataregistret *) loop SUB 1 (* Minska värdet i dataregistret med ett *) NE 0 (* Kolla om dataregistret är 0 *) JMP loop (* Hoppa till märket loop om föregående jämförelse är sann *) Det finns två stycken så kallade modifierare som kan användas i samband av de flesta av operatorerna, t.ex. så betyder LDN att man tar logisk icke på operanden innan den lagras i dataregistret. Parenteser är den andra typen av modifierare, vilket fungerar som väntat som modifierare av beräkningsprioritet.
4.2. PROGRAMMERING AV EN PLC 65 Tabell 4.1: IL-operatorerna enligt IEC Operator Modifierare Operandtyp Beskrivning LD N Alla Ladda operand i dataregister ST N Alla Spara innehållet i dataregistret i operand S BOOL Tilldela operand värdet 1 (sant) om dataregistret sant R BOOL Tilldela operand värdet 0 (falskt) om dataregistret sant AND N och () BOOL Logisk OCH OR N och () BOOL Logisk ELLER XOR N och () BOOL Logisk XOR ADD () Alla Addition SUB () Alla Subtraktion MUL () Alla Multiplikation DIV () Alla Division GT () Alla Större än GE () Alla Större än eller lika med EQ () Alla Lika med NE () Alla Icke lika med LE () Alla Mindre än eller lika med LT () Alla Mindre än JMP N Märke Konditionellt hopp (beroende på senaste jämförelsen) CAL N Namn Konditionellt anrop av funktionsblock RET N Konditionell retur från funktionsblock LD X (* Ladda variabeln X i dataregistret *) GT( A (* Utför GT efter att uttrycket i parentes beräknats *) ADD B (* Beräkna A+B *) ) (* Nu först testas om X > (A+B) *) IL påminner alltså mycket om assembler; man skall komma ihåg att man hela tiden jobbar med register och att beräkningen sker i den ordning som instruktionerna kommer (om man inte sätter parentes, som i exemplet ovan. Instruktionerna LD A ADD B (* A+B *) MUL C (* (A+B)C *) beräknar (A+B)C och inte A+(BC) som i ett högnivå programmeringsspråk. Instruktionerna (operatorerna) som ges av IEC-standarden ses i Tabell 4.1. Uppgift 4.1 Skriv ett PLC-program för den logiska funktionen för tillstånd 1 från alarmuppgiften, dvs Ekv. 3.3, 3.4 och 3.6 S 1 = u 1 u 2 x 3 + u 1 u 2 R 1 = u 1 x 1 = (x 1 + S 1 ) R 1
66 KAPITEL 4. PROGRAMMERBAR LOGIK 4.2.2 Kontaktdiagram (LD) Kontaktdiagram (e. ladder diagram, ty. kontakt-plan) är en metod för att beskriva och logiska funktioner, som har varit redan länge standardiserad. Metoden härstammar från relä-tekniken, men utnyttjas idag allmänt för att programmering av PLC:n. I ett kontaktdiagram har man två vertikala ledningar, av vilka den vänstra är förbunden med en spänningskälla, och den högra är jordad (Fig. 4.4). Ledningarna är horisontalt förbundna med strömstigar. 1 0 Figur 4.4: Kontaktdiagram Varje horisontal koppling representerar en variabel vars logiska värde är 1 om ström går genom kopplingen, och 0 annars. Funktionerna införs symboliskt; en kontakt som är sluten om u = 1, och annars öppen, anges med symbolen u Denna variabel u som avgör huruvida kopplingen är sluten eller ej kan vara en insignal eller en intern variabel (ett tillstånd). Typiskt så ges denna variabel som parameter till kontakten; man matar in en adress direkt eller en symbol (t.ex. u) som associerats med adressen. Bra minnesregel vid behandling av kontaktdiagram är att normalläge är 0, en 1 kräver en insats. T.ex. ovanstående kontakt är öppen i normalläge, medan u = 1 så sluter den. Symbolen för en kontakt som är sluten i normalläge, dvs då u = 0 ser ut enligt följande u Slutresultatet av varje horisontell rad kan lagras i en variabel, vilket betecknas enligt följande y ( ) Med hjälp av dessa tre grundsymboler kan vi nu konstruera de vanligaste logiska funktionerna med hjälp av kontaktdiagram, se Fig. 4.5.
4.2. PROGRAMMERING AV EN PLC 67 z = x 1 x 2 z = x 1 + x 2 z = x z = x 1 + x 2 z = x 1 x 2 z = x 1 x 2 z = x 1 + x 2 Figur 4.5: Vanliga logiska fuktioner som kontaktdiagram. Observera de avvikande beteckningarna (x=insignal, z=utsignal). Vi ser att logisk OCH fås med en seriekoppling och logisk ELLER med en parallellkoppling. RS-vippor konstrueras i IEC-standarden (och i labben) med hjälp av speciella S och R resultatvariabler. x (S) x (R) Då det logiska uttrycket till vänster är sant så betyder det att den logiska variabeln associerad med RS-vippan (x i det här fallet) kommer att sättas till 1 respektive 0. Det finns många olika beteckningar och funktionssätt för timer-funktionen, och det finns ingen egentlig standardbeteckning. Timer-funktioner har oftast flera utsignaler, förutom den egentligen fördröjda signalen även interna variabler som t.ex. själva klockräknaren.
68 KAPITEL 4. PROGRAMMERBAR LOGIK Uppgift 4.2 Konstruera ett kontaktdiagram för de boolska funktionerna y 1, y 2, V A, V B och V R i Ex. 3.2. H A H B L A A B L B V A y 1 V B L R y 2 V R