PLC2A:1 Variabler och datatyper Allmänt om funktioner och funktionsblock Programmering av funktioner Programmering av funktionsblock
PLC2A:2 Variabler i GX IEC Developer Global and Local Variables Variables contain the values of inputs, outputs or internal memory locations in the PLC. There are two types of variables: Global Variables Local Variables Global Variables Global variables are defined for the entire project. They are accessible from any POU body, action or transition, and they make it possible to exchange data between all the sub-programs that go to make up the project. Local Variables Local variables (VAR) are only accessible within the one specific program organisation unit (POU) in which they are declared. Thus, they cannot be used for exchanging data between POUs.
PLC2A:3 Globala och lokala variabler OBS adressen är inte definierad i den lokala variabellistan.
PLC2A:4 Variable declarations Each variable declaration has the following elements: Class, Identifier, Data type, Initial value (automatically), Comment (optional), Remark (optional).
Varje variabel har en Class och en Type. Type visar vilken typ av data som variabeln innehåller. Class indikerar vad man göra med variabeln. PLC2A:5 Observera det finns tre olika typer av POU:er PRG = PROGRAM FUN = FUNCTION FB = FUNCTION BLOCK
PLC2A:6 Variabelnamn och adresser Identifiers and Absolute Addresses Each variable is given a symbolic address, i.e. a name. This is referred to as the identifier; it consists of a string of alphanumeric characters and underline characters. The identifier must always begin with a letter or an underline character. Spaces and mathematical operatorcharacters (e.g. +, -, *) are not permitted. Examples of identifiers: FAULT ZEROSIG LIM_SW_5 When global variables are declared absolute addresses can be assigned that reference the memory location of the variable in the CPU or a physical input or output. When local variables are declared in the header of the POU they are automatically assigned a suitable memory location in the CPU.
PLC2A:7 When you define global variables you must specify the hardware addresses for each individual variable. The address declarations are shown in the table below. X Bit device W Word device D Double word device Andra typer av device i FX-serien: labels (P), Step flags (S)
PLC2A:8 Absoluta adresser för: räknare, Counter tidskretsar,timer Se kap 6.10 Ref manual Exempel räknaren C20: CC20 = Räknarens identitet, räknaren som ska används, 1 Bit CS20 = Status på utgången, 1 Bit CN20 = Aktuellt räknarvärde, 1 Word eller Double Word? Motsvarande beteckningar för tidskretsarna. Exempel kommer på senare föreläsning.
PLC2A:9 Från menykommadot: Extras/Options
PLC2A:10 Datatyperna INT och DINT använder 2-komplement-representation
PLC2A:11 Allmänt om funktioner och funktionsblock Genom att använda funktioner och funktionsblock förenklas programmeringen och det blir enklare att få ett strukturerat och lättförståeligt PLC-program. Skriv egna funktioner (FUN) och egna funktionsblock (FB) för att strukturera programmet. Använd editor IL, LD, ST eller FBD för att skriva programkoden. Använd färdiga funktioner och funktionsblock för Timer, Counter etc. Funktioner och Funktionsblock är enklast att använda med någon av de grafiska editorerna LD eller FBD.
PLC2A:12 Exempel 1: Funktion för att styra ljuset i ett rum med hjälp av 3 strömbrytare. Se PLC 1B:22. Lösning med LD: Gränssnitt med PLC:n FX1S
PLC2A:13 Skapa en ny POU som består av en funktion Definition av POU:ns namn. POU:n är en FUN (Function). Funktionen ska beskrivas med editorn Function Block Diagram (FBD). Funktionen ska ge ett resultat av datatypen BOOL.
PLC2A:14 Skriv funktionen Definiera insignalerna lokalt Definition av Insignalen A Den lokala headern med def för A,B och C
PLC2A:15 Funktionen testas med en program POU Under Function Block finns den nya symbolen för three_sw Signalerna ansluts till laborationsplattan
PLC2A:16 Task my_main anropar POU:n test_three_sw POU test_three_sw anropar POU:n three_sw POU three_sw Programmet kräver 33 programsteg (program steps)
Melsec-koden i PLC:n (28 programsteg ~33?) PLC2A:17 M8000 Run-indikering CALL P_30 Anrop av subrutinen P_30 Skriv ett FBD-diagram för subrutinen!
PLC2A:18 Exempel 2: I en luftsluss finns en begränsad mängd syre som ska räcka till de personerna som vistas i luftslussen. Skriv en funktion OXYGEN som ger en signal när syret är slut! Funktionen ska ha följande ingångar: en_in BOOL Enableingång antal_inne INT Personer inne i luftslussen antal_sec INT Antal sekunder med personer i luftslussen maxvarde INT Maxvärde för produkten av antal_inne och antal_sec Funktionen ska ge en utsignal av typen BOOL när syret är slut. Tips:
PLC2A:19 Exempel 3: Skriv en funktion ROOM_FULL som kontrollerar att det inte finns för många personer i maskinprogrammets källarkrypin på högskolan. Funktionen ska ha följande ingångar: RST BOOL Nollställer antalpersonerräknaren CNT_D BOOL Minskar antalpersonerräknaren med 1 CNT_U BOOL Ökar antalpersonerräknaren med 1 MAX_NR INT Max tillåtet antal personer i lokalen Funktionen ska ge en utsignal av typen BOOL när lokalen är full. Lokalen får inte innehålla negativa studenter. Funktionens Header med Insignaler VAR_INPUT Interna variabler VAR Program som använder funktionen
PLC2A:20 Funktionen ROOM_FULL, förslag till lösning. Hela programmet kräver 53 programsteg.
PLC2A:21 För ett FUNKTIONSBLOCK (FB) gäller: Godtyckligt antal ingångar Godtyckligt antal utgångar Funktionsblocket måste instansieras med ett eget namn Funktionsblock kan innehålla andra funktionsblock och funktioner. För ett FUNKTIONER (FUN) gäller: Godtyckligt antal ingångar 1 utgång med samma namn som funktionen Funktionsblock kan innehålla andra funktioner.
PLC2A:22 Exemplet 3, kontroll av antal personer i en lokal, kan även lösas med ett funktionsblock. I lösningen kan man i så fall använda andra funktionsblock. Se nedan. Exempel 4: Skriv ett funktionsblock room_full_fb som kontrollerar att det inte finns för många personer i maskinprogrammets källarkrypin på högskolan. Funktionsblocket ska följa IEC-standarden. Funktionsblocket ska ha följande ingångar: RST BOOL Nollställer antalpersonerräknaren CNT_D BOOL Minskar antalpersonerräknaren med 1 CNT_U BOOL Ökar antalpersonerräknaren med 1 MAX_NR INT Max tillåtet antal personer i lokalen Funktionsblocket ska ha följande utgångar: ROOM_FULL BOOL Hög nivå när lokalen är full CNT_VALUE INT Antal personer i lokalen
I exemplet kan räknaren CTUD (FB) användas PLC2A:23 M7 ettställs när räknarvärdet (CV) är >=3. M27 ettställs när räknarvärdet <=0. Räknaren räknar uppåt vid positiv flank på X0 Räknaren räknar nedåt på positiv flank på X1. X4 nollställer räknarvärdet. X5 läser in PV som räknarvärde.
PLC2A:24 POU:n som använder funktionsblocket room_full_fb