3 PLC Programming
EPFL, Spring 2017
3 PLC Programming The long march to IEC 61131 PLC industry needs - - PowerPoint PPT Presentation
EPFL, Spring 2017 3 PLC Programming The long march to IEC 61131 PLC industry needs aggreement on Data types (operations may only be executed on appropriate types) Programming languages Software structure (program organization units
EPFL, Spring 2017
Industrial Automation | 2017 2
Source: Dr. J. Christensen
77 78 79 81 80 93 94 95 70 82 83 84 85 87 86 88 89 90 91 92
NEMA Programmable Controllers Committee formed (USA) GRAFCET (France) IEC 848, Function Charts DIN 40719, Function Charts (Germany) NEMA ICS-3-304, Programmable Controllers (USA) IEC SC65A/WG6 formed DIN 19 239, Programmable Controller (Germany) MIL-STD-1815 Ada (USA) IEC SC65A(Sec)67
Type 3 report recommendation
96
IEC 65A(Sec)38, Programmable Controllers IEC 1131-3 IEC SC65A(Sec)49, PC Languages IEC 64A(Sec)90
IEC 61131-3 name change
it took 20 years to make that standard…
PLC industry needs aggreement on
Industrial Automation | 2017 3
Extend procedural languages to express time
(“introduce programming constructs to influence scheduling and control flow”) Languages developed for cyclic execution and real-time ("application-oriented languages") Ladder Diagrams Function block diagrams Instruction lists GRAFCET Sequential flow charts etc...
Now standardized as IEC 61131 ADA Real-Time Java MARS (TU Wien) Forth “C” with real-time features etc… could not establish themselves
Industrial Automation | 2017 4
Analog World Binary World
A B C
continuous processes
P2
P1
I1
regulation, controllers discrete processes combinatorial sequential Relay control, pneumatic sequencer Pneumatic and electromechanical controllers
PLC time constant of the control system must be at least one order of magnitude smaller than smallest time constant of plant. variables with non-overlapping values, transition from one state to another is abrupt, caused by external events.
Industrial Automation | 2017 5
Structured Text (ST)
VAR CONSTANT X : REAL := 53.8 ; Z : REAL; END_VAR VAR aFB, bFB : FB_type; END_VAR bFB(A:=1, B:=‘OK’); Z := X - INT_TO_REAL (bFB.OUT1); IF Z>57.0 THEN aFB(A:=0, B:=“ERR”); END_IF
Ladder Diagram (LD)
OUT PUMP http://www.isagraf.com
Function Block Diagram (FBD)
PUMP AUTO MAN_ON ACT DO V
Instruction List (IL)
A: LD %IX1 (* PUSH BUTTON *) ANDN %MX5 (* NOT INHIBITED *) ST %QX2 (* FAN ON *)
Sequential Flow Chart (SFC)
START STEP T1 T2 D1_READY D2_READY STEP A ACTION D1 N D ACTION D2 STEP B D3_READY D4_READY ACTION D3 N D ACTION D4 T3 CALC IN1 IN2 OUT >=1
Graphical languages Textual languages
AUTO MAN_ON ACT CALC IN1 IN2 OUT
Industrial Automation | 2017 6
IEC 61131-3 are the most important automation languages in industry. 80% of all PLCs support it, all new developments are based on it. Depending on the country, some languages are more popular than others. IEC 61499 extends IEC 61131 with an event-driven model, has not established itself yet.
More information: http://www.plcopen.org/pages/tc1_standards/downloads/plcopen_iec61131- 3_feb2014.pptx http://www.plcopen.org/pages/pc2_training/downloads/index.htm
Industrial Automation | 2017 7
The inputs and outputs of the PLC must be connected to (typed) variables
OUT_1
The I/O blocks are configured to be attached to the corresponding I/O groups.
IN_1
Industrial Automation | 2017 8
All program variables must be declared with name and type, initial value and volatility. A variable may be connected to an input or an output, giving it an I/O address. Several properties can be set: default value, fall-back value, store at power fail,…
Industrial Automation | 2017 9
& A B C
Trigger
Tempo &
Running Reset
S R
Spin
Example 1: Example 2:
external inputs external outputs
Q
Industrial Automation | 2017 10
"continuously" executing block, independent, no side effects set point measurement command parameters The block is defined by its:
Signals are typed connections that carry a pseudo-continuous data flow (set point) (set point) set point PID input signals
Industrial Automation | 2017 11
Each signal is connected to exactly one source. This source can be the output of a function block or a plant signal. The type of the output pin, the type of the input pin and the signal type must be identical.
Retroactions are an exception to this rule, where the signal direction is identified by an arrow (forbidden in some editors, use global variables instead).
a b y x z c
Industrial Automation | 2017 12
1) “Functions”
Examples: and gate, adder, multiplier, selector,.... 2) “Elementary Function Blocks” (EFB)
Examples: counter, filter, integrator,..... 3) “Programs” (Compound blocks)
Examples: PID controller, overcurrent protection, motor sequence (a library of compound blocks may be found in IEC 61804-1)
Industrial Automation | 2017 13
The programmer chooses the blocks in a block library, similarly to the hardware engineer who chooses integrated circuits in a catalogue. The library describes the pinning of each block, its semantics and the execution time. The programmer may extend the library by defining function block macros composed of library elements. If some blocks are used often, they will be programmed in an external language (e.g. “C”, micro-code) following strict rules.
Industrial Automation | 2017 14
Logical operations(AND, OR, …) Flip-flop Selector m-out-of-n Multiplexer m-to-n Timer Counter Memory Sequencing Basic blocks Display Manual input, touch-screen Safety blocks (interlocking) Logging Compound blocks Alarm signaling Basic blocks Summator / Subtractor Multiplier / Divider Integrator / Differentiator Filter Min, Max Regulation Functions P, PI, PID, PDT2 controller Fixed set-point Ratio, multi-component regulation 2-point regulation 3-point regulation Output value limitation Ramp generator Adaptive regulation Drive Control
Industrial Automation | 2017 15
MoveAbsolute AXIS_REF Axis Axis AXIS_REF BOOL Execute Done BOOL REAL Position BOOL REAL Velocity CommandAborted WORD REAL Acceleration BOOL REAL Deceleration REAL Jerk MC_Direction Direction Error ErrorID
standardized blocks are defined in libraries, e.g. motion control or robotics
Industrial Automation | 2017 16
Time Diagram:
0 T T x y y x S R x1 1 1 x2 1 1 y previous state 1 1
Truth Table: Mathematical Formula:
x1 x2
Textual Description:
y x
t i d p
xd K dt dx K x K
Calculates the root mean square of the input with a filtering constant defined in parameter „FilterDelay“
Industrial Automation | 2017 17
Industrial Automation | 2017 18
F1 A B X01 F2 X01 X F3 B C X02 F4 X X02 Y Machine Code: function input1 input2
A
F1 F2
B
F4
Y X01 X02
F3
C X
Segment or POU (program organization unit) The function blocks are translated to machine language (intermediate code, IL), that is either interpreted or compiled to assembly language Blocks are executed in sequence, normally from upper left to lower right The sequence is repeated every t ms.
Industrial Automation | 2017 19
execute
individual period
I O X I O X I O X read inputs write
Run-time:
time
Executed cyclically: 1. all inputs are read from memory or plant (possibly cached) 2. segment is executed 3. results are written into memory or to plant (possibly to cache)
Industrial Automation | 2017 20
CU – input (rising edges count up) R – reset counter (CV:=0) PV – preset value Q – 1 if CV >= PV CV – current value dominant reset Q:=!R1&(Q|S) rising edge detector dominant set Q:=S1|(Q&!R) ADD SUB MUL DIV adder subtractor multiplier divider INT PV Integrator In Reset (if reset) Out := PV, else Out:= Δt *In + Out
More details http://calc1.kss.ia.polsl.pl/content/dydaktyka/PC/PLC_IEC61131-3.pdf
Boolean Functions
Select one of N inputs depending
Binary selection
Arithmetic Functions Flip-flop Trigger Up counter Selector
Industrial Automation | 2017 21 CTU CU RESET PV Q CV
1.
DIV INT PV In Reset = 0
Out
In1
(2) (initially 0)
2.
(1024)
In2
3. t1 t2 t3 t4 t5 t6 t7 t8 CU Reset = 0, PV = 3, CV = #up Q = (CV >= PV) ? Remember: INT If (Reset) : Out := PV, Else: Out := Δt *In + Out
4. S R Q Flipflop: dominant set or reset?
S RS Q R1
dominant reset Q:=!R1&(Q|S)
S1 SR Q R
dominant set Q:=S1|(Q&!R)
http://tinyurl.com/IAFunctionBlock
ADD
Out In
(10) (initially 2)
What are the values of Out? What happens if Reset = 1 or if Out is initially 1024? What are the values
Industrial Automation | 2017 22
3. CV = 1, 1, 2, 2, 3, 3, 4, 4 Q = 0, 0, 0, 0, 1, 1, 1, 1 4. S R Q
ftp://advantechdownloads.com/Training/KW%20training/ S1 SR Q R
dominant set Q:=S1|(Q&!R)
1. 2, 12, 22, 32, 42 2. If Out=0 initially: 0, 0, 0, 0, 0 If Reset=1 initially: 1024, 1024, 1024, 1024 If Out =1024 initially: 1024, 1536, 2304, 3456 http://tinyurl.com/IAFunctionBlock
Industrial Automation | 2017 23
75
5s 12s
Industrial Automation | 2017 24
+ 8.3
75.0
Out
Industrial Automation | 2017 25
A function block describes a data flow interface. Its body can be implemented differently: The body is implemented in an external language (micro-code, assembler, IEC 61131 ST): Elementary block The body is realized as a function block program Each input (output) pin of the interface is implemented as exactly one input (output) of the function block. All signals must appear at the interface to guarantee freedom from side effects. . Compound block
procedure xy (a,b:BOOLEAN; VAR b,c: BOOLEAN); begin ...... .... end xy;
Industrial Automation | 2017 26
An application program (task) is decomposed into segments ("Programs") for easier reading, each segment being represented on one (A4) printed page.
.
.
Segment A Segment B X1 M2 M1 Y1 Y2 M2 X2 M1 X3
Industrial Automation | 2017 27
(Strukturierte Textsprache, langage littéral structuré)
Structured Text is an imperative language similar to Pascal (If, While, etc..) The variables defined in ST can be used in other languages ST is used for complex data manipulation and to write blocks Caution: writing programs in structured text can breach real-time rules !
Industrial Automation | 2017 28
IF tank.temp > 200 THEN pump.fast :=1; pump.slow :=0; pump.off :=0; ELSIF tank.temp > 100 THEN pump.fast :=0; pump.slow :=1; pump.off :=0; ELSE pump.fast :=0; pump.slow :=0; pump.off :=1; END_IF;
pos := 0; WHILE((pos < 100) & s_arr[pos].value <> target)) DO pos := pos + 2; String_tag.DATA[pos] := SINT_array[pos]; END_WHILE;
[http://literature.rockwellautomation.com/idc/groups/literature/documents/pm/1756-pm007_-en-p.pdf]
Predefined functions, e.g.: SIZE(SINT_array, 0, SINT_array_size); Count the number of elements in SINT_array (array that contains inputs) and store result in SINT_array_size (DINT tag). IF( Switch_0 AND Switch_1 ) THEN Start_Motor := 1; Start_Count := Start_Count + 1; END_IF;
Industrial Automation | 2017 29
Move ASCII characters from a SINT array into a string tag. (In a SINT array, each element holds one character.) Stop when you reach the carriage return.
element_num := 0; SIZE(SINT_array, 0, SINT_array_size); WHILE SINT_array[element_num] <> 13 DO String_tag.DATA[element_num] := SINT_array[element_num]; element_num := element_num + 1; String_tag.LEN := element_num; IF element_num = SINT_array_size then exit; END_IF; END_WHILE;
[http://literature.rockwellautomation.com/idc/groups/literature/documents/pm/1756-pm007_-en-p.pdf]
Explanations: 1. Initialize element_num to 0. 2. Count number of elements in SINT_array (ASCII characters), store in SINT_array_size. 3. If the character at SINT_array[element_num] = 13 (carriage return), then stop. 4. Set String_tag[element_num] = the character at SINT_array[element_num]. 5. Add 1 to element_num. This lets the controller check the next character in SINT_array. 6. Set length member element_num (records number of characters in String_tag so far.) 7. If element_num = SINT_array_size, then stop. (if at end of array and no carriage return.) 8. Go to 3.
Industrial Automation | 2017 30
A user-defined data type (structure) stores information about an item in an Inventory array:
An array of the above structure contains an element for each different item in your inventory. You want to search the array for a specific product (by its barcode) and determine the quantity in stock. Pseudocode:
[http://literature.rockwellautomation.com/idc/groups/literature/documents/pm/1756-pm007_-en-p.pdf]
Industrial Automation | 2017 31
A user-defined data type (structure) stores information about an item in an Inventory array:
An array of the above structure contains an element for each different item in your inventory. You want to search the array for a specific product (by its barcode) and determine the quantity in stock. Pseudocode:
[http://literature.rockwellautomation.com/idc/groups/literature/documents/pm/1756-pm007_-en-p.pdf]
Solution: SIZE(Inventory,0,Inventory_Items); FOR position:=0 to Inventory_Items - 1 DO IF Barcode = Inventory[position].ID THEN Quantity := Inventory[position].Qty; EXIT; END_IF; END_FOR;
Industrial Automation | 2017 32
(Ablaufdiagramme, diagrammes de flux en séquence )
communication protocols), mathematical foundation lies in Petri Nets.
START STEP ACTION D1 N D1_READY D ACTION D2 D2_READY T1 T2 STEP B STEP A
Industrial Automation | 2017 33
Ec = ((varX & varY) | varZ)
token
Sa Sb "1" Ea Sc Eb
transitions states
event condition ("1" = always true) example transition condition S0
Rule: there is always a transition between two states, there is always a state between two transitions
Industrial Automation | 2017 34
State which come into existence with a token are called initial states. All initial states receive exactly one token, the other states receive none. Initialization takes place explicitly at start-up. In some systems, initialization may be triggered in a user program (initialization pin in a function block).
Industrial Automation | 2017 35
Sa Sb "1" Se
token switch : token crosses the first active transition (at random if both Ea and Eb are true) Note: transitions are after the switch token forking : when the transition Ee is true, the token is replicated to all connected states Note: transition is before the fork
Ed
token join when all connected states have tokens and transition Eg is true, one single token is forwarded. Note: transition is after the join
Ee Sc Sd Sf Sg Eg
E0 Ea Eb Ec
Ef
Industrial Automation | 2017 36
P1 State1_P1: do at enter N State1_N: do while P0 State1_P0: do at leaving State1 P1 (pulse raise) action is executed once when the state is entered P0 (pulse fall) action is executed once when the state is left N (non-stored) action is executed continuously while the token is in the state P1 and P0 actions could be replaced by additional states. The actions are described by a code block written e.g. in Structured Text.
Industrial Automation | 2017 37
rather than define a P0 action “ reset timer….”, there is an implicit variable defined as <state name>.t that express the time spent in that state.
Sf S.t > t#5s
S
Industrial Automation | 2017 38
Speed = 5 cm/s from I1 to I0 and from I2 to I3, faster otherwise. Initially: move vehicle at reduced speed until it touches I0 and open the trap for 5s (empty the vehicle). 1 - Let the vehicle move from I0 to I3 2 - Stop the vehicle when it reaches I3. 3 - Open the tank during 5s. 4 - Go back to I0 5 - Open the trap and wait 5s. repeat above steps indefinitely
I2 I3 Inputs generate “1” as long as the tag of the vehicle (1cm) is
Register = {0: closed; 1: open} I0 I1 trap +speed Speed = {+20: +1 m/s; +1: +5 cm/s; 0: 0m/s} negative values: opposite direction Variables Input: I0, I1, I2, I3 (boolean); Output: Trap = {0: closed; 1: open} Register = {0: closed; 1: open}
Industrial Automation | 2017 39
Industrial Automation | 2017 41
Every flow chart without a token generator may be redrawn as a structured flow chart (by possibly duplicating program parts) A B C
a b d c
Not structured A B C
a b a b
B' A'
d c d
structured
Industrial Automation | 2017 42
Function Blocks: Continuous (time) control Sequential Flow Charts: Discrete (time) Control
Industrial Automation | 2017 43
A function block may be implemented in different ways:
procedure xy(...); begin ... end xy;
extern (ST/IL) function blocks flow chart Function blocks and flow chart communicate over binary signals.
Industrial Automation | 2017 44
A task can sometimes be written indifferently as function blocs or as flow chart. The application may decide which representation is more appropriate:
c d "1" b a a b c d
Flow Chart Function Block
NOT S R
Industrial Automation | 2017 45
In this example, a flow chart seems to be more appropriate:
A B C "1" a b c
S R ≥ & S R & S R & init a b c A B C
Flow Chart Function Blocks
Industrial Automation | 2017 46
L1 T V1 V2
while stirring. heat mixture during 50 minutes while stirring empty the reactor while the drying bed is moving repeat MS V3 MD temperature (sensor) H1 upper lower V4 heater (actor)
Industrial Automation | 2017 47
Ladder Diagrams is the oldest programming language for PLC
(Kontaktplansprache, langage à contacts)
Rung 0 Rung 1 Rung 2 Input instructions (conditions) Output (actions)
Industrial Automation | 2017 48
The contact plan or "ladder diagram" language allows an easy transition from the traditional relay logic diagrams to the programming of binary functions. It is well suited to express combinational logic It is not suited for process control programming (there are no analog elements). The main Ladder Diagrams symbols represent the elements: make contact break contact relay coil contact travail contact repos bobine Arbeitskontakt Ruhekontakt Spule
Industrial Automation | 2017 49
01 02 50 01 02 03 50 03
relay coil (bobine) break contact (contact repos) make contact (contact travail)
corresponding ladder diagram
electrical circuit 50 05 44 rung "coil" 50 is used to move
Industrial Automation | 2017 50
Binary combinations are expressed by series and parallel relay contact: + 01 02 50 Coil 50 is active (current flows) when 01 is active and 02 is not. 01 02 50 Series + 01 40 02 Coil 40 is active (current flows) when 01 is active or 02 is not. Parallel Ladder Diagrams representation “logic" equivalent 01 02 40
Industrial Automation | 2017 51
The Ladder Diagrams is more intuitive for complex binary expressions than literal languages 50 1 2 3 4 5 6 ! 1 & 2 & ( 3 & ! 4 | ! 5 & 6 ) = 50 Or N1 & 2 STR 3 & N4 STR N5 & 6 / STR & STR = 50 50 1 4 5 6 7 2 3 10 11 12 N0 & 1 STR 2 & 3 / STR STR 4 & 5 STR N 6 & 7 / STR & STR STR 10 & 11 / STR & 12 = 50 textual expression
Industrial Automation | 2017 52
literal expression:
!00 & 01 FUN 02 = 200 200 FUN 02 01 00
freedom of side effects and makes programs difficult to read.
Industrial Automation | 2017 53
Source: http://teacher.buet.ac.bd/zahurul/ME6401/ME6401_PLC.pdf Ladder Diagrams diagram for a batch process: filling a container with a liquid, mixing the liquid, and draining the container. The sequence of events is as follows:
O = output I = input Address of variable (module number, port number)
Industrial Automation | 2017 54
Source: http://teacher.buet.ac.bd/zahurul/ME6401/ME6401_PLC.pdf Consider a PLC with one input module and one output module. Two external switches (SW-0 & SW-1) are connected via terminal IN-0 and In-1 of input module. Two terminals of the output module (OUT-0 & OUT-1) drive two indicator lamps (Lamp-0 & Lamp-1). Which lamps are lit with the current switch positions? What happens if you change the position of Switch SW-1?
Industrial Automation | 2017 55
Source: http://teacher.buet.ac.bd/zahurul/ME6401/ME6401_PLC.pdf The top rung will light Lamp-0 if both SW-0 and SW-1 are closed. The bottom rung will light Lamp-1 if either SW-0 or OUT-0 are closed. In the current position LAMP-1 is lit. If we change the position of Switch SW-1 then LAMP 0 will be lit too.
Industrial Automation | 2017 56
Ladder Diagrams provides neither:
Not suited to make reusable modules. IEC 61131 does not prescribe the minimum requirements for a compiler / interpreter such as number of rungs per page nor does it specifies the minimum subset to be implemented. Therefore, it should not be used for large programs made by groups of people It is very limited when considering analog values (it has only counters) → used mostly in manufacturing, not in process control
Industrial Automation | 2017 57
Instruction lists is the machine language of PLC programming It has 21 instructions (see table) Three modifiers are defined: "N" negates the result "C" makes it conditional and "(" delays it. All operations relate to one result register (RR) or accumulator. (Instruktionsliste, liste d'instructions)
Industrial Automation | 2017 58
Accumulator-based pogramming:
and second parameter of operand.
Conditional executions or loops are supported by comparing operators like EQ, GT, LT, GE, LE, NE and jumps (JMP, JMPC, JMPCN, for the last two the accumulators value is checked on TRUE or FALSE) Syntax:
depending on the type of operation, one or more operands separated by commas
Industrial Automation | 2017 59
Labels LD TRUE (*load TRUE into the accumulator*) ANDN BOOL1 (*execute AND with the negated value of the BOOL1 variable*) JMPC mark (*if the result was TRUE, then jump to the label "mark"*) LDN BOOL2 (*load the negated value of BOOL2 into the accumulator*) ST RES (*store the content of the accumulator in RES*) JMP continue (*jump to label “continue"*) mark: LD BOOL2 (*save the value of *) ST RES (*BOOL2 in RES*) continue: … Brackets (without) (with) LD 2 LD 2 MUL 2 MUL(2 ADD 3 ADD 3 ) ST RES (*7 is stored in RES*) ST RES (* 10 is stored in RES*)
Industrial Automation | 2017 60
Instructions Lists is the most efficient way to write code, but only for specialists. Otherwise, IL should not be used, because this language:
End: ST speed3 (* result *)
Industrial Automation | 2017 61
What is the resulting speed3 for the following input?
End: ST speed3 (* result *)
a) Temp1 = 10 Temp2 = 15 Speed1 = 50 Speed2 = 100 b) Temp1 = 10 Temp2 = 5 Speed1 = 50 Speed2 = 100
Industrial Automation | 2017 62
http://tinyurl.com/IA61131 https://docs.google.com/forms/d/1lGkFXQrlwlnoKc8gUg-_ESAdtVy-RgIOLnFbkIOGNa8/viewform
Instruction List ? ? ? ? ? ? Function Block Diagram A C B ? C:= ? Structured Text A B C
Ladder Diagram ? ?
Industrial Automation | 2017 63
http://tinyurl.com/IA61131 https://docs.google.com/forms/d/1lGkFXQrlwlnoKc8gUg-_ESAdtVy-RgIOLnFbkIOGNa8/viewform
Instruction List LD A ANDN B ST C Function Block Diagram A C B AND C:= A AND NOT B Structured Text A B C
Ladder Diagram
Industrial Automation | 2017 64
A PLC programming environment (e.g. ABB ControlBuilder, Siemens Step 7, CoDeSys,...) allows the programmer to
Industrial Automation | 2017 65
http://www.openplcproject.com/plcopen-editor
Industrial Automation | 2017 66
workstation
download
symbols code
variable monitoring and forcing for debugging
firmware
network
configuration, editor, compiler, library
PLC
Industrial Automation | 2017 67
Not really: it does not support inheritance. Blocks are not recursive. But it supports interface definition (typed signals), instantiation, encapsulation, some form of polymorphism. Some programming environments offer “control modules” for better
Industrial Automation | 2017 68
Boolean variable (intentionally, for good reasons).
required (object-orientation)
Industrial Automation | 2017 69
Which are programming languages defined in IEC 61131 and for what are they used ? In a function block language, which are the two elements of programming ? How is a PLC program executed and why is it that way ? Draw a ladder diagram and the corresponding function block chart. Draw a sequential chart implementing a 2-bit counter. Program a saw tooth waveform generator with function blocks. How are inputs and outputs to the process treated in a function block language ? Write a program for a simple chewing-gum coin machine. Program a ramp generator for a ventilator speed control (soft start and stop in 5s)