Siemens s7-300 Programming
Siemens s7-300 Programming
Siemens s7-300 Programming
COURSE CONDUCTED BY: PROLIFIC SYSTEMS AND TECHNOLOGIES PVT. LTD. 202,SUCHITA INDUSTRIAL ESTATE, OPP. OSWAL PARK, POKHARAN RD. NO.2 THANE(W)-400601,INDIA TEL: (022) 5443307,5422887 FAX:(022) 5422887,5338399 E-MAIL :[email protected]
PAGE 1
CONTENTS:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
PAGE NO 3 7 9 12 13 14 16 23 27 29 38 45 48 49 51 54 56 58 71 73 75 86
STEP7 OVERVIEW COMPARISON OF CPU's AND MODULES AVAILABLE ADDRESSING OF MODULES LOAD MEMORY AND WORK MEMORY BLOCKS IN THE USER PROGRAM DATA TYPES STATEMENT LIST PROGRAMMING BIT LOGIC INSTRUCTIONS COMPARISON INSTRUCTIONS CONVERSION INSTRUCTIONS COUNTER INSTRUCTIONS DATA BLOCK AND LOGIC CONTROL INSTRUCTIONS LOAD AND TRANSFER INSTRUCTIONS FLOATING POINT MATH INSTRUCTIONS INTEGER MATH INSTRUCTIONS PROGRAM CONTROL INSTRUCTIONS SHIFT INSTRUCTIONS TIMER INSTRUCTIONS WORD LOGIC INSTRUCTIONS ACCUMULATOR INSTRUCTIONS PROGRAMMING EXAMPLES GLOSSARY
PAGE 2
SIMATIC S7
PLC
S7-400 S7-300 S7-200 SIMATIC S7-300 COMPONENTS
RANGE
HIGH END RANGE/MEDIUM RANGE MID AND LOW END PERFORMANCE RANGE MICRO PLC'S
S.No. 1. 2. Rail
COMPONENT
FUNCTION Accomodates the S7-300 modules Converts the power system voltage (120/230VAC) into 24VDC for the S7-300 and load power supply for 24 VDC load circuits. Executes the user program, provides the 5V supply For the S7-300 backplane bus, communicates with other CPU's or with a programming device via the MPI(Multi Point Interface). Match different process signal levels to the internal signal level of S7-300 For time critical and memory intensive process signal processing tasks eg. Closed loop control Relieves the CPU of communication tasks eg-CP 342-5 DP for connection to SINEC L2-DP. Interconnects the individual tiers of an S7-300 Interconnects CPUs and PCs Connects a CPU to a programming device Interfaces the S7-300 over large distances to other S7300s or programming devices
3.
CPU
4. 5. 6. 7. 8. 9. 10.
Signal Modules(SM)DI,DO,AI,AO Function Modules (FMs) Communication Processor (CP) Interface Module(IM) Sinec L2 cable with LAN connector Programmer Cable RS 485 Repeater
PAGE 3
Overview of STEP 7
What is STEP 7? STEP 7 is the standard software package used for configuring and programming SIMATIC programmable logic controllers. It is part of the SIMATIC industry software. Basic Tasks When you create an automation solution with STEP 7, there are a series of basic tasks. The following figure shows the tasks that need to be performed for most projects and assigns them to a basic procedure.
Alternative Procedures As shown in the figure above, you have two alternative procedures: You can configure the hardware first and then program the blocks. You can, however, program the blocks first without configuring the hardware. This is recommended for service and maintenance work, for example, to integrate programmed blocks into in an existing project. PAGE 4
Brief Description of the Individual Steps Installation and authorization The first time you use STEP 7, install it and transfer the authorization from diskette to the hard disk Plan your controller Before you work with STEP 7, plan your automation solution from dividing the process into individual tasks to creating a configuration diagram Design the program structure Turn the tasks described in the draft of your controller design into a program structure using the blocks available in STEP 7 Start STEP 7 You start STEP 7 from the Windows 95/98/NT user interface Create a project structure A project is like a folder in which all data are stored in a hierarchical structure and are available to you at any time. After you have created a project, all other tasks are executed in this project Configure a station When you configure the station you specify the programmable controller you want to use; for example, SIMATIC 300, SIMATIC 400 Configure hardware When you configure the hardware you specify in a configuration table which modules you want to use for your automation solution and which addresses are to be used to access the modules from the user program. The properties of the modules can also be assigned using Configure networks and communication connections The basis for communication is a pre-configured network. For this, you will need to create the subnets required for your automation networks, set the subnet properties, and set the network connection properties and any communication connections required for the networked stations Define symbols You can define local or shared symbols, which have more descriptive names, in a symbol table to use instead of absolute addresses in your user program Create the program Using one of the available programming languages create a program linked to a module or independent of a module and store it as blocks, source files, or charts S7 only: generate and evaluate reference data You can make use of these reference data to make debugging and modifying your user program easier Configure messages You create block-related messages, for example, with their texts and attributes. Using the transfer program you transfer the message configuration data created to the operator interface system database (for example, SIMATIC WinCC, SIMATIC ProTool) Configure operator control and monitoring variables You create operator control and monitoring variables once in STEP 7 and assign them the required attributes. Using the transfer program you transfer the operator control and monitoring variables created to the database of the operator interface system WinCC Download programs to the programmable controller S7 only: after all configuration, parameter assignment, and programming tasks are completed, you can download your entire user program or individual blocks from it to the programmable controller (programmable module for your hardware solution). Test programs S7 only: for testing you can either display the values of variables from your user program or a CPU, assign values to the variables, and create a variable table for the variables that you want to display or modify Monitor operation, diagnose hardware You determine the cause of a module fault by displaying online information about a module. You determine the causes for errors in user program processing with the help of the diagnostic buffer and the stack contents. You can also check whether a user program can run on a particular CPU Document the plant After you have created a project/plant, it makes sense to produce clear documentation of the project data to make further editing of the project and any service activities easier PAGE 5
COMPARISON OF CPU'S
CPU's Mem Statement/Bytes Memory Cards Processing Time 1024 Statements DI & DO Max AI & AO Max Rack Configuration Expansion Modules Max Bit Memories Counters Timers MPI Interface 187.5 Kbit/s Max 32 Nodes Integrated functions+Interfaces CPU312IFM 2K/6KB 0.6 ms 256 64 1-Tier 8 1024 32 64 Yes 10DI/6DQ onboard. int. functions:Count ers/Freq. Measuremensts CPU313 4K/12KB 512KB FEPROM 0.6 ms 256 64 1-Tier 8 2048 32 64 Yes CPU314IFM 8K/24KB 0.3 ms 1024 256 4-Tier 31 2048 64 72 Yes 20DI/16DQ , 4AI,1AO onboard. int. functions:Co unters/Freq. Measuremen sts/Positionin g PID Control CPU314 16K/48KB 512KB FEPROM 0.3 ms 1024 256 4-Tier 31 2048 64 128 Yes -
CPU's Mem Statement/Bytes Memory Cards Processing Time 1024 Statements DI & DO Max AI & AO Max Rack Configuration Expansion Modules Max Bit Memories Counters Timers MPI Interface 187.5 Kbit/s Max 32 Nodes Integrated functions+Interfaces
CPU315 16K/48KB 512KB FEPROM 0.3 ms 1024 256 4-Tier 32 2048 64 128 Yes -
CPU315-2DP 16K/48KB 512KB FEPROM 0.3 ms 2048 256 4-Tier 32 2048 64 128 Yes PROFIBUSDP Master/Slave (64 DP stations,12M baud)
CPU316-2DP 42K/128KB 4MB FEPROM 0.3 ms 4096 256 4-Tier 32 2048 64 128 Yes PROFIBUSDP Master/Slave (64 DP stations,12M baud)
CPU318-2 256KB 4MB FEPROM 0.1 ms 16384 1024 4-Tier 32 8192 512 512 Upto 12Mbaud PROFIBUS-DP Master/Slave (125 DP stations,12Mb aud)
RELAY OUTPUTS 8 X Relay 30 VDC ,0.5A 8 X Relay 250 VAC ,3A 16 X Relay 30VDC,0.5A 16 X Relay 120VAC, 2.5A
ANALOG INPUTS PARAMETERIZABLE 8 Analog Inputs/ 2 Analog Inputs +/- 10V , +/- 50 mV, +/-1 V, +/-20 Ma, 4 to 20mA, Pt100, Thermocouple
ANALOG OUTPUTS PARAMETERIZABLE 4 Analog Outputs/ 2 Analog Outputs +/-10V, +/-50mV, +/-1 V, +/-20 mV, 4 to 20 mA
2. FUNCTION MODULES High Speed Counter Modules - Upto 100 KHz range Positioning Modules - For position control, Stepper Motor Control, Cam Controllers All function modules are enclosed and can be installed in any slot. 3. COMMUNICATION PROCESSORS - FOR DATA EXCHANGE WITH PRINTERS,COMPUTERS, SIMATIC SYSTEMS CP340 - Point to Point Communication for the serial link with RS232, 3964R and any ASCII protocol 4. INTERFACE MODULES - FOR MULTI TIER CONFIGURATION For Central Controller Expansion For Expansion Unit Connection 5. POWER SUPPLY MODULES - FOR 24 VDC LOAD CIRCUITS WITH DIFFERENT RATINGS.
ADDRESSING OF MODULES
RACK 0
CPU
4 0 256
5 4 272
6 8 288
7 12 304
8 16 320
9 20 336
10 24 352
11 28 368
RACK 1
4 64 32 512 384
5 36 400
6 40 416
7 44 432
8 48 448
9 52 464
10 56 480
11 60 496
RACK 2
4 64 512
5 68 528
6 72 544
7 76 560
8 80 576
9 84 592
10 88 608
11 92 624
RACK 3
4 64 96 512 640
5 100 656
6 104 672
7 108 688
8 112 704
9 116 720
10 120 736
11 124 752
PAGE 9
Rack 3
Slot Number
IM
4 64 512
10
11
Rack 2
Slot Number
IM
10
11
Rack 1
Slot Number
IM
10
11
Rack 0
PS
CPU
Slot Number
(IM) 3
10
11
PAGE 10
PAGE 11
Block
Organization blocks (OB) System function blocks (SFB) and system functions (SFC) Function blocks (FB) Functions (FC) Instance data blocks (instance DB) Data blocks (DB)
OBs, FBs, SFBs, FCs, and SFCs contain sections of the program and are therefore also known as logic blocks. The permitted number of blocks per block type and the permitted length of the blocks is CPU-specific.
PAGE 12
DATA TYPES
Introduction to Data Types and Parameter Types All the data in a user program must be identified by a data type. The following data types are available: Elementary data types provided by STEP 7 Complex data types that you yourself can create by combining elementary data types Parameter types with which you define parameters to be transferred to FBs or FCs General Information Statement List, Ladder Logic, and Function Block Diagram instructions work with data objects of specific sizes. Bit logic instructions work with bits, for example. Load and transfer instructions (STL) and move instructions (LAD and FBD) work with bytes, words, and double words. A bit is a binary digit "0" or "1." A byte is made up of eight bits, a word of 16 bits, and a double word of 32 bits. Math instructions also work with bytes, words, or double words. In these byte, word, or double word addresses you can code numbers of various formats such as integers and floating-point numbers. When you use symbolic addressing, you define symbols and specify a data type for these symbols (see table below). Different data types have different format options and number notations. This chapter describes only some of the ways of writing numbers and constants. The following table lists the formats of numbers and constants that will not be explained in detail. Format Size in Bits Number Notation Hexadecimal Binary date time Time of day Character 8, 16, and 32 8, 16, and 32 16 32 32 8 B#16#, W#16#, and DW#16# 2# D# T# TOD# 'A'
Elementary Data Types Each elementary data type has a defined length. The following table lists the elementary data types. Size Range and Number Type and in Format Options Notation (lowest Example Description Bits to highest value)_ BOOL(Bit) BYTE (Byte) Boolean text 8 Hexadecimal number TRUE/FALSE B16#0 to B16#FF TRUE L B#16#10 L byte#16#10
WORD (Word)
16
L 2#0001_0000_0000_0000 2. 0 to 2#1111_1111_1111_1111 Hexadecimal number W#16#0 to W#16#FFFF L W#16#1000 L word16#1000 BCD C#0 to C#999 L C#998 Decimal number unsigned B#(0.0) to B#(255.255) L B#(10,20) L byte#(10,20) Binary number Binary number Hexadecimal number 2#0 to 2#1000_0001_0001_1000_ 2#1111_1111_1111_1111 1011_1011_0111_1111 1111_1111_1111_1111 DW#16#0000_0000 to L DW#16#00A2_1234 PAGE 13
32
DW#16#FFFF_FFFF B#(0,0,0,0) to Decimal number unsigned B#(255,255,255,255) INT (Integer) 16 Decimal number signed Decimal number signed IEEE Floating-point number S7 time in steps of 10 ms (default) -32768 to 32767 L#-2147483648 to L#2147483647
Upper limit: 3.402823e+38 L 1.234567e+13 Lower limit: 1.175 495e-38 S5T#0H_0M_0S_10MS to S5T#2H_46M_30S_0MS and S5T#0H_0M_0S_0MS L S5T#0H_1M_0S_0MS L S5TIME#0H_1H_1M_0S_0 MS
16
32
L T#0D_1H_1M_0S_0MS T#24D_20H_31M_23S_64 L 8MS to TIME#0D_1H_1M_0S_0MS T#24D_20H_31M_23S_64 7MS D#1990-1-1 to D#2168-12-31 TOD#0:0:0.0 to TOD#23:59:59.999 'A','B' etc. L D#1996-3-15 L DATE#1996-3-15 L TOD#1:10:3.3 L TIME_OF_DAY#1:10:3.3 L 'E'
16 32 8
Parameter Types In addition to elementary and complex data types, you can also define parameter types for formal parameters that are transferred between blocks. STEP 7 recognizes the following parameter types: TIMER or COUNTER: this specifies a particular timer or particular counter that will be used when the block is executed. If you supply a value to a formal parameter of the TIMER or COUNTER parameter type, the corresponding actual parameter must be a timer or a counter, in other words, you enter "T" or "C" followed by a positive integer. BLOCK: specifies a particular block to be used as an input or output. The declaration of the parameter determines the block type to be used (FB, FC, DB etc.). If you supply values to a formal parameter of the BLOCK parameter type, specify a block address as the actual parameter. Example: FC101" (when using absolute addressing) or Valve" (with symbolic addressing). Parameter TIMER COUNTER Capacity Description
Indicates a timer to be used by the program in the called logic block. 2. Byte Format: T1 s 2 bytes Indicates a counter to be used by the program in the called logic block. Format: C10 Indicates a block to be used by the program in the called logic block. Format: FC101 DB42 PAGE 14
PAGE 15
PAGE 16
PAGE 17
PAGE 18
PAGE 19
PAGE 20
PAGE 21
PAGE 22
PAGE 23
PAGE 24
Comparison Instructions
PAGE 25
PAGE 26
Conversion Instructions
PAGE 27
BTD BCD to Double Integer (32-Bit) Example: L MD10 Load the BCD number into ACCU 1. BTD Convert from BCD to integer; store result in ACCU 1. T MD20 Transfer result (double integer number) to MD20.
BTI BCD to Integer (16-Bit) Example: L MW10 Load the BCD number into ACCU 1-L. BTI Convert from BCD to integer; store result in ACCU 1-L. T MW20 Transfer result (integer number) to MW20.
CAD Change Byte Sequence in ACCU 1 (32-Bit) Example: L MD10 Load the value of MD10 into ACCU 1. CAD Reverse the sequence of bytes in ACCU 1. T MD20 Transfer the results to MD20. Contents of ACCU 1 before execution of CAD: ACCU 1-H-H: ACCU 1-H-L: ACCU 1-L-H: value "A" value "B" value "C" Contents of ACCU 1 after execution of CAD: ACCU 1-H-H: ACCU 1-H-L: ACCU 1-L-H: value "D" value "C" value "B" ACCU 1-L-L: value "D" ACCU 1-L-L: value "A"
PAGE 28
CAW Change Byte Sequence in ACCU 1-L (16-Bit) Example: L MW10 Load the value of MW10 into ACCU 1. CAW Reverse the sequence of bytes in ACCU 1-L. T MW20 Transfer the result to MW20. Contents of ACCU 1 before execution of CAW: ACCU 1-H-H: value "A" ACCU 1-H-L: value "B" ACCU 1-L-H: value "C" ACCU 1-L-L: value "D" ACCU 1-L-L: value "C"
Contents of ACCU 1 after execution of CAW: ACCU 1-H-H: ACCU 1-H-L: ACCU 1-L-H: value "A" value "B" value "D"
DTB Double Integer (32-Bit) to BCD Example: L MD10 Load the 32-bit integer into ACCU 1. DTB Convert from integer (32-bit) to BCD, store result in ACCU 1. T MD20 Transfer result (BCD number) to MD20.
DTR Example:
L DTR T
MD10 MD20
Load the 32-bit integer into ACCU 1. Convert from double integer to floating point (32-bit IEEE FP); store result in ACCU 1. Transfer result (BCD number) to MD20.
16
1100 0011
15
0110 1001 0011 1100 1010 0101
0
1110 0001
Contents of ACCU 1 before execution of INVD Contents of ACCU 1 after execution of INVD
L INVD T
ID8 MD10
Load value into ACCU 1. Form ones complement (32-bit). Transfer result to MD10.
INVI Ones Complement Integer (16-Bit) Example: Bit 15 Contents of ACCU 1-L before execution of INVI 0110 Contents of ACCU 1-L after execution of INVI 1001 L INVI T IW8 MW10 Load value into ACCU 1-L. Form ones complement 16-bit. Transfer result to MW10.
0011 1100
1010 0101
0 1110 0001
PAGE 30
ITB Integer (16-Bit) to BCD Example: L MW10 Load the integer number into ACCU 1-L. ITB Convert from integer to BCD (16-bit); store result in ACCU 1-L. T MW20 Transfer result (BCD number) to MW20.
ITD Integer (16-Bit) to Double Integer (32-Bit) Example: L MW12 Load the integer number into ACCU 1. ITD Convert from integer (16-bit) to double integer (32-bit); store result in ACCU 1. T MD20 Transfer result (double integer) to MD20.
MW12 = "-10" (Integer, 16-bit): Bit:
Contents of ACCU 1 before execution of ITD: Contents of ACCU 1 after execution of ITD:
ACCU 1-H 31
XXXX 1111 XXXX 1111 XXXX 1111 XXXX 1111
ACCU 1-L 16 : 15
1111 1111 1111 1111 1111 1111
0
0110 0110
NEGD Example:
ACCU 1-L .0
0100 1011 0101 1010 1101 0010 0011 1100 1000 1000
31
0101 1010 1111 0000 0110 1001
Load value into ACCU 1. Generate twos complement (32-bit). Transfer result to MD10.
NEGI Twos Complement Integer (16-Bit) Example: Bit 15 Contents of ACCU 1-L before execution of NEGI 0101 Contents of ACCU 1-L after execution of NEGI 1010 L NEGI T IW8 MW10 Load value into ACCU 1-L. Form twos complement 16-bit. Transfer result to MW10.
1101 0010
0011 1100
0 1000 1000
NEGR Negate Floating-Point Number (32-Bit, IEEE-FP) Example: L ID8 Load value into ACCU 1 (example: ID 8 = 1.5E+02). NEGR Negate floating-point number (32-bit, IEEE-FP); stores the result in ACCU 1. T MD10 Transfer result to MD10 (example: result = -1.5E+02).
PAGE 32
RND Round Example: L MD10 Load the floating-point number into ACCU 1-L. RND Convert the floating-point number (32-bit, IEEE-FP) into an integer (32-bit) and round off the result. T MD20 Transfer result (double integer number) to MD20. Value before conversion: Value after conversion: MD10 = "100.5" => RND => MD20 = "+100" MD10 = "-100.5" => RND => MD20 = "-100"
PAGE 33
RND+ Round to Upper Double Integer Example: L MD10 Load the floating-point number (32-bit, IEEE-FP) into ACCU 1-L. RND+ Convert the floating-point number (32-bit, IEEE-FP) to an integer (32-bit) and round result.Store output in ACCU 1. T MD20 Transfer result (double integer number) to MD20. Value before conversion: Value after conversion: MD10 = "100.5" => RND+ => MD20 = "+101" MD10 = "-100.5" => RND+ => MD20 = "-100"
RNDRound to Lower Double Integer Example: L MD10 Load the floating-point number into ACCU 1-L. RNDConvert the floating-point number (32-bit, IEEE-FP) to an integer (32-bit) and round result.Store result in ACCU 1. T MD20 Transfer result (double integer number) to MD20. Value before conversion: Value after conversion: MD10 = "100.5" => RND- => MD20 = "+100" MD10 = "-100.5" => RND- => MD20 = "-101" PAGE 34
TRUNC Truncate Example: L MD10 Load the floating-point number into ACCU 1-L. TRUNC Convert the floating-point number (32-bit, IEEE-FP) to an integer (32-bit) and round result.Store the result in ACCU 1. T MD20 Transfer result (double integer number) to MD20. Value before conversion: Value after conversion: MD10 = "100.5" => TRUNC => MD20 = "+100" MD10 = "-100.5" => TRUNC => MD20 = "-100"
PAGE 35
Counter Instructions
PAGE 36
PAGE 37
PAGE 38
PAGE 39
PAGE 40
PAGE 41
Counter Down Counter preset value. Preset counter after detection of rising edge of I 0.1. Load counter 1 preset if enabled. One count down per rising edge of I 0.0. Decrement counter C1 by 1 when RL0 transitions from 0 to 1 depending on I 0.0. Zero detection using the C1 bit. Q 0.0 = 1 if counter 1 value is zero.
Counter Up If there is a positive edge change at input I 2.1. Counter C3 is incremented by 1 when RL0 transitions from 0 to 1. Load Current Counter Value into ACCU 1 Load ACCU 1-L with the count value of counter C3 in binary format. Load Current Counter Value into ACCU 1 as BCD Load ACCU 1-L with the count value of counter C3 in binary coded decimal
R Example: A I 2.3 R C3
Reset Counter Check signal state at input I 2.3. Reset counter C3 to a value of 0 if RLO transitions from 0 to 1.
Set Counter Preset Value Check signal state at input I 2.3. Load count value 3 into ACCU 1-L. Set counter C1 to count value if RLO transitions from 0 to 1
PAGE 42
Jump if RLO = 1 with BR I 1.0 I 1.2 JOVR Jump if RLO = 1 to jump label JOVR. Copy the contents of the RLO bit into the BR bit. IW8 Program scan continues here if jump is not executed. MW22 I 2.1 Program scan resumes here after jump to jump label JOVR.
Jump if RLO = 0 I 1.0 I 1.2 JOVR Jump if RLO = 0 to jump label JOVR. IW8 Program scan continues here if jump is not executed. MW22 I 2.1 Program scan resumes here after jump to jump label JOVR.
JM Example: L L -I JM AN S JU
Jump if Minus IW8 MW12 //Subtract contents of MW12 from contents of IW8. NEG //Jump if result < 0 (that is, contents of ACCU 1 < 0). M 4.0 //Program scan continues here if jump is not executed. M 4.0 NEXT PAGE 43
NEG:
//Program scan resumes here after jump to jump label NEG. //Program scan resumes here after jump to jump label NEXT.
JMZ Jump if Minus or Zero Example: L IW8 L MW12 -I Subtract contents of MW12 from contents of IW8. JMZ RGE0 Jump if result <=0 (that is, contents of ACCU 1 <= 0). AN M 4.0 Program scan continues here if jump is not executed. S M 4.0 JU NEXT RGE0: AN M 4.1 Program scan resumes here after jump to jump label RGE0. S M 4.1 NEXT: NOP 0 Program scan resumes here after jump to jump label NEXT.
Jump if Not Zero IW8 MW12 NOZE Jump if the contents of ACCU 1-L are not equal to zero. M 4.0 Program scan continues here if jump is not executed. M 4.0 NEXT M 4.1 Program scan resumes here after jump to jump label NOZE. M 4.1 Program scan resumes here after jump to jump label NEXT.
Jump if Plus IW8 MW12 Subtract contents of MW12 from contents of IW8. POS Jump if result >0 (that is, ACCU 1 > 0). M 4.0 Program scan continues here if jump is not executed. M 4.0 NEXT M 4.1 Program scan resumes here after jump to jump label POS. M 4.1 Program scan resumes here after jump to jump label NEXT.
Jump if Plus or Zero IW8 MW12 Subtract contents of MW12 from contents of IW8. REG0 Jump if result >=0 (that is, contents of ACCU 1 >= 0). M 4.0 Program scan continues here if jump is not executed. M 4.0 NEXT M 4.1 Program scan resumes here after jump to jump label REG0. PAGE 44
Jump Unconditional I 1.0 I 1.2 DELE Jump if RLO=1 to jump label DELE. MB10 1 MB10 FORW Jump unconditionally to jump label FORW. 0 MB10 I 2.1 Program scan resumes here after jump to jump label FORW.
JUO Example: L L /D JUO T A R JU ERRO: AN S NEXT: NOP 0 JZ Example: L SRW JZ L INC T JU ZERO: L INC T NEXT: NOP 0
Jump if Unordered MD10 ID2 Divide contents of MD10 by contents of ID2. ERRO Jump if division by zero (that is, ID2 = 0). MD14 Program scan continues here if jump is not executed. M 4.0 M 4.0 NEXT M 4.0 Program scan resumes here after jump to jump label ERRO. M 4.0 Program scan resumes here after jump to jump label NEXT. Jump if Zero MW10 1 ZERO Jump to jump label ZERO if bit that has been shifted out = 0. MW2 Program scan continues here if jump is not executed. 1 MW2 NEXT MW4 Program scan resumes here after jump to jump label ZERO. 1 MW4 Program scan resumes here after jump to jump label NEXT.
LOOP Loop Example for calculating the factor of 5: L L#1 Load the integer constant (32 bit) into ACCU 1. T MD20 Transfer the contents from ACCU 1 into MD20 (initialization). L 5 Load number of loop cycles into ACCU 1-L. NEXT: T MW10 Jump label = loop start / transfer ACCU 1-L to loop counter. L MD20 * D Multiply current contents of MD20 by the current contents of MB10. T MD20 Transfer the multiplication result to MD20. L MW10 Load contents of loop counter into ACCU 1.
LOOP NEXT Decr. the contents of ACCU 1 and jump to the NEXT jump label if ACCU 1-L > 0.
PAGE 45
L L >I
T Transfer T <address> transfers (copies) the contents of ACCU 1 to the destination address if the Master Control Relay is switched on (MCR = 1). If MCR = 0, then the destination address is written with 0. The number of bytes copied from ACCU 1 depends on the size expressed in the destination address. ACCU 1 also saves the data after the transfer procedure. A transfer to the direct I/O area (memory type PQ) also transfers the contents of ACCU 1 or "0" (if MCR=0) to the corresponding address of the process image output table (memory type Q). The instruction is executed without regard to, and without affecting, the status bits. Example: T QB10 T MW14 T DBD2 Transfers contents of ACCU 1-L-L to output byte QB10. Transfers contents of ACCU 1-L to memory word MW14. Transfers contents of ACCU 1 to data double word DBD2.
PAGE 46
+R Add ACCU 1 and ACCU 2 as a Floating Point Number (32-Bit IEEE-FP) Example: OPN DB10 L ID10 Load the value of ID10 into ACCU 1. L MD14 Load the value of ACCU 1 into ACCU 2.Load the value of MD14 into ACCU 1. +R Add ACCU 2 and ACCU 1; store the result in ACCU 1. T DBD25 The content of ACCU 1 (result) is transferred to DBD25 in DB10.
Load the value of ID10 into ACCU 1. Load the value of ACCU 1 into ACCU 2.Load the value of MD14 into Subtract ACCU 1 from ACCU 2; store the result in ACCU 1. The content of ACCU 1 (result) is transferred to DBD25 in DB10.
/R Divide ACCU 2 by ACCU 1 as a Floating Point Number (32-Bit IEEE-FP) Example: OPN DB10 L ID10 Load the value of ID10 into ACCU 1. L MD14 Load the contents of ACCU 1 into ACCU 2.Load the value of MD14 into ACCU 1. /R Divide ACCU 2 by ACCU 1; store the result in ACCU 1. T DBD20 The content of ACCU 1 (result) is transferred to DBD20 in DB10.
ABS Absolute Value of a Floating Point Number (32-Bit IEEE-FP) Example: L ID8 Load value into ACCU 1 (example: ID8 = -1.5E+02). ABS Form the absolute value; store the result in ACCU 1. T MD10 Transfer result to MD10 (example: result = 1.5E+02).
PAGE 47
PAGE 48
Example 2: L IW12 L IW14 + 100 >I JC NEXT Example 3: L MD20 L MD24 +D + L#-200 T MD28
Add ACCU 1-L and 100; store the result in ACCU 1-L. If ACCU 2 > ACCU 1, or IW12 > (IW14 + 100) then conditional jump to jump label NEXT.
Add ACCU 1and ACCU 2; store the result in ACCU 1. Add ACCU 1 and -200; store the result in ACCU 1.
+D Add ACCU 1 and ACCU 2 as Double Integer (32-Bit) Example: L ID10 Load the value of ID10 into ACCU 1. L MD14 Load the contents of ACCU 1 to ACCU 2.Load the value of MD14 into ACCU 1. +D Add ACCU 2 and ACCU 1; store the result in ACCU 1. T DB1.DBD25 The contents of ACCU 1 (result) are transferred to DBD25 of DB1.
-D Example: L ID10
Subtract ACCU 1 from ACCU 2 as Double Integer (32-Bit) Load the value of ID10 into ACCU 1. PAGE 49
Load the contents of ACCU 1 into ACCU 2.Load the value of MD14 into Subtract ACCU 1 from ACCU 2; store the result in ACCU 1. The contents of ACCU 1 (result) are transferred to DBD25 of DB1.
Multiply ACCU 1 and ACCU 2 as Double Integer (32-Bit) Load the value of ID10 into ACCU 1. Load contents of ACCU 1 into ACCU 2.Load contents of MD14 into ACCU 1. Multiply ACCU 2 and ACCU 1; store the result in ACCU 1. The contents of ACCU 1 (result) are transferred to DBD25 in DB1.
/D Divide ACCU 2 by ACCU 1 as Double Integer (32-Bit) Example: L ID10 Load the value of ID10 into ACCU 1. L MD14 Load the contents of ACCU 1 into ACCU 2.Load the value of MD14 into ACCU 1. /D Divide ACCU 2 by ACCU 1; store the result (quotient) in ACCU 1. T MD20 The contents of ACCU 1 (result) are transferred to MD20. Example above: 13 divided by 4 Contents of ACCU 2 before instruction (ID10): Contents of ACCU 1 before instruction (MD14): Instruction /D (ACCU 2 / ACCU 1) Contents of ACCU 1 after instruction (quotient): "13" "4" : "3"
"13/4"
+I Add ACCU 1 and ACCU 2 as Integer (16-Bit) Example: L IW10 Load the value of IW10 into ACCU 1-L. L MW14 Load the contents of ACCU 1-L into ACCU 2-L.Load the value of MW14 into ACCU 1-L. +I Add ACCU 2-L and ACCU 1-L; store the result in ACCU 1-L. T DB1.DBW25 The contents of ACCU 1-L (result) are transferred to DBW25 of DB1.
-I Subtract ACCU 1 from ACCU 2 as Integer (16-Bit) Example: L IW10 Load the value of IW10 into ACCU 1-L. L MW14 Load the contents of ACCU 1-L into ACCU 2-L.Load the value of MW14 into ACCU 1-L. -I Subtract ACCU 1-L from ACCU 2-L; store the result in ACCU 1-L. T DB1.DBW25 The contents of ACCU 1-L (result) are transferred to DBW25 of DB1.
*I Multiply ACCU 1 and ACCU 2 as Integer (16-Bit) Example: L IW10 Load the value of IW10 into ACCU 1-L. L MW14 Load contents of ACCU 1-L into ACCU 2-L.Load contents of MW14 into ACCU 1L. *I Multiply ACCU 2-L and ACCU 1-L, store result in ACCU 1. T DB1.DBD25 The contents of ACCU 1 (result) are transferred to DBW25 in DB1. PAGE 50
Divide ACCU 2 by ACCU 1 as Integer (16-Bit) Load the value of IW10 into ACCU 1-L. Load the contents of ACCU 1-L into ACCU 2-L.Load the value of MW14 into ACCU 1-L. Divide ACCU 2-L by ACCU 1-L; store the result in ACCU 1:ACCU 1-L:
/I quotient,
ACCU 1-H: remainder T MD20 The contents of ACCU 1 (result) are transferred to MD20. Example above: 13 divided by 4 Contents of ACCU 2-L before instruction (IW10): "13" Contents of ACCU 1-L before instruction (MW14): "4" Instruction /I (ACCU 2-L / ACCU 1-L): "13/4" Contents of ACCU 1-L after instruction (quotient): "3" Contents of ACCU 1-H after instruction (remainder): "1"
MOD Division Remainder Double Integer (32-Bit) Example: L ID10 Load the value of ID10 into ACCU 1. L MD14 Load the contents of ACCU 1 into ACCU 2.Load the value of MD14 into ACCU 1. MOD Divide ACCU 2 by ACCU 1, store the result (remainder) in ACCU 1. T MD20 The contents of ACCU 1 (result) are transferred to MD20. Example above : 13 divided by 4 Contents of ACCU 2 before instruction (ID10): "13" Contents of ACCU 1 before instruction (MD14): "4" Instruction MOD (ACCU 2 / ACCU 1): "13/4" Contents of ACCU 1 after instruction (remainder): "3"
PAGE 51
BEC Block End Conditional If RLO = 1, then BEC (block end conditional) interrupts the program scan in the current block and causes a jump to the block that called the current block. Example: A I 1.0 BEC L IW4 T MW10 Update RLO. End block if RLO = 1. Continue here if BEC is not executed, RLO = 0.
BEU Block End Unconditional BEU (block end unconditional) terminates the program scan in the current block and causes a jump to the block that called the current block. The program scan resumes with the first instruction that follows the block call. Example: A I 1.0 JC NEXT Jump to NEXT jump label if RLO = 1 (I 1.0 = 1). L IW4 Continue here if no jump is executed. T IW10 A I 6.0 A I 6.1 S M 12.0 BEU Block end unconditional. NEXT: NOP 0 Continue here if jump is executed.
CALL Block Call CALL <logic block identifier> is used to call functions (FCs) or function blocks (FBs), system functions (SFCs) or system function blocks (SFBs) you created yourself or to call the standard pre-programmed blocks shipped by Siemens. The CALL instruction calls the FC and SFC or the FB and SFB that you input as an address, independent of the RLO or any other condition. Example: CALL FB1, DB1 or CALL FILLVAT1, RECIPE1 Logic Block FC SFC FB SFB Block Type Function System function Function block System function block Absolute Address Call Syntax CALL FCn CALL SFCn CALL FBn1,DBn2 CALL SFBn1,DBn2
Example 1: Assigning parameters to the FC6 call CALL FC6 Formal parameter Actual parameter NO OF TOOL := MW100 TIME OUT := MW110 FOUND:= Q 0.1 ERROR := Q 100.0 Example 2: Calling an SFC without parameters PAGE 52
CALL
Example 3: Calling FB99 with instance data block DB1 CALL FB99,DB1 Formal parameter Actual parameter MAX_RPM := #RPM1_MAX MIN_RPM := #RPM2 MAX_POWER := #POWER MAX_TEMP := #TEMP Example 4: Calling FB99 with instance data block DB2 CALL FB99,DB2 Formal parameter Actual parameter MAX_RPM := #RPM3_MAX MIN_RPM := #RPM2 MAX_POWER := #POWER1 MAX_TEMP := #TEMP
CC Conditional Call CC <logic block identifier> (conditional block call) calls a logic block if RLO=1. CC is used to call logic blocks of the FC or SFC type without parameters. Example: A I 2.0 Check signal state at input I 2.0. CC FC6 Call function FC6 if I 2.0 is "1". A M 3.0 Executed upon return from called function (I 2.0 = 1) or directly after A I 2.0 statement if I 2.0 = 0.
UC Unconditional Call UC <logic block identifier> (unconditional block call) calls a logic block of the FC or SFC type. UC is like the CALL instruction, except that you cannot transfer parameters with the called block. Example 1: UC FC6 Call function FC6 (without parameters).
PAGE 53
Shift Instructions
SLD Shift Left Double Word (32-Bit) SLD <number>: The number of shifts is specified by the address <number>. The permissible value range is from 0 to 32. The status word bits CC 0 and OV are reset to zero if <number> is greater than zero. If <number> is equal to zero, then the shift instruction is regarded as a NOP operation. Examples: ACCU 1-H
Bit: 31 ACCU 1 before execution of SLD 5: 0101 ACCU 1 after execution of SLD 5: 1110 1111 1100 0110 1000 16 0100 1011 15 0101 1010 1101 0111
ACCU 1-L
0011 0110 0 1011 0000
Load value into ACCU 1. Shift bits in ACCU 1 five places to the left. Transfer result to MD8.
SLW Shift Left Word (16-Bit) SLW <number>: The number of shifts is specified by the address <number>. The permissible value range is from 0 to 15. The status word bits CC 0 and OV are reset to zero if <number> is greater than zero. If <number> is equal to zero, then the shift instruction is regarded as a NOP operation. Examples: ACCU 1-H Bit:
ACCU 1 before execution of SLW 5: ACCU 1 after execution of SLW 5:
ACCU 1-L 16 15
0101 1010 1101 0111 0011 0110
31
0101 0101 1111 1111 0110 0110
0
1011 0000
0100 0100
Load value into ACCU 1. Shift the bits in ACCU 1 five places to the left. Transfer result to MW8.
SRD Shift Right Double Word (32-Bit) SRD <number>: The number of shifts is specified by the address <number>. The permissible value range is from 0 to 32. The status word bits CC 0 and OV are reset to 0 if <number> is greater thnan zero. Examples: ACCU 1-H ACCU 1-L
Bit: 31 ACCU 1 before execution of SRD 7:0101 ACCU 1 after execution of SRD 7: 0000 1111 0000 0110 1011 16 0100 1110 15 0101 1100 1101 1000 0011 1011 0 1011 1010
Load value into ACCU 1. Shift bits in ACCU 1 seven places to the right. Transfer result to MD8.
SRW Shift Right Word (16-Bit) SRW <number>: The number of shifts is specified by the address <number>. The permissible value range is from 0 to 15. The status word bits CC 0 and OV are reset to 0 if <number> is greater than zero. Examples: ACCU 1-H ACCU 1-L
Bit: 31 16 15 0
PAGE 54
PROLIFIC SYSTEMS & TECHNOLOGIES PVT. LTD. ACCU 1 before execution of SRW 6: 0011 1011 ACCU 1 after execution of SRW 6: 0101 0100 0101 1111 1111 0110 0110 0100 0100 0000 0101 0001 1101 0111
Load value into ACCU 1. Shift bits in ACCU 1-L six places to the right. Transfer result to MW8.
PAGE 55
Timer Instructions
PAGE 56
SD On-Delay Timer SD <timer> starts the addressed timer when the RLO transitions from "0" to "1". The programmed time interval elapses as long as RLO = 1. The time is stopped if RLO transitions to "0" before the programmed time interval has expired. This timer start instruction expects the time value and the time base to be stored as a BCD number in ACCU 1-L. Example: A I 2.1 L S5T#10s SD T1
PAGE 57
PAGE 58
SE Extended Pulse Timer SE <timer> starts the addressed timer when the RLO transitions from "0" to "1". The programmed time interval elapses, even if the RLO transitions to "0" in the meantime. The programmed time interval is started again if RLO transitions from "0" to "1" before the programmed time has expired. This timer start command expects the time value and the time base to be stored as a BCD number in ACCU 1-L. Example: A I 2.1 L S5T#10s Preset 10 seconds into ACCU 1. SE T1 Start timer T1 as an extended pulse timer. A I 2.2 R T1 Reset timer T1. A T1 Check signal state of timer T1. = Q 4.0
PAGE 59
PAGE 60
SF Off-Delay Timer SF <timer> starts the addressed timer when the RLO transitions from "1" to "0". The programmed time elapses as long as RLO = 0. The time is stopped if RLO transitions to "1" before the programmed time interval has expired. This timer start command expects the time value and the time base to be stored as a BCD number in ACCU 1-L. Example: A I 2.1 L S5T#10s Preset 10 seconds into ACCU 1. SF T1 Start timer T1 as an off-delay timer. A I 2.2 R T1 Reset timer T1. A T1 Check signal state of timer T1. = Q 4.0
PAGE 61
PAGE 62
SP Pulse Timer SP <timer> starts the addressed timer when the RLO transitions from "0" to "1". The programmed time elapses as long as RLO = 1. The timer is stopped if RLO transitions to "0" before the programmed time interval has expired. This timer start command expects the time value and the time base to be stored as a BCD number in ACCU 1-L. Example: A I 2.1 L S5T#10s Preset 10 seconds into ACCU 1. SP T1 Start timer T1 as a pulse timer. A I 2.2 R T1 Reset timer T1. A T1 Check signal state of timer T1. = Q 4.0
PAGE 63
PAGE 64
SS Retentive On-Delay Timer SS <timer> (start timer as a retentive ON timer) starts the addressed timer when the RLO transitions from "0" to "1". The full programmed time interval elapses, even if the RLO transitions to "0" in the meantime. The programmed time interval is re-triggered (started again) if RLO transitions from "0" to "1" before the programmed time has expired. This timer start command expects the time value and the time base to be stored as a BCD number in ACCU 1-L. Example: A I 2.1 L S5T#10s Preset 10 seconds into ACCU 1. SS T1 Start timer T1 as a retentive on-delay timer. A I 2.2 R T1 Reset timer T1. A T1 Check signal state of timer T1. = Q 4.0
PAGE 65
PAGE 66
PAGE 67
R Reset Timer R <timer> stops the current timing function and clears the timer value and the time base of the addressed timer word if the RLO transitions from 0 to 1. Example: A I 2.1 R T1 Check the signal state of input I 2.1 If RLO transitioned from 0 = 1, then reset timer T1.
PAGE 68
0001
L L AD T
Load contents of ID20 into ACCU 1. Load contents of ACCU 1 into ACCU 2.Load contents of ID24 into ACCU 1. Combine bits from ACCU 1 with ACCU 2 by AND, store result in ACCU 1. Transfer result to MD8.
AW AND Word (16-Bit) AW (AND word) combines the contents of ACCU 1-L with ACCU 2-L or a 16 bit-constant bit by bit according to the Boolean logic operation AND. A bit in the result word is "1" only when the corresponding bits of both words combined in the logic operation are "1". Examples: Bit: 15 Bit:0 ACCU 1-L before execution of AW: 0101 1001 0011 1011 ACCU 2-L or 16-bit constant: 1111 0110 1011 0101 Result (ACCU 1-L) after execution of AW: 0101 0000 0011 0001 L L AW T IW20 IW22 Load contents of IW20 into ACCU 1-L. Load contents of ACCU 1 into ACCU 2.Load contents of IW22 into ACCU 1-L. Combine bits from ACCU 1-L with ACCU 2-L bits by AND; store result in ACCU 1-L. MW 8 Transfer result to MW8.
OD OR Double Word (32-Bit) OD (OR double word) combines the contents of ACCU 1 with ACCU 2 or a 32-bit constant bit by bit according to the Boolean logic operation OR. A bit in the result double word is "1" when at least one of the corresponding bits of both double words combined in the logic operation is "1". Examples: Bit: 31
1111 1000 1111 1100 0101 1101 1000 0111 1111 0101 0110 0111 0011 1011 1011
Bit:0
1011 0101
ACCU 1 before execution of OD: 0101 0000 ACCU 2 or 32-bit constant: 1111 0011 Result (ACCU 1) after execution of OD:1111 0011
1111
L L OD T
Load contents of ID20 into ACCU 1. Load contents of ACCU 1 into ACCU 2.Load contents of ID24 into ACCU 1. Combine bits from ACCU 1 with ACCU 2 bits by OR; store result in ACCU 1. Transfer result to MD8.
OW OR Word (16-Bit) OW (OR word) combines the contents of ACCU 1-L with ACCU 2-L or a 16 bit-constant bit by bit according to the Boolean logic operation OR. A bit in the result word is "1" when at least one of the corresponding bits of both words combined in the logic operation is "1". Examples: Bit: 15 Bit:0 PAGE 69
ACCU 1-L before execution of OW: 0101 ACCU 2-L or 16 bit constant: 1111 Result (ACCU 1-L) after execution of OW: L L OW T IW20 IW22 MW8
1111
Load contents of IW20 into ACCU 1-L. Load contents of ACCU 1 into ACCU 2.Load contents of IW22 into ACCU 1-L. Combine bits from ACCU 1-L with ACCU 2-L by OR, store result in ACCU 1-L. Transfer result to MW8.
XOD Exclusive OR Double Word (32-Bit) XOD (XOR double word) combines the contents of ACCU 1 with ACCU 2 or a 32-bit constant bit by bit according to the Boolean logic operation XOR (Exclusive Or). A bit in the result double word is "1" when only one of the corresponding bits of both double words combined in the logic operation is "1". Examples: Bit: 31
1111 1000 0111 1100 0101 1001 1000 0111 1111 0101 0110 0011 0011 1011 1000
Bit:0
1011 0101 1110
ACCU 1 before execution of XOD: 0101 0000 ACCU 2 or 32-bit constant: 1111 0011 Result (ACCU 1) after execution of OD:1010 0011
L L XOD T
Load contents of ID20 into ACCU 1. Load contents of ACCU 1 into ACCU 2.Load contents of ID24 into ACCU 1. Combine bits from ACCU 1 with ACCU 2 by XOR; store result in ACCU 1. Transfer result to MD8.
XOW Exclusive OR Word (16-Bit) XOW (XOR word) combines the contents of ACCU 1-L with ACCU 2-L or a 16 bit-constant bit by bit according to the Boolean logic operation XOR. A bit in the result word is "1" only when one of the corresponding bits of both words combined in the logic operation is "1". Examples: Bit: 15 Bit:0 ACCU 1 before execution of XOW: 0101 0101 0011 1011 ACCU 2-L or 16-bit constant: 1111 0110 1011 0101 Result (ACCU 1) after execution of XOW: 1010 0011 1000 1110 L L XOW T IW20 IW22 MW8 Load contents of IW20 into ACCU 1-L. Load contents of ACCU 1 into ACCU 2.Load contents of ID24 into ACCU 1-L. Combine bits of ACCU 1-L with ACCU 2-L bits by XOR, store result in ACCU 1-L. Transfer result to MW8.
PAGE 70
Accumulator Instructions
DEC Decrement ACCU 1-L-L Example: L MB250 Load the value of MB250 DEC 1 Instruction "Decrement ACCU 1-L-L by 1"; store result in ACCU 1-L-L. T MB250 Transfer the contents of ACCU 1-L-L (result) back to MB250.
INC Increment ACCU 1-L-L Example: L MB22 Load the value of MB22 INC 1 Instruction "Increment ACCU 1 (MB22) by 1"; store result in ACCU 1-L-L T MB22 Transfer the contents of ACCU 1-L-L (result) back to MB22
TAK Toggle ACCU 1 with ACCU 2 Example: Subtract smaller value from greater value: Example: L MW10 Load contents of MW10 into ACCU 1-L. L MW12 Load contents of ACCU 1-L into ACCU 2-L.Load contents of MW12 into ACCU 1>I Check if ACCU 2-L (MW10) greater than ACCU 1-L (MW12). JC NEXT Jump to NEXT jump label if ACCU 2 (MW10) is greater than ACCU 1 (MW12). TAK Swap contents ACCU 1 and ACCU 2 NEXT: -I Subtract contents of ACCU 2-L from contents of ACCU 1-L. T MW14 Transfer result (= greater value minus smaller value) to MW14.
PAGE 71
PROGRAMMING EXAMPLES
PAGE 72
PAGE 73
PAGE 74
PAGE 75
PAGE 76
PAGE 77
PAGE 78
PAGE 79
PAGE 80
PAGE 81
PAGE 82
PAGE 83
PAGE 84
PAGE 85
PAGE 86
PAGE 87
PAGE 88
PAGE 89
PAGE 90
PAGE 91
PAGE 92
PAGE 93
----------------------------------------------------------------------------------------------------------------
PAGE 94