0% found this document useful (0 votes)
187 views16 pages

7.1.3 Positive and Negative Edge Instructions: S7-1200 Programmable Controller System Manual, 04/2012, A5E02486680-06

The document describes various bit logic instructions in Ladder Logic Diagram (LAD) and Function Block Diagram (FBD) programming. It discusses reset/set (RS), set/reset (SR), positive edge (P), negative edge (N), positive pulse (P_TRIG), and negative pulse (N_TRIG) instructions. These instructions detect transitions on input bits and set corresponding output bits accordingly. All edge instructions use a memory bit to store the previous input state and detect changes to generate output edges.

Uploaded by

Anil Kumar Bag
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
187 views16 pages

7.1.3 Positive and Negative Edge Instructions: S7-1200 Programmable Controller System Manual, 04/2012, A5E02486680-06

The document describes various bit logic instructions in Ladder Logic Diagram (LAD) and Function Block Diagram (FBD) programming. It discusses reset/set (RS), set/reset (SR), positive edge (P), negative edge (N), positive pulse (P_TRIG), and negative pulse (N_TRIG) instructions. These instructions detect transitions on input bits and set corresponding output bits accordingly. All edge instructions use a memory bit to store the previous input state and detect changes to generate output edges.

Uploaded by

Anil Kumar Bag
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 16

Basic instructions

7.1 Bit logic

Table 7- 13 Data types for the parameters

Parameter Data type Description


S, S1 Bool Set input; 1 indicates dominance
R, R1 Bool Reset input; 1 indicates dominance
OUT Bool Assigned bit output "OUT"
Q Bool Follows state of "OUT" bit

The OUT parameter specifies the bit address that is set or reset. The optional OUT output Q
reflects the signal state of the "OUT" address.

Instruction S1 R "OUT" bit


RS 0 0 Previous state
0 1 0
1 0 1
1 1 1
S R1
SR 0 0 Previous state
0 1 0
1 0 1
1 1 0

7.1.3 Positive and negative edge instructions

Table 7- 14 Positive and negative transition detection

LAD FBD SCL Description


Not available LAD: The state of this contact is TRUE when a positive transition (OFF-
to-ON) is detected on the assigned "IN" bit. The contact logic state is
then combined with the power flow in state to set the power flow out
state. The P contact can be located anywhere in the network except the
end of a branch.
FBD: The output logic state is TRUE when a positive transition (OFF-
to-ON) is detected on the assigned input bit. The P box can only be
located at the beginning of a branch.
Not available LAD: The state of this contact is TRUE when a negative transition (ON-
to-OFF) is detected on the assigned input bit. The contact logic state is
then combined with the power flow in state to set the power flow out
state. The N contact can be located anywhere in the network except
the end of a branch.
FBD: The output logic state is TRUE when a negative transition (ON-to-
OFF) is detected on the assigned input bit. The N box can only be
located at the beginning of a branch.

S7-1200 Programmable controller


180 System Manual, 04/2012, A5E02486680-06
Basic instructions
7.1 Bit logic

LAD FBD SCL Description


Not available LAD: The assigned bit "OUT" is TRUE when a positive transition (OFF-
to-ON) is detected on the power flow entering the coil. The power flow
in state always passes through the coil as the power flow out state. The
P coil can be located anywhere in the network.
FBD: The assigned bit "OUT" is TRUE when a positive transition (OFF-
to-ON) is detected on the logic state at the box input connection or on
the input bit assignment if the box is located at the start of a branch.
The input logic state always passes through the box as the output logic
state. The P= box can be located anywhere in the branch.
Not available LAD: The assigned bit "OUT" is TRUE when a negative transition (ON-
to-OFF) is detected on the power flow entering the coil. The power flow
in state always passes through the coil as the power flow out state. The
N coil can be located anywhere in the network.
FBD: The assigned bit "OUT" is TRUE when a negative transition (ON-
to-OFF) is detected on the logic state at the box input connection or on
the input bit assignment if the box is located at the start of a branch.
The input logic state always passes through the box as the output logic
state. The N= box can be located anywhere in the branch.
1 For SCL: You must write code to replicate this function within your application.

Table 7- 15 P_TRIG and N_TRIG instructions

LAD / FBD SCL Description


Not available The Q output power flow or logic state is TRUE when a positive transition
(OFF-to-ON) is detected on the CLK input state (FBD) or CLK power flow
in (LAD).
In LAD, the P_TRIG instruction cannot be located at the beginning or end
of a network. In FBD, the P_TRIG instruction can be located anywhere
except the end of a branch.
Not available The Q output power flow or logic state is TRUE when a negative transition
(ON-to-OFF) is detected on the CLK input state (FBD) or CLK power flow
in (LAD).
In LAD, the N_TRIG instruction cannot be located at the beginning or end
of a network. In FBD, the N_TRIG instruction can be located anywhere
except the end of a branch.
1 For SCL: You must write code to replicate this function within your application.

Table 7- 16 Data types for the parameters (P and N contacts/coils, P=, N=, P_TRIG and N_TRIG)

Parameter Data type Description


M_BIT Bool Memory bit in which the previous state of the input is saved
IN Bool Input bit whose transition edge is to be detected
OUT Bool Output bit which indicates a transition edge was detected
CLK Bool Power flow or input bit whose transition edge is to be detected
Q Bool Output which indicates an edge was detected

S7-1200 Programmable controller


System Manual, 04/2012, A5E02486680-06 181
Basic instructions
7.2 Timers

All edge instructions use a memory bit (M_BIT) to store the previous state of the input signal
being monitored. An edge is detected by comparing the state of the input with the state of
the memory bit. If the states indicate a change of the input in the direction of interest, then an
edge is reported by writing the output TRUE. Otherwise, the output is written FALSE.

Note
Edge instructions evaluate the input and memory-bit values each time they are executed,
including the first execution. You must account for the initial states of the input and memory
bit in your program design either to allow or to avoid edge detection on the first scan.
Because the memory bit must be maintained from one execution to the next, you should use
a unique bit for each edge instruction, and you should not use this bit any other place in your
program. You should also avoid temporary memory and memory that can be affected by
other system functions, such as an I/O update. Use only M, global DB, or Static memory (in
an instance DB) for M_BIT memory assignments.

7.2 Timers
You use the timer instructions to create programmed time delays. The number of timers that
you can use in your user program is limited only by the amount of memory in the CPU. Each
timer uses a 16 byte IEC_Timer data type DB structure to store timer data that is specified at
the top of the box or coil instruction. STEP 7 automatically creates the DB when you insert
the instruction.

Table 7- 17 Timer instructions

LAD / FBD boxes LAD coils SCL Description


"IEC_Timer_0_DB".TP( The TP timer generates a pulse with a preset
IN:=_bool_in_, width time.
PT:=_time_in_,
Q=>_bool_out_,
ET=>_time_out_);
"IEC_Timer_0_DB".TON ( The TON timer sets output Q to ON after a preset
IN:=_bool_in_, time delay.
PT:=_time_in_,
Q=>_bool_out_,
ET=>_time_out_);

"IEC_Timer_0_DB".TOF ( The TOF timer resets output Q to OFF after a


IN:=_bool_in_, preset time delay.
PT:=_time_in_,
Q=>_bool_out_,
ET=>_time_out_);

S7-1200 Programmable controller


182 System Manual, 04/2012, A5E02486680-06
Basic instructions
7.2 Timers

LAD / FBD boxes LAD coils SCL Description


"IEC_Timer_0_DB".TONR ( The TONR timer sets output Q to ON after a
IN:=_bool_in_, preset time delay. Elapsed time is accumulated
R:=_bool_in_ over multiple timing periods until the R input is
PT:=_time_in_, used to reset the elapsed time.
Q=>_bool_out_,
ET=>_time_out_);

FBD only: (No SCL equivalent) The PT (Preset timer) coil loads a new PRESET
time value in the specified IEC_Timer.

FBD only: (No SCL equivalent) The RT (Reset timer) coil resets the specified
IEC_Timer.

1 STEP 7 automatically creates the DB when you insert the instruction.


2 In the SCL examples, "IEC_Timer_0_DB" is the name of the instance DB.

Table 7- 18 Data types for the parameters

Parameter Data type Description


Box: IN Bool TP, TON, and TONR:
Coil: Power flow Box: 0=Disable timer, 1=Enable timer
Coil: No power flow=Disable timer, Power flow=Enable timer
TOF:
Box: 0=Enable timer, 1=Disable timer
Coil: No power flow=Enable timer, Power flow=Disable timer
R Bool TONR box only:
0=No reset
1= Reset elapsed time and Q bit to 0
Box: PT Time Timer box or coil: Preset time input
Coil: "PRESET_Tag"
Box: Q Bool Timer box: Q box output or Q bit in the timer DB data
Coil: DBdata.Q Timer coil: you can only address the Q bit in the timer DB data
Box: ET Time Timer box: ET (elapsed time) box output or ET time value in the timer DB
Coil: DBdata.ET data
Timer coil: you can only address the ET time value in the timer DB data.

S7-1200 Programmable controller


System Manual, 04/2012, A5E02486680-06 183
Basic instructions
7.2 Timers

Table 7- 19 Effect of value changes in the PT and IN parameters

Timer Changes in the PT and IN box parameters and the corresponding coil parameters
TP  Changing PT has no effect while the timer runs.
 Changing IN has no effect while the timer runs.
TON  Changing PT has no effect while the timer runs.
 Changing IN to FALSE, while the timer runs, resets and stops the timer.
TOF  Changing PT has no effect while the timer runs.
 Changing IN to TRUE, while the timer runs, resets and stops the timer.
TONR  Changing PT has no effect while the timer runs, but has an effect when the timer resumes.
 Changing IN to FALSE, while the timer runs, stops the timer but does not reset the timer. Changing
IN back to TRUE will cause the timer to start timing from the accumulated time value.

PT (preset time) and ET (elapsed time) values are stored in the specified IEC_TIMER DB
data as signed double integers that represent milliseconds of time. TIME data uses the T#
identifier and can be entered as a simple time unit (T#200ms or 200) and as compound time
units like T#2s_200ms.

Table 7- 20 Size and range of the TIME data type

Data type Size Valid number ranges1


TIME 32 bits, stored T#-24d_20h_31m_23s_648ms to T#24d_20h_31m_23s_647ms
as DInt data Stored as -2,147,483,648 ms to +2,147,483,647 ms
1 The negative range of the TIME data type shown above cannot be used with the timer instructions. Negative PT (preset
time) values are set to zero when the timer instruction is executed. ET (elapsed time) is always a positive value.

Timer coil example


The -(TP)-, -(TON)-, -(TOF)-, and -(TONR)- timer coils must be the last instruction in a LAD
network. As shown in the timer example, a contact instruction in a subsequent network
evaluates the Q bit in a timer coil's IEC_Timer DB data. Likewise, you must address the
ELAPSED element in the IEC_timer DB data if you want to use the elapsed time value in
your program.

The pulse timer is started on a 0 to 1 transition of the Tag_Input bit value. The timer runs for
the time specified by Tag_Time time value.

As long as the timer runs, the state of DB1.MyIEC_Timer.Q=1 and the Tag_Output value=1.
When the Tag_Time value has elapsed, then DB1.MyIEC_Timer.Q=0 and the Tag_Output
value=0.

S7-1200 Programmable controller


184 System Manual, 04/2012, A5E02486680-06
Basic instructions
7.2 Timers

Reset timer -(RT)- and Preset timer -(PT)- coils


These coil instructions can be used with box or coil timers and can be placed in a mid-line
position. The coil output power flow status is always the same as the coil input status. When
the -(RT)- coil is activated, the ELAPSED time element of the specified IEC_Timer DB data
is reset to 0. When the -(PT)- coil is activated, the PRESET time element of the specified
IEC_Timer DB data is reset to 0.

Note
When you place timer instructions in an FB, you can select the "Multi-instance data block"
option. The timer structure names can be different with separate data structures, but the
timer data is contained in a single data block and does not require a separate data block for
each timer. This reduces the processing time and data storage necessary for handling the
timers. There is no interaction between the timer data structures in the shared multi-instance
DB.

Operation of the timers

Table 7- 21 Types of IEC timers

Timer Timing diagram


TP: Pulse timer ,1
The TP timer generates a pulse with a preset width
time.
(7
37

37 37 37

TON: ON-delay timer ,1


The TON timer sets output Q to ON after a preset time
delay.
(7
37

4 37 37

S7-1200 Programmable controller


System Manual, 04/2012, A5E02486680-06 185
Basic instructions
7.2 Timers

Timer Timing diagram


TOF: OFF-delay timer ,1
The TOF timer resets output Q to OFF after a preset
time delay.
(7
37

4
37 37

TONR: ON-delay Retentive timer ,1


The TONR timer sets output Q to ON after a preset time
delay. Elapsed time is accumulated over multiple timing
periods until the R input is used to reset the elapsed
(7
time. 37

Note
In the CPU, no dedicated resource is allocated to any specific timer instruction. Instead,
each timer utilizes its own timer structure in DB memory and a continuously-running internal
CPU timer to perform timing.

When a timer is started due to an edge change on the input of a TP, TON, TOF, or TONR
instruction, the value of the continuously-running internal CPU timer is copied into the
START member of the DB structure allocated for this timer instruction. This start value
remains unchanged while the timer continues to run, and is used later each time the timer is
updated. Each time the timer is started, a new start value is loaded into the timer structure
from the internal CPU timer.
When a timer is updated, the start value described above is subtracted from the current
value of the internal CPU timer to determine the elapsed time. The elapsed time is then
compared with the preset to determine the state of the timer Q bit. The ELAPSED and Q
members are then updated in the DB structure allocated for this timer. Note that the elapsed
time is clamped at the preset value (the timer does not continue to accumulate elapsed time
after the preset is reached).

S7-1200 Programmable controller


186 System Manual, 04/2012, A5E02486680-06
Basic instructions
7.2 Timers

A timer update is performed when and only when:


● A timer instruction (TP, TON, TOF, or TONR) is executed
● The "ELAPSED" member of the timer structure in DB is referenced directly by an
instruction
● The "Q" member of the timer structure in DB is referenced directly by an instruction

Timer programming
The following consequences of timer operation should be considered when planning and
creating your user program:
● You can have multiple updates of a timer in the same scan. The timer is updated each
time the timer instruction (TP, TON, TOF, TONR) is executed and each time the
ELAPSED or Q member of the timer structure is used as a parameter of another
executed instruction. This is an advantage if you want the latest time data (essentially an
immediate read of the timer). However, if you desire to have consistent values throughout
a program scan, then place your timer instruction prior to all other instructions that need
these values, and use tags from the Q and ET outputs of the timer instruction instead of
the ELAPSED and Q members of the timer DB structure.
● You can have scans during which no update of a timer occurs. It is possible to start your
timer in a function, and then cease to call that function again for one or more scans. If no
other instructions are executed which reference the ELAPSED or Q members of the timer
structure, then the timer will not be updated. A new update will not occur until either the
timer instruction is executed again or some other instruction is executed using ELAPSED
or Q from the timer structure as a parameter.
● Although not typical, you can assign the same DB timer structure to multiple timer
instructions. In general, to avoid unexpected interaction, you should only use one timer
instruction (TP, TON, TOF, TONR) per DB timer structure.
● Self-resetting timers are useful to trigger actions that need to occur periodically. Typically,
self-resetting timers are created by placing a normally-closed contact which references
the timer bit in front of the timer instruction. This timer network is typically located above
one or more dependent networks that use the timer bit to trigger actions. When the timer
expires (elapsed time reaches preset value), the timer bit is ON for one scan, allowing the
dependent network logic controlled by the timer bit to execute. Upon the next execution of
the timer network, the normally closed contact is OFF, thus resetting the timer and
clearing the timer bit. The next scan, the normally closed contact is ON, thus restarting
the timer. When creating self-resetting timers such as this, do not use the "Q" member of
the timer DB structure as the parameter for the normally-closed contact in front of the
timer instruction. Instead, use the tag connected to the "Q" output of the timer instruction
for this purpose. The reason to avoid accessing the Q member of the timer DB structure
is because this causes an update to the timer and if the timer is updated due to the
normally closed contact, then the contact will reset the timer instruction immediately. The
Q output of the timer instruction will not be ON for the one scan and the dependent
networks will not execute.

S7-1200 Programmable controller


System Manual, 04/2012, A5E02486680-06 187
Basic instructions
7.2 Timers

Time data retention after a RUN-STOP-RUN transition or a CPU power cycle


If a run mode session is ended with stop mode or a CPU power cycle and a new run mode
session is started, then the timer data stored in the previous run mode session is lost, unless
the timer data structure is specified as retentive (TP, TON, TOF, and TONR timers).
When you accept the defaults in the call options dialog after you place a timer instruction in
the program editor, you are automatically assigned an instance DB which cannot be made
retentive. To make your timer data retentive, you must either use a global DB or a Multi-
instance DB.

Assign a global DB to store timer data as retentive data


This option works regardless of where the timer is placed (OB, FC, or FB).
1. Create a global DB:
– Double-click "Add new block" from the Project tree
– Click the data block (DB) icon
– For the Type, choose global DB
– If you want to be able to select individual data elements in this DB as retentive, be
sure the DB type "Optimized" box is checked. The other DB type option "Standard -
compatible with S7-300/400" only allows setting all DB data elements retentive or
none retentive.
– Click OK
2. Add timer structure(s) to the DB:
– In the new global DB, add a new static tag using data type IEC_Timer.
– In the "Retain" column, check the box so that this structure will be retentive.
– Repeat this process to create structures for all the timers that you want to store in this
DB. You can either place each timer structure in a unique global DB, or you can place
multiple timer structures into the same global DB. You can also place other static tags
besides timers in this global DB. Placing multiple timer structures into the same global
DB allows you to reduce your overall number of blocks.
– Rename the timer structures if desired.
3. Open the program block for editing where you want to place a retentive timer (OB, FC, or
FB).
4. Place the timer instruction at the desired location.
5. When the call options dialog appears, click the cancel button.
6. On the top of the new timer instruction, type the name (do not use the helper to browse)
of the global DB and timer structure that you created above (example:
"Data_block_3.Static_1").

S7-1200 Programmable controller


188 System Manual, 04/2012, A5E02486680-06
Basic instructions
7.2 Timers

Assign a multi-instance DB to store timer data as retentive data


This option only works if you place the timer in an FB.
This option depends upon whether the FB was created with "Optimized" block access
(allows symbolic access only). Once the FB has been created, you cannot change the
checkbox for "Optimized"; it must be chosen correctly when the FB is created, on the first
screen after selecting "Add new block" from the tree. To verify how the access attribute is
configured for an existing FB, right-click on the FB in the Project tree, choose properties, and
then choose attributes.
If the FB was created with the "Optimized" box checked (allows symbolic access only):
1. Open the FB for edit.
2. Place the timer instruction at the desired location in the FB.
3. When the Call options dialog appears, click on the Multi instance icon. The Multi Instance
option is only available if the instruction is being placed into an FB.
4. In the Call options dialog, rename the timer if desired.
5. Click OK. The timer instruction appears in the editor, and the IEC_TIMER structure
appears in the FB Interface under Static.
6. If necessary, open the FB interface editor (may have to click on the small arrow to
expand the view).
7. Under Static, locate the timer structure that was just created for you.
8. In the Retain column for this timer structure, change the selection to "Retain". Whenever
this FB is called later from another program block, an instance DB will be created with this
interface definition which contains the timer structure marked as retentive.
If the FB was created with the "Standard - compatible with S7-300/400" box checked (allows
symbolic and direct access):
1. Open the FB for edit.
2. Place the timer instruction at the desired location in the FB.
3. When the Call options dialog appears, click on the multi instance icon. The multi instance
option is only available if the instruction is being placed into an FB.
4. In the Call options dialog, rename the timer if desired.
5. Click OK. The timer instruction appears in the editor, and the IEC_TIMER structure
appears in the FB Interface under Static.
6. Open the block that will use this FB.
7. Place this FB at the desired location. Doing so results in the creation of an instance data
block for this FB.
8. Open the instance data block created when you placed the FB in the editor.
9. Under Static, locate the timer structure of interest. In the Retain column for this timer
structure, check the box to make this structure retentive.

S7-1200 Programmable controller


System Manual, 04/2012, A5E02486680-06 189
Basic instructions
7.3 Counters

7.3 Counters

Table 7- 22 Counter instructions

LAD / FBD SCL Description


"IEC_Counter_0_DB".CTU( Use the counter instructions to count internal program events and
CU:=_bool_in, external process events. Each counter uses a structure stored in a
R:=_bool_in, data block to maintain counter data. You assign the data block when
PV:=_int_in, the counter instruction is placed in the editor.
Q=>_bool_out,  CTU is a count-up counter
CV=>_int_out);
 CTD is a count-down counter
"IEC_Counter_0_DB".CTD(
 CTUD is a count-up-and-down counter
CD:=_bool_in,
LD:=_bool_in,
PV:=_int_in,
Q=>_bool_out,
CV=>_int_out);
"IEC_Counter_0_DB".CTUD(
CU:=_bool_in,
CD:=_bool_in,
R:=_bool_in,
LD:=_bool_in,
PV:=_int_in,
QU=>_bool_out,
QD=>_bool_out,
CV=>_int_out);
1 For LAD and FBD: Select the count value data type from the drop-down list below the instruction name.
2 STEP 7 automatically creates the DB when you insert the instruction.
3 In the SCL examples, "IEC_Counter_0_DB" is the name of the instance DB.

Table 7- 23 Data types for the parameters

Parameter Data type1 Description


CU, CD Bool Count up or count down, by one count
R (CTU, CTUD) Bool Reset count value to zero
LD (CTD, CTUD) Bool Load control for preset value
PV SInt, Int, DInt, USInt, UInt, UDInt Preset count value
Q, QU Bool True if CV >= PV
QD Bool True if CV <= 0
CV SInt, Int, DInt, USInt, UInt, UDInt Current count value
1 The numerical range of count values depends on the data type you select. If the count value is an unsigned integer
type, you can count down to zero or count up to the range limit. If the count value is a signed integer, you can count
down to the negative integer limit and count up to the positive integer limit.

S7-1200 Programmable controller


190 System Manual, 04/2012, A5E02486680-06
Basic instructions
7.3 Counters

The number of counters that you can use in your user program is limited only by the amount
of memory in the CPU. Counters use the following amount of memory:
● For SInt or USInt data types, the counter instruction uses 3 bytes.
● For Int or UInt data types, the counter instruction uses 6 bytes.
● For DInt or UDInt data types, the counter instruction uses 12 bytes.
These instructions use software counters whose maximum counting rate is limited by the
execution rate of the OB in which they are placed. The OB that the instructions are placed in
must be executed often enough to detect all transitions of the CU or CD inputs. For faster
counting operations, see the CTRL_HSC instruction (Page 337).

Note
When you place counter instructions in an FB, you can select the multi-instance DB option,
the counter structure names can be different with separate data structures, but the counter
data is contained in a single DB and does not require a separate DB for each counter. This
reduces the processing time and data storage necessary for the counters. There is no
interaction between the counter data structures in the shared multi-instance DB.

Operation of the counters

Table 7- 24 Operation of the CTU counter

Counter Operation
The CTU counter counts up by 1 when the value of parameter CU
changes from 0 to 1. The CTU timing diagram shows the operation for &8
an unsigned integer count value (where PV = 3).
 If the value of parameter CV (current count value) is greater than or 5
equal to the value of parameter PV (preset count value), then the 

counter output parameter Q = 1.

 If the value of the reset parameter R changes from 0 to 1, then the 
current count value is reset to 0. &9  

S7-1200 Programmable controller


System Manual, 04/2012, A5E02486680-06 191
Basic instructions
7.3 Counters

Table 7- 25 Operation of the CTD counter

Counter Operation
The CTD counter counts down by 1 when the value of
parameter CD changes from 0 to 1. The CTD timing diagram &'
shows the operation for an unsigned integer count value
/2$'
(where PV = 3).
 If the value of parameter CV (current count value) is equal  
 
to or less than 0, the counter output parameter Q = 1. 
&9
 If the value of parameter LOAD changes from 0 to 1, the  
value at parameter PV (preset value) is loaded to the
counter as the new CV (current count value). 4

Table 7- 26 Operation of the CTUD counter

Counter Operation
The CTUD counter counts up or
down by 1 on the 0 to 1 &8
transition of the count up (CU) or
count down (CD) inputs. The &'
CTUD timing diagram shows the
operation for an unsigned
integer count value (where PV = 5
4).
 If the value of parameter CV /2$'
is equal to or greater than the  
value of parameter PV, then   
the counter output parameter  

QU = 1. 
 If the value of parameter CV &9  
is less than or equal to zero,
then the counter output
48
parameter QD = 1.
 If the value of parameter
4'
LOAD changes from 0 to 1,
then the value at parameter
PV is loaded to the counter
as the new CV.
 If the value of the reset
parameter R is changes from
0 to 1, the current count
value is reset to 0.

Counter data retention after a RUN-STOP-RUN transition or a CPU power cycle


If a run mode session is ended with stop mode or a CPU power cycle and a new run mode
session is started, then the counter data stored in the previous run mode session is lost,
unless the counter data structure is specified as retentive (CTU, CTD, and CTUD counters).

S7-1200 Programmable controller


192 System Manual, 04/2012, A5E02486680-06
Basic instructions
7.3 Counters

When you accept the defaults in the call options dialog after you place a counter instruction
in the program editor, you are automatically assigned an instance DB which cannot be made
retentive. To make your counter data retentive, you must either use a global DB or a Multi-
instance DB.

Assign a global DB to store counter data as retentive data


This option works regardless of where the counter is placed (OB, FC, or FB).
1. Create a global DB:
– Double-click "Add new block" from the Project tree
– Click the data block (DB) icon
– For the Type, choose global DB
– If you want to be able to select individual items in this DB as retentive, be sure the
symbolic-access-only box is checked.
– Click OK
2. Add counter structure(s) to the DB:
– In the new global DB, add a new static tag using one of the counter data types. Be
sure to consider the Type you want to use for your Preset and Count values.

Counter Data Type Corresponding Type for the Preset and Count
Values
IEC_Counter INT
IEC_SCounter SINT
IEC_DCounter DINT
IEC_UCounter UINT
IEC_USCounter USINT
IEC_UDCounter UDINT
1. In the "Retain" column, check the box so that this structure will be retentive.
– Repeat this process to create structures for all the counters that you want to store in
this DB. You can either place each counter structure in a unique global DB, or you can
place multiple counter structures into the same global DB. You can also place other
static tags besides counters in this global DB. Placing multiple counter structures into
the same global DB allows you to reduce your overall number of blocks.
– Rename the counter structures if desired.
2. Open the program block for editing where you want to place a retentive counter (OB, FC,
or FB).
3. Place the counter instruction at the desired location.

S7-1200 Programmable controller


System Manual, 04/2012, A5E02486680-06 193
Basic instructions
7.3 Counters

4. When the call options dialog appears, click the cancel button. You should now see a new
counter instruction which has "???" both just above and just below the instruction name.
5. On the top of the new counter instruction, type the name (do not use the helper to
browse) of the global DB and counter structure that you created above (example:
"Data_block_3.Static_1"). This causes the corresponding preset and count value type to
be filled in (example: UInt for an IEC_UCounter structure).

Assign a multi-instance DB to store counter data as retentive data


This option only works if you place the counter in an FB.
This option depends upon whether the FB was created as symbolic access only. Once the
FB has been created, you cannot change the checkbox for "Symbolic access only"; it must
be chosen correctly when the FB is created, on the first screen after selecting "Add new
block" from the tree. To see how this box is configured for an existing FB, right-click on the
FB in the Project tree, choose properties, and then choose attributes.
If the FB was created with the "Symbolic access only" box checked:
1. Open the FB for edit.
2. Place the counter instruction at the desired location in the FB.
3. When the Call options dialog appears, click on the Multi instance icon. The Multi Instance
option is only available if the instruction is being placed into an FB.
4. In the Call options dialog, rename the counter if desired.
5. Click OK. The counter instruction appears in the editor with type INT for the preset and
count values, and the IEC_COUNTER structure appears in the FB Interface under Static.
6. If desired, change the type in the counter instruction from INT to one of the other types.
The counter structure will change correspondingly.

Type shown in counter instruction (for preset Corresponding structure Type shown in FB
and count values) interface
INT IEC_Counter
SINT IEC_SCounter
DINT IEC_DCounter
UINT IEC_UCounter
USINT IEC_USCounter
UDINT IEC_UDCounter
1. If necessary, open the FB interface editor (may have to click on the small arrow to
expand the view).
2. Under Static, locate the counter structure that was just created for you.
3. In the Retain column for this counter structure, change the selection to "Retain".
Whenever this FB is called later from another program block, an instance DB will be
created with this interface definition which contains the counter structure marked as
retentive.

S7-1200 Programmable controller


194 System Manual, 04/2012, A5E02486680-06
Basic instructions
7.3 Counters

If the FB was created with the "Symbolic access only" box not checked:
1. Open the FB for edit.
2. Place the counter instruction at the desired location in the FB.
3. When the Call options dialog appears, click on the multi instance icon. The multi instance
option is only available if the instruction is being placed into an FB.
4. In the Call options dialog, rename the counter if desired.
5. Click OK. The counter instruction appears in the editor with type INT for the preset and
count value, and the IEC_COUNTER structure appears in the FB Interface under Static.
6. If desired, change the type in the counter instruction from INT to one of the other types.
The counter structure will change correspondingly.

Type shown in counter instruction (for preset Corresponding structure Type shown in FB
and count values) interface
INT IEC_Counter
SINT IEC_SCounter
DINT IEC_DCounter
UINT IEC_UCounter
USINT IEC_USCounter
UDINT IEC_UDCounter
1. Open the block that will use this FB.
2. Place this FB at the desired location. Doing so results in the creation of an instance data
block for this FB.
3. Open the instance data block created when you placed the FB in the editor.
4. Under Static, locate the counter structure of interest. In the Retain column for this counter
structure, check the box to make this structure retentive.

S7-1200 Programmable controller


System Manual, 04/2012, A5E02486680-06 195

You might also like