En PLC skall programmeras för ett transportör-problem med en transportör (tåg) och tre stationer (A-C i bilden). Vid varje station finns en ljussensor och tåget styrs genom två signaler: KÖR och BYT_RIKTNING.
I normala förhållanden skall vagnen röra sig enbart mellan stationerna A och B och vid varje station skall den stå stilla för en bestämd tid (väntetid för tömning/fyllning). Vagnen skall besöka stationen C endast ifall en C-knapp insignal registreras, och efter ett besök vid C skall vagnen först återvända till A och därefter återgå till det vanliga arbetet mellan A och B. I normala förhållanden skall vagnen inte kunna stanna mellan stationerna, endast vid stationerna, och den skall inte kunna passera stationerna A och C.
I normala förhållanden skall vagnen röra sig enbart mellan stationerna B och C och vid varje station skall den stå stilla för en bestämd tid (väntetid för tömning/fyllning). Vagnen skall besöka stationen A endast ifall en A-knapp insignal registreras, och efter ett besök vid A skall vagnen först återvända till C och därefter återgå till det vanliga arbetet mellan B och C. I normala förhållanden skall vagnen inte kunna stanna mellan stationerna, endast vid stationerna, och den skall inte kunna passera stationerna A och C.
Laboratoriet för reglerteknik (RT) har en SLC 5/03 OS 302 programmerbar logik-enhet av märket Allen-Bradley. Den har 12 kb programminne, en digital inputmodul med 16 ingångar, en digital outputmodul med 16 utgångar, en analog inputmodul med 8 ingångar och en analog outputmodul med 4 utgångar. I denna tillämpning behövs endast de digitala modulerna.
Minnet i SLC 5/03 har delats in i ett antal minnesregister för olika ändamål t.ex T: (timer), C: (counter), B: (binary data), I: (input), O: (output). En digital input-enhet i PLC:n fungerar så att den lagrar ett binärt tal (0/1) i minnet beroende på om en input-kanal är utsatt för en bestämd spänning (10 V). Endast timer-funktionerna har tillgång till minnesregistret T:.
I detta arrangemang finns det 12 stycken insignaler till PLC:n och 11 stycken utsignaler till tåget, växlarna och lamporna i knapparna. Alla insignaler behövs inte i lösningen och alla utsignaler är inte signifikanta. SLC 5/03 har 7 stycken modulportar, av vilka port 0 alltid är reserverad åt prosessormodulen. Outputmodulen är i detta fall satt i modulport 1 och inputmodulen i port 2.
Transormatorn som styr tåget är kopplad till PLC via två releär, en för att köra / stanna och en för att ge riktnings bytes signal till tåget. Tåget byter riktning genom att ge en åtminstone 60 ms lång signal av O:1/2, och under den tiden kommer tåget även att stanna. Om båda reläer är på, kommer byt riktning att vara signalen som går fram. Mera om hur systemet är kopplat.
Följande minnesadresser kan användas för in- och utsignalerna:
Utsignal | Address | Värden |
---|---|---|
Kör | Adress: O:1/1 | 0 = stanna, 1 = kör |
Byt riktning | Adress: O:1/2 | 1 = ge riktnings bytes signal (måste vara åtminstone 60 ms) |
Ljus i knapp A | Adress: O:1/4 | 0 = av, 1 = på |
Ljus i knapp B | Adress: O:1/5 | 0 = av, 1 = på |
Ljus i knapp C | Adress: O:1/6 | 0 = av, 1 = på |
Ljus i knapp D | Adress: O:1/7 | 0 = av, 1 = på |
Ljus i knapp E | Adress: O:1/8 | 0 = av, 1 = på |
Växel 1 | Adress: O:1/11 | 0 = Rakt, 1 = Åt sidan |
Växel 2 | Adress: O:1/12 | 0 = Rakt, 1 = Åt sidan |
Växel 3 | Adress: O:1/13 | 0 = Rakt, 1 = Åt sidan |
Växel 4 | Adress: O:1/14 | 0 = Rakt, 1 = Åt sidan |
Insignal | Address |
---|---|
Ljussensor 1 | I:2/1 |
Ljussensor 2 | I:2/2 |
Ljussensor 3 | I:2/3 |
Ljussensor 4 | I:2/4 |
Ljussensor 5 | I:2/5 |
Ljussensor 6 | I:2/6 |
Ljussensor 7 | I:2/7 |
Knapp A | I:2/11 |
Knapp B | I:2/12 |
Knapp C | I:2/13 |
Knapp D | I:2/14 |
Knapp E | I:2/15 |
Den ovan beskrivna PLC:n programmeras m.h.a. en variation av kontaktdiagram-representationen, nämligen ladderdiagram-språket "RS Logix500 Industrial programming Software for Win95/NT for Allen-Bradley SLC 500 Family of Small logic controllers". Ett ladder-diagram är ett slags grafiskt programmeringsspråk med ett bibliotek av färdiga logisk-aritmetiska-rutiner, matematiska funktioner, samt input- och outputinstruktioner. De logiska villkoren med vilka programmets funktionssätt beskrivs matas in i form av ett antal förgrenade vågräta linjer (eng. rung) med de behövliga instruktionerna.
I det följande genomgås endast de viktigaste instruktionerna som kan användas vid sekvensstyrningsproblemets lösning.
Examine if Closed (XIC) XIC-instruktionen undersöker om biten i argument-adressen är 1. XIC sätter utgången till 1 om villkoret är sant, och till 0 om villkoret är falskt. | ![]() |
Examine if Open (XIO) XIO-instruktionen undersöker om biten i argument-adressen är 0. XIO sätter utgången till 1 om villkoret är sant, och till 0 om villkoret är falskt. | ![]() |
Less Than (LES) LES-instruktionen jämför de två aritmetiska värdena (A och B) i adresserna vilka ges som dess input-argument. LES sätter utgången till 1 om villkoret A < B är sant, och till 0 om villkoret är falskt. | ![]() |
Output Energize (OTE) OTE är en output-instruktion som sätter biten i argument adressen till 1 om input-värdet till modulen är 1. OTE sätter argument adressen till 0 om input-värdet till modulen är 0. | ![]() |
Output Latch (OTL) OTL-instruktionen motsvarar kontaktdiagrammets SET -funktion. OTL sätter biten i argument adressen till 1 om input-värdet till instruktionsmodulen är 1, men i motsats till OTE, sätter OTL inte argument adressen till 0 om input-värdet till modulen blir 0. | ![]() |
Output Unlatch (OTU) OTL-instruktionen motsvarar kontaktdiagrammets RESET-funktion. OTU sätter argument adressen till 0 om input-värdet till modulen är 1. | ![]() |
Timer On-delay(TON) TON-instruktionen sätter DONE-utgången till 1 efter att den har väntat en bestämd tid (PRE). Timern startar räknandet då input-värdet till modulen övergår från 0 till 1 och räknandet upphör om räknarens accumulerade värde (ACC) är lika med den totala väntetiden (PRE) eller om input-värdet till TON-modulen övergår till 0. Timer-Timing -biten (TT) är 1 alltid när TON räknar och inte har räknat upp till den totala väntetiden. Timer-Enable-biten (EN) är 1 alltid när TON räknar (oberoende om räknaren har räknat upp till totala väntetiden). Alla timer-funktionerna använder speciella register i minnet (t.ex. T4:0) för att lagra argument och räknarens mellanresultat. | ![]() |
One Shot-rising (OSR) Instruktionerna efter OSR-instruktionen exekveras en gång när instruktionerna före OSR:n går från false till true. Kräver en unik minnesbit som argument. | ![]() |