1756-Controllogix Common Procedures Programming Guide
1756-Controllogix Common Procedures Programming Guide
1756-Controllogix Common Procedures Programming Guide
1756 ControlLogix, 1769 CompactLogix, 1789 SoftLogix, 1794 FlexLogix, PowerFlex 700S with DriveLogix
Programming Manual
Solid state equipment has operational characteristics differing from those of electromechanical equipment. Safety Guidelines for the Application, Installation and Maintenance of Solid State Controls (Publication SGI-1.1 available from your local Rockwell Automation sales office or online at http://www.ab.com/manuals/gi) describes some important differences between solid state equipment and hard-wired electromechanical devices. Because of this difference, and also because of the wide variety of uses for solid state equipment, all persons responsible for applying this equipment must satisfy themselves that each intended application of this equipment is acceptable. In no event will Rockwell Automation, Inc. be responsible or liable for indirect or consequential damages resulting from the use or application of this equipment. The examples and diagrams in this manual are included solely for illustrative purposes. Because of the many variables and requirements associated with any particular installation, Rockwell Automation, Inc. cannot assume responsibility or liability for actual use based on the examples and diagrams. No patent liability is assumed by Rockwell Automation, Inc. with respect to use of information, circuits, equipment, or software described in this manual. Reproduction of the contents of this manual, in whole or in part, without written permission of Rockwell Automation, Inc. is prohibited. Throughout this manual we use notes to make you aware of safety considerations.
WARNING
Identifies information about practices or circumstances that can cause an explosion in a hazardous environment, which may lead to personal injury or death, property damage, or economic loss.
IMPORTANT
Identifies information that is critical for successful application and understanding of the product. Identifies information about practices or circumstances that can lead to personal injury or death, property damage, or economic loss. Attentions help you: identify a hazard avoid a hazard recognize the consequence
ATTENTION
SHOCK HAZARD
Labels may be located on or inside the drive to alert people that dangerous voltage may be present.
BURN HAZARD
Labels may be located on or inside the drive to alert people that surfaces may be dangerous temperatures.
Summary of Changes
Introduction
This release of this document contains new and updated information. To find new and updated information, look for change bars, as shown next to this paragraph.
Updated Information
Section: Describe a User-Defined Data Type Prioritize Periodic and Event Tasks Choose the Trigger for an Event Task Export/Import Ladder Logic Develop a Fault Routine
15-8
Create a User-Defined Major Fault Minor Fault Codes Choose a Controller That Has Nonvolatile Memory
Estimate the free and used memory of a controller while still offline View the free and used memory of a controller while the controller is running
19-2 19-3
Summary of Changes
Preface
This manual guides the development of projects for Logix5000 controllers. It provides step-by-step procedures on how to perform the following tasks, which are common to all Logix5000 controllers: Organize Tasks, Programs, and Routines Organize Tags Design a Sequential Function Chart Program Routines using ladder logic, function block diagram, sequential function chart, or structured text programming languages Communicate with Other Controllers Communicate and Process ASCII Information Handle Faults The term Logix5000 controller refers to any controller that is based on the Logix5000 operating system, such as: CompactLogix controllers ControlLogix controllers DriveLogix controllers FlexLogix controllers SoftLogix5800 controllers This manual works together with user manuals for your specific type of controller. The user manuals cover tasks such as: Place and configure I/O Communicate with devices over various networks Maintain the battery
This manual is intended for those individuals who program applications that use Logix5000 controllers, such as: software engineers control engineers application engineers instrumentation technicians
Preface
Use this manual when you perform these actions: develop the basic code for your application modify an existing application perform isolated tests of your application As you integrate your application with the I/0 devices, controllers, and networks in your system: Refer to the user manual for your specific type of controller. Use this manual as a reference, when needed.
This manual is divided into the basic tasks that you perform while programming a Logix5000 controller. Each chapter covers a task. The tasks are organized in the sequence that you will typically perform them. As you use this manual, you will see some terms that are formatted differently from the rest of the text:
Identifies:
For example:
Means: Right-click on the item that is named User-Defined. If you want additional information, refer to name in the Glossary.
the actual name of an item that you Right-click User-Defined see on your screen or in an example an entry in the Glossary Type a name
If you are viewing the PDF file of the manual, click name to jump to the glossary entry. courier information that you must supply based on your application (a variable) Right-click name_of_program Press [Enter]. You must identify the specific program in your application. Typically, it is a name or variable that you have defined. Press the Enter key.
Table of Contents
Chapter 1 Getting Started
Using This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-1 Create a Project. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-1 Create a Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-2 Configure a Project . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-3 Explore a Project. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-4 Controller Organizer . . . . . . . . . . . . . . . . . . . . . . . . . . 1-6 Create Routines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-7 Define a Routine for Each Section of Your Machine or Process 1-7 Identify the Programming Languages That Are Installed. 1-7 Choose a Programming Language for Each Section . . . . 1-8 Divide Each Routine Into More Meaningful Increments . 1-9 Create a Routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-10 Open a Routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-11 Verify a Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-12 Save a Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-12 Configure a Communication Driver . . . . . . . . . . . . . . . . . . 1-13 Download a Project to the Controller . . . . . . . . . . . . . . . . . 1-14 Select a Mode for the Controller . . . . . . . . . . . . . . . . . . . . 1-16 Manually Clear a Major Fault . . . . . . . . . . . . . . . . . . . . . . . 1-17 Configure the Execution of a Task . . . . . . . . . . . . . . . . . . . 1-18 Configure a Task . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-19 Create Multiple Programs . . . . . . . . . . . . . . . . . . . . . . . . . 1-20 Create a Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-20 Configure a Program . . . . . . . . . . . . . . . . . . . . . . . . . . 1-21 Access Status Information . . . . . . . . . . . . . . . . . . . . . . . . . 1-22 Monitor Status Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-22 Get and Set System Data . . . . . . . . . . . . . . . . . . . . . . . 1-23 Adjust the System Overhead Time Slice . . . . . . . . . . . . . . . 1-26 Adjust the System Overhead Time Slice . . . . . . . . . . . . 1-28 View Scan Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-29 View Task Scan Time. . . . . . . . . . . . . . . . . . . . . . . . . . 1-29 View Program Scan Time . . . . . . . . . . . . . . . . . . . . . . . 1-30 Adjust the Watchdog Time . . . . . . . . . . . . . . . . . . . . . . . . 1-31 Adjust the Watchdog Timer for a Task . . . . . . . . . . . . . 1-31
Table of Contents
ii
Table of Contents
iii
How an I/O Module Triggers an Event Task . . . . . . . Make Sure Your Module Can Trigger an Event Task . Checklist for an Input Event Task . . . . . . . . . . . . . . . Estimate Throughput . . . . . . . . . . . . . . . . . . . . . . . . Estimate Throughput . . . . . . . . . . . . . . . . . . . . . . . . Additional Considerations. . . . . . . . . . . . . . . . . . . . . Using the Motion Group Trigger . . . . . . . . . . . . . . . . . . Checklist for a Motion Group Task . . . . . . . . . . . . . . Using the Axis Registration Trigger . . . . . . . . . . . . . . . . Checklist for an Axis Registration Task . . . . . . . . . . . Using the Axis Watch Trigger . . . . . . . . . . . . . . . . . . . . Checklist for an Axis Watch Task . . . . . . . . . . . . . . . Using the Consumed Tag Trigger. . . . . . . . . . . . . . . . . . Maintain the Integrity of Data . . . . . . . . . . . . . . . . . . Synchronize Multiple Controllers . . . . . . . . . . . . . . . Checklist for the Producer Controller . . . . . . . . . . . . Checklist for the Consumer Controller . . . . . . . . . . . Producer Controller . . . . . . . . . . . . . . . . . . . . . . . . . Consumer Controller . . . . . . . . . . . . . . . . . . . . . . . . Using the EVENT Instruction Trigger . . . . . . . . . . . . . . . Programmatically Determine if an EVENT Instruction Triggered a Task . . . . . . . . . . . . . . . . . . . . . . . . . . . Checklist for an EVENT Instruction Task . . . . . . . . . . Create a Task . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Create an Event Task . . . . . . . . . . . . . . . . . . . . . . . . Create a Periodic Task . . . . . . . . . . . . . . . . . . . . . . . Define a Timeout Value for an Event Task . . . . . . . . . . . Assign a Timeout Value to an Event Task . . . . . . . . . Programmatically Configure a Timeout . . . . . . . . . . . Programmatically Determine if a Timeout Occurs . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4-22 4-25 4-26 4-28 4-30 4-31 4-32 4-33 4-34 4-35 4-38 4-39 4-42 4-44 4-45 4-46 4-47 4-48 4-49 4-50 4-51 4-51 4-53 4-53 4-54 4-55 4-55 4-56 4-57
Table of Contents
iv
Wire to a Previous Step . . . . . . . . . . . . . . . . . . . . Add Actions for Each Step . . . . . . . . . . . . . . . . . . . . . How Do You Want to Use the Action? . . . . . . . . . Use a Non-Boolean Action . . . . . . . . . . . . . . . . . . Use a Boolean Action. . . . . . . . . . . . . . . . . . . . . . SFC_ACTION Structure. . . . . . . . . . . . . . . . . . . . . Describe Each Action in Pseudocode . . . . . . . . . . . . . Choose a Qualifier for an Action . . . . . . . . . . . . . . . . Define the Transition Conditions . . . . . . . . . . . . . . . . Transition Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . How Do You Want to Program the Transition? . . . Use a BOOL Expression . . . . . . . . . . . . . . . . . . . . Call a Subroutine . . . . . . . . . . . . . . . . . . . . . . . . . Transition After a Specified Time . . . . . . . . . . . . . . . . Turn Off a Device at the End of a Step . . . . . . . . . . . Choose a Last Scan Option. . . . . . . . . . . . . . . . . . Use the Dont Scan Option . . . . . . . . . . . . . . . . . . Use the Programmatic Reset Option . . . . . . . . . . . Use the Automatic Reset Option . . . . . . . . . . . . . . Keep Something On From Step-to-Step . . . . . . . . . . . How Do You Want to Control the Device? . . . . . . Use a Simultaneous Branch . . . . . . . . . . . . . . . . . Store and Reset an Action. . . . . . . . . . . . . . . . . . . Use One Large Step . . . . . . . . . . . . . . . . . . . . . . . End the SFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . At the End of the SFC, What Do You Want to Do?. Use a Stop Element . . . . . . . . . . . . . . . . . . . . . . . Restart (Reset) the SFC . . . . . . . . . . . . . . . . . . . . . SFC_STOP Structure . . . . . . . . . . . . . . . . . . . . . . . Nest an SFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pass Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . Configure When to Return to the OS/JSR . . . . . . . . . . Pause or Reset an SFC . . . . . . . . . . . . . . . . . . . . . . . . Execution Diagrams . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5-17 5-18 5-18 5-18 5-20 5-20 5-21 5-23 5-24 5-26 5-26 5-26 5-27 5-28 5-32 5-32 5-34 5-35 5-38 5-40 5-40 5-41 5-42 5-44 5-45 5-45 5-45 5-46 5-47 5-49 5-50 5-50 5-51 5-51
Table of Contents
Create a Selection Branch . . . . . . . . . . . . . . . . Start a Selection Branch . . . . . . . . . . . . . . . End a Selection Branch . . . . . . . . . . . . . . . Set the Priorities of a Selection Branch . . . . . . . Return to a Previous Step . . . . . . . . . . . . . . . . Connect a Wire to the Step. . . . . . . . . . . . . Hide a Wire. . . . . . . . . . . . . . . . . . . . . . . . Show a Hidden Wire . . . . . . . . . . . . . . . . . Rename a Step . . . . . . . . . . . . . . . . . . . . . . . . Configure a Step . . . . . . . . . . . . . . . . . . . . . . . Assign the Preset Time for a Step . . . . . . . . Configure Alarms for a Step . . . . . . . . . . . . Use an Expression to Calculate a Time . . . . Rename a Transition . . . . . . . . . . . . . . . . . . . . Program a Transition . . . . . . . . . . . . . . . . . . . . Enter a BOOL Expression. . . . . . . . . . . . . . Call a Subroutine . . . . . . . . . . . . . . . . . . . . Add an Action. . . . . . . . . . . . . . . . . . . . . . . . . Rename an Action. . . . . . . . . . . . . . . . . . . . . . Configure an Action . . . . . . . . . . . . . . . . . . . . Change the Qualifier of an Action. . . . . . . . Calculate a Preset Time at Runtime . . . . . . . Mark an Action as a Boolean Action . . . . . . Program an Action . . . . . . . . . . . . . . . . . . . . . Enter Structured Text . . . . . . . . . . . . . . . . . Call a Subroutine . . . . . . . . . . . . . . . . . . . . Assign the Execution Order of Actions . . . . . . . Document the SFC . . . . . . . . . . . . . . . . . . . . . Add Structured Text Comments . . . . . . . . . Add a Tag Description . . . . . . . . . . . . . . . . Add a Text Box . . . . . . . . . . . . . . . . . . . . . Show or Hide Text Boxes or Tag Descriptions . Show or Hide Text Boxes or Descriptions. . Hide an Individual Tag Description . . . . . . Configure the Execution of the SFC . . . . . . . . . Verify the Routine . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6-6 6-6 6-7 6-8 6-9 6-9 6-10 6-10 6-11 6-11 6-11 6-12 6-12 6-14 6-14 6-14 6-15 6-16 6-16 6-17 6-17 6-18 6-19 6-19 6-19 6-21 6-22 6-23 6-23 6-24 6-25 6-26 6-26 6-27 6-28 6-29
Table of Contents
vi
Use logical operators . . . . . . . . . . Use bitwise operators. . . . . . . . . . Determine the order of execution. Instructions. . . . . . . . . . . . . . . . . . . . Constructs. . . . . . . . . . . . . . . . . . . . . IF...THEN . . . . . . . . . . . . . . . . . . . . . CASE...OF . . . . . . . . . . . . . . . . . . . . . FORDO. . . . . . . . . . . . . . . . . . . . . WHILEDO. . . . . . . . . . . . . . . . . . . REPEATUNTIL . . . . . . . . . . . . . . . . Comments . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
7-9 7-10 7-10 7-11 7-12 7-13 7-16 7-19 7-22 7-25 7-28
Table of Contents
vii
Choose the Function Block Elements . . . . . . . . . . . . . . . . Choose a Tag Name for an Element. . . . . . . . . . . . . . . . . Define the Order of Execution. . . . . . . . . . . . . . . . . . . . . Data Latching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Order of Execution . . . . . . . . . . . . . . . . . . . . . . . . . . Resolve a Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resolve Data Flow Between Two Blocks . . . . . . . . . . Create a One Scan Delay . . . . . . . . . . . . . . . . . . . . . . Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Identify any Connectors . . . . . . . . . . . . . . . . . . . . . . . . . Define Program/Operator Control . . . . . . . . . . . . . . . . . . Add a Sheet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Add a Function Block Element . . . . . . . . . . . . . . . . . . . . Connect Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Show or Hide a Pin . . . . . . . . . . . . . . . . . . . . . . . . . . Wire Elements Together . . . . . . . . . . . . . . . . . . . . . . . Mark a Wire with the Assume Data Available Indicator Assign a Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Create and Assign a New Tag. . . . . . . . . . . . . . . . . . . Rename the Tag of a Function Block . . . . . . . . . . . . . Assign an Existing Tag . . . . . . . . . . . . . . . . . . . . . . . . Assign an Immediate Value (Constant) . . . . . . . . . . . . . . . Use an IREF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Enter a Value in the Tag of a Block . . . . . . . . . . . . . . Connect Blocks with an OCON and ICON . . . . . . . . . . . . Add an OCON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Add an ICON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verify the Routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
9-3 9-4 9-5 9-5 9-7 9-8 9-11 9-12 9-12 9-13 9-14 9-18 9-18 9-20 9-20 9-21 9-21 9-22 9-22 9-23 9-23 9-24 9-24 9-24 9-25 9-25 9-25 9-26
Table of Contents
viii
Message Queue . . . . . . . . . . . . . . . . . . . . . Cache List . . . . . . . . . . . . . . . . . . . . . . . . . Unconnected Buffers . . . . . . . . . . . . . . . . . Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . Get or Set the Number of Unconnected Buffers Get the Number of Unconnected Buffers . . Set the Number of Unconnected Buffers . . . Convert Between INTs and DINTs . . . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
Table of Contents
ix
Check Force Status . . . . . . . . . . . . . . . . . . . . . Online Toolbar . . . . . . . . . . . . . . . . . . . . . FORCE LED . . . . . . . . . . . . . . . . . . . . . . . . GSV Instruction . . . . . . . . . . . . . . . . . . . . . What to Force . . . . . . . . . . . . . . . . . . . . . . . . . When to Use an I/O Force . . . . . . . . . . . . . . . Force an Input Value . . . . . . . . . . . . . . . . . Force an Output Value. . . . . . . . . . . . . . . . Add an I/O Force . . . . . . . . . . . . . . . . . . . . . . When to Use Step Through . . . . . . . . . . . . . . . Step Through a Transition or a Force of a Path. When to Use an SFC Force . . . . . . . . . . . . . . . Force a Transition . . . . . . . . . . . . . . . . . . . Force a Simultaneous Path . . . . . . . . . . . . . Add an SFC Force . . . . . . . . . . . . . . . . . . . . . . Remove or Disable Forces . . . . . . . . . . . . . . . . Remove an Individual Force. . . . . . . . . . . . Disable All I/O Forces . . . . . . . . . . . . . . . . Remove All I/O Forces. . . . . . . . . . . . . . . . Disable All SFC Forces . . . . . . . . . . . . . . . . Remove All SFC Forces . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. 14-4 . 14-4 . 14-5 . 14-5 . 14-6 . 14-6 . 14-7 . 14-7 . 14-8 . 14-9 . 14-9 . 14-9 . 14-9 14-11 14-12 14-13 14-13 14-14 14-14 14-14 14-14
Table of Contents
. . 17-19 . . 17-20
Table of Contents
xi
Use RSI Security Server to Protect a Project . . . . . . . . . . . Install RSI Security Server Software . . . . . . . . . . . . . . . Set Up DCOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Enable Security Server for RSLogix 5000 Software . . . . Import the RSLogix5000Security.bak File . . . . . . . . . . . Define the Global Actions for Your Users . . . . . . . . . . Define the Project Actions for Your Users . . . . . . . . . . Add Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Add User Groups. . . . . . . . . . . . . . . . . . . . . . . . . . . . Assign Global Access to RSLogix 5000 Software. . . . . . Assign Project Actions for New RSLogix 5000 Projects . Secure an RSLogix 5000 Project . . . . . . . . . . . . . . . . . Assign Access to an RSLogix 5000 Project . . . . . . . . . . Refresh RSLogix 5000 Software, If Needed . . . . . . . . .
18-13 18-13 18-14 18-14 18-15 18-16 18-17 18-20 18-20 18-21 18-22 18-23 18-24 18-25
Table of Contents
xii
Configure the Message . . . . . . . . . . . . . . . . . . . . . . . . B-10 Step to the Next Controller . . . . . . . . . . . . . . . . . . . . . B-11 Restart the Sequence . . . . . . . . . . . . . . . . . . . . . . . . . B-11
Chapter
Getting Started
This chapter provides preliminary information to help you get started with a project for Logix5000 controller.
For this information or procedure Create a Project Explore a Project Create Routines Verify a Project Save a Project Configure a Communication Driver Download a Project to the Controller Select a Mode for the Controller Manually Clear a Major Fault Configure the Execution of a Task Create Multiple Programs Access Status Information Adjust the System Overhead Time Slice View Scan Time Adjust the Watchdog Time See this page: 1-1 1-4 1-7 1-12 1-12 1-13 1-14 1-16 1-17 1-18 1-20 1-22 1-26 1-29 1-31
Create a Project
To configure and program a Logix5000 controller, you use RSLogix 5000 software to create and manage a project for the controller.
Definition: The file on your workstation (or server) that stores the logic, configuration, data, and documentation for a controller. The project file has an .ACD extension. When you create a project file, the file name is the name of the controller. The controller name is independent of the project file name. If you save a current project file as another name, the controller name is unchanged. If the name of the controller is different than the name of the project file, the title bar of the RSLogix 5000 software displays both names.
Term: project
1-2
Getting Started
Create a Project
1. Start the RSLogix 5000 software. 2. From the File menu, select New.
3. 4.
5. 6.
7. 8. 9.
42194
3. Select the type of controller. 4. Choose the major revision of firmware for this controller.
Names: only alphabetic characters (A-Z or a-z), numeric characters (0-9), and underscores (_) must start with an alphabetic character or an underscore no more than 40 characters no consecutive or trailing underscore characters (_) not case sensitive
5. Type a name for the controller. 6. Type a description of the operations that the controller performs (optional). 7. Select the type of chassis (number of slots) that contains the controller (not applicable to some controllers). 8. Select or type the slot number where the controller is installed (not applicable to some controllers). 9. To store the file in a different folder (other than the default Create In path), click Browse and select a folder. 10. Choose
Getting Started
1-3
Configure a Project
To change the configuration of the controller, such as name, chassis size, or slot number, use the Controller Properties dialog box.
1.
42627
1-4
Getting Started
Explore a Project
Legend default (required) component optional component project controller tags (global data)
power-up handler controller fault handler task task task program program program program tags (local data)
fault routine
Getting Started
1-5
Subroutine
1-6
Getting Started
Controller Organizer
In RSLogix 5000 software, the controller organizer provides a graphical overview of a project. When you create a project, RSLogix5000 software automatically creates a default task, program, and routine.
When you create a project, the name of the project is the same as the name of the controller. If you rename the project or controller, both names are shown. controller organizer
To close a folder and hide its contents (collapse), do one of the following: Double-click the folder. Select the folder and press the [] key. Click the sign.
To open a folder and display its contents (expand), do one of the following: Double-click the folder. Select the folder and press the [] key. Click the + sign.
Getting Started
1-7
Create Routines
1-8
Getting Started
In general, if a section of your code represents: continuous or parallel execution of multiple operations (not sequenced) boolean or bit-based operations complex logical operations message and communication processing machine interlocking operations that service or maintenance personnel may have to interpret in order to troubleshoot the machine or process. continuous process and drive control loop control calculations in circuit flow high-level management of multiple operations repetitive sequences of operations batch process motion control using structured text state machine operations complex mathematical operations specialized array or table loop processing ASCII string handling or protocol processing
structured text
Getting Started
1-9
Example: To continuously execute several complex boolean operations create a separate routine for each operation. To control 4 valves, where each valve requires feedback that it is in its commanded position make a separate sheet for each valve.
sheet
Within the FBD routine, make a sheet for each functional loop for a device (motor, valve, etc.).
To perform the following sequence: 1. Fill a tank. 2. Mix the ingredients in the tank. 3. Empty the tank make each section (fill, mix, empty) a separate step.
step step
1-10
Getting Started
Create a Routine
Each program requires at least one routine. Use a routine to execute your logic in a specific programming language.
1.
1. In the controller organizer, right-click the program that will execute the routine and choose New Routine.
2.
3.
2. In the Name text box, type a name for the routine. 3. From the Type list, choose the programming language for the routine 4. Choose
Getting Started
1-11
Open a Routine
To open a folder and show its contents, either: Double-click the folder. Click the + sign.
To open a routine, double-click the routine. If a routine is grayed-out, you cannot open the routine. source protection The developer of the routine may have assigned a source key to the routine. The source key limits access to the routine. If the controller organizer lists source protection for a routine, then a source key is assigned to the routine. For this routine This is the protection status. If: Then:
Source Not Available To open the routine, your computer requires the source key for the routine. Source Not Available (Viewable) Source Available Source Available (Viewable) You can only open and view the routine. You cannot make any changes or copy any of contents of the routine. You have full access to the routine. You have full access to the routine.
IMPORTANT
If the source of a routine is unavailable, do not export the project. An export file (.L5K) contains only routines where the source code is available. If you export a project where the source code is not available for all routines, you will not be able to restore the entire project.
TIP
If a routine fails to open, your computer may not have the required programming language installed. To determine which programming languages are installed on your computer, choose Help ! About RSLogix 5000. To add a programming language, see ControlLogix Selection Guide, publication 1756-SG001
1-12
Getting Started
Verify a Project
As you program your project, periodically verify your work: 1. In the top-most toolbar of the RSLogix 5000 window, click 2. If any errors are listed at the bottom of the window: a. To go to the first error or warning, press [F4]. b. Correct the error according to the description in the Results window. c. Go to step 1. 3. To close the Results window, press [Alt] + [1].
Save a Project
To: save your changes
As you create logic and make configuration changes, save the project.
Do this: From the File menu, select Save. 1. From the File menu, select Save As. 2. Type a name for the project file. Use underscores [ _ ] in place of spaces. 3. Click Save.
make a copy of the open project but keep the existing name of the controller
make a copy of the project and assign a different name to the controller
1. From the File menu, select Save As. 2. Type a name for the project file. Use underscores [ _ ] in place of spaces. 3. Click Save. 4. In the controller organizer, right-click Controller name_of_controller folder and select Properties. 5. Type a new name for the controller. 6. Click OK.
If you make changes to the project while online, save the project so that the offline project file matches the online project file:
If you want to: save online changes and data values save online changes but not online data values Do this: From the File menu, select Save. 1. From the Communications menu, select Go Offline. 2. From the File menu, select Save.
Getting Started
1-13
The RSLogix 5000 software requires a communication driver to communicate with a controller. You configure communication drivers using RSLinx software: 1. Start RSLinx software. 2. From the Communications menu, select Configure Drivers. 3. From the Available Driver Types drop-down list, select a driver:
1784-KT/KTX(D)/PKTX(D) 1784-PCMK 1784-KTC(X) 1784-PCC Ethernet devices DeviceNet Drivers (1784-PCD/PCIDS, 1770-KFD, SDNPT drivers)
4. Choose Add New. 5. If you want to assign a descriptive name to the driver, change the default name. 6. Choose OK. 7. Configure the driver:
For this driver: serial Do this: A. From the Comm Port drop-down list, select the serial port that the driver will use. B. From the Device drop-down list, select Logix 5550-Serial Port. C. Click Auto-Configure. ControlNet A. In the Station Name box, type a name that will identify the computer in the RSWho window. B. Select the interrupt value, memory address, and I/O base address. C. In the Net Address box, type the ControlNet node number that you want to assign to the computer. DH+ A. From the Value drop-down list, select the type of interface card that the driver will use. B. In the Property list, select the next item. C. In the Value box, type or select the appropriate value. D. Repeat steps B. and C. for the remaining properties. Ethernet For each Ethernet device on this network with which you want to communicate (e.g., each 1756-ENB module or PLC-5E controller), add a map entry: A. In the Host Name column, type the IP address or host name of the Ethernet device. B. To communicate with another Ethernet device on this network, choose Add New and go to Step A.
1-14
Getting Started
Use this procedure to download a project to the controller so you can execute its logic. When you download a project, you lose the project and data that is currently in the controller, if any. If the revision of the controller does not match the revision of the project, you are prompted to update the firmware of the controller. RSLogix 5000 software lets you update the firmware of the controller as part of the download sequence. When you download a project or update firmware, all active servo axes are turned off. Before you download a project or update firmware, make sure that this will not cause any unexpected movement of an axis.
ATTENTION
!
IMPORTANT
To update the firmware of a controller, first install a firmware upgrade kit. An upgrade kit ships on a supplemental CD along with RSLogix 5000 software. To download an upgrade kit, go to www.ab.com. Choose Product Support. Choose Firmware Updates.
1. Open the RSLogix 5000 project that you want to download. 2. From the Communications menu, choose Who Active. 3. Expand the network until you see the controller.
To expand a network one level, do one of the following: Double-click the network. Select the network and press the key. Click the + sign.
Workstation
communication module
backplane
controller
Getting Started
1-15
7. Choose Download. The project downloads to the controller and RSLogix 5000 software goes online. 8. Skip the rest of this procedure. 9. Choose Update Firmware.
10.
11.
43056
10. Select the required revision for the controller. 11. Choose Update. A dialog box asks you to confirm the update. 12. To update the controller, choose Yes. The following events occur: The firmware of the controller is updated. The project downloads to the controller. RSLogix 5000 software goes online.
1-16
Getting Started
To change the operating mode of the controller, use the keyswitch on the front of the controller: IMPORTANT All modes send and receive data in response to a message from another controller. All modes produce and consume tags.
keyswitch
Do you need to schedule a ControlNet network? No Do you want to execute the logic in the controller? Yes Do you want the logic to control the output devices? No B
Yes
Do you want to prevent RSLogix 5000 software from changing the mode?
No
Turn the keyswitch to PROG and then to REM (Remote Program mode). Turn the keyswitch to PROG (Program mode). Turn the keyswitch to RUN and then to REM (Remote Run mode). Turn the keyswitch to RUN (Run mode).
Yes No Do you want to prevent RSLogix 5000 software from: changing the mode downloading a project performing online edits No
Yes
Yes
A 1. Turn the keyswitch to REM. 2. Go online with RSLogix 5000 software and choose Test mode.
A Outputs revert to their configured state for Program mode. B This includes Message (MSG) instructions.
You can also use RSLogix 5000 software to change the mode of the controller: 1. On the front of the controller, turn the keyswitch to REM. 2. Go online with the controller.
3.
Getting Started
1-17
If the controller enters the faulted mode, a major fault occurred and the controller stopped executing the logic.
43057
1.
2. Use the information in the Recent faults list to correct the cause of the fault. Refer to "Major Fault Codes" on page 15-15. 3. Click the Clear Majors button.
TIP
You can also clear a major fault by using the keyswitch on the controller. Turn the keyswitch to Prog, then to Run, and then back to Prog.
1-18
Getting Started
When you create a new project, RSLogix 5000 software automatically creates an initial task that is configured to run all the time (continuous task). When the task completes a full scan, it restarts immediately.
Figure 1.1 Execution of the Continuous Task
subroutine
main routine
If you are familiar with a DCS application or plan to program your system using a function block diagram, you can configure the task to execute at a specific period (periodic task). This lets you update your function block diagram at a period that you specify. Whenever the time period for the task expires, the task executes one time. You configure the period from 1 ms to 2000 s. The default is 10 ms. If you use a periodic task in addition to a continuous task, the periodic task interrupts the execution of the continuous task. When the periodic task is done, control returns to the continuous task. For more information on using multiple tasks, see chapter 4.
Figure 1.2 Example of a Periodic Task That Executes Every 10 ms.
Legend: Task executes.
Getting Started
1-19
Configure a Task
To configure the execution of a task, use the properties dialog box for the task.
1.
1. In the controller organizer, right-click the task that you want to configure and choose Properties. 2. Click the Configuration tab.
3. 4.
3. From the Type list, choose type of execution for the task. Only one continuous task is permitted. 4. If you chose Periodic in step 3, then type the rate at which you want the task to execute. 5. Choose
1-20
Getting Started
A Logix5000 controller lets you divide your application into multiple programs, each with its own data. There is no need to manage conflicting tag names between programs. This makes it easier to re-use both code and tag names in multiple programs.
controller tags (global data)
Data at the program scope is isolated from other programs: Routines cannot access data that is at the program scope of another program. You can re-use the tag name of a program-scoped tag in multiple programs. For example, both Program_A and Program_B can have a program tag named Tag_4.
Create a Program
Each task requires at least one program. You can create multiple programs for a task.
1.
1. In the controller organizer, right-click the task that will execute the program and choose New Program.
Getting Started
1-21
2.
2. In the Name text box, type a name for the program. 3. Choose
Configure a Program
Each program requires a main routine. The main routine executes whenever the program executes.
1.
1. In the controller organizer, right-click the program that you want to configure and choose Properties. 2. Click the Configuration tab.
3.
3. From the Main list, choose the name of the routine that you want to execute as the main routine. 4. Choose
Publication 1756-PM001G-EN-P - March 2004
1-22
Getting Started
Logix5000 controllers do not have a status file, as in the PLC-5 controller. To access status information, you use a keyword or access a specific object.
See: Monitor Status Flags on page 1-22 Get and Set System Data on page 1-23
If you want to: use specific key words in your logic to monitor specific events get or set system values
Getting Started
1-23
ATTENTION
Use the SSV instruction carefully. Making changes to objects can cause unexpected controller operation or injury to personnel.
To get or set a system value: 1. Open the RSLogix 5000 project. 2. From the Help menu, select Contents. 3. Click the Index tab. 4. Type gsv/ssv objects and click Display.
1-24
Getting Started
6. In the list of attributes for the object, identify the attribute that you want to access. 7. Create a tag for the value of the attribute:
If the data type of the attribute is: one element (e.g., DINT) more than one element (e.g., DINT[7] ) Then: Create a tag for the attribute. A. Create a user-defined data type that matches the organization of data that is used by the attribute. B. Create a tag for the attribute and use the data type from Step A..
Getting Started
1-25
The following examples gets the current date and time. Get a system value
EXAMPLE
At the first scan, gets the DateTime attribute of the WALLCLOCKTIME object and stores it in the wall_clock tag, which is based on a user-defined data type.
42370
For more information, see the Logix5000 Controllers General Instruction Set Reference Manual, publication 1756-RM003.
1-26
Getting Started
A Logix5000 controller communicates with a other devices (I/O modules, controllers, HMI terminals, etc.) at either a specified rate (scheduled) or when there is processing time available to service the communication (unscheduled).
Is: Scheduled Communication Unscheduled Communication
This type of communication: update I/O data (not including block-transfers) produce or consume tags communicate with programming devices (e.g., RSLogix 5000 software) communicate with HMI devices execute Message (MSG) instructions, including block-transfers respond to messages from other controllers synchronize the secondary controller of a redundant system re-establish and monitor I/O connections (such as Removal and Insertion Under Power conditions); this does not include normal I/O updates that occur during the execution of logic. bridge communications from the serial port of the controller to other ControlLogix devices via the ControlLogix backplane
Unscheduled communication is any communication that you do not configure through the I/O configuration folder of the project. The system overhead time slice specifies the percentage of time (excluding the time for periodic or event tasks) that the controller devotes to unscheduled communication. The controller performs unscheduled communication for up to 1 ms at a time and then resumes the continuous task. The following table shows the ratio between the continuos task and unscheduled communication at various system overhead time slices:
At this time slice: 10% 20% 33% 50% The continuous tasks runs for: 9 ms 4 ms 2 ms 1 ms And unscheduled communication occurs for up to: 1 ms 1 ms 1 ms 1 ms
Getting Started
1-27
At a system overhead time slice to 20 %, unscheduled communication occurs every 4 ms of continuous task time for 1 ms.
Legend: Task executes. Task is interrupted (suspended).
1 ms
1 ms
1 ms
1 ms
4 ms
4 ms
4 ms
If you increase the system overhead time slice to 33 %, unscheduled communication occurs every 2 ms of continuous task time for 1 ms.
1 ms unscheduled communication 2 ms continuous task 2 ms 2 ms 2 ms 2 ms 2 ms 2 ms 2 ms 2 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms
If the controller contains only a periodic task or tasks, the system overhead time slice value has no effect. Unscheduled communication occurs whenever a periodic task is not running. For example, if your task takes 50 ms to execute and you configure its update rate to 80 ms, the controller has 30 ms out of every 80 ms for unscheduled communication.
50 ms periodic task 30 ms unscheduled communication 30 ms 30 ms 50 ms 50 ms
1-28
Getting Started
1.
1. On the Online toolbar, click controller properties button. 2. Click the Advanced tab.
2.
3.
Getting Started
1-29
A Logix5000 controller provides two types of scan times. Each serves a different purpose:
Then: View Task Scan Time Notes: The scan time of a task includes the time that the task is interrupted to service communications or other tasks. The scan time of a program includes only the execution time of the logic. It does not include any interrupts.
1.
1. In the controller organizer, right-click the task whose scan time you want to view and choose Properties. 2. Click the Monitor tab.
maximum scan time of the program scan time scan of the time last ofexecution the last execution of this program of this
1-30
Getting Started
1.
1. In the controller organizer, right-click the program whose scan time you want to view and choose Properties. 2. Click the Configuration tab.
maximum scan time of the program scan time scan of the time last ofexecution the last execution of this program of this
Getting Started
1-31
Each task contains a watchdog timer that specifies how long a task can run before triggering a major fault. If the watchdog timer reaches a configurable preset, a major fault occurs. Depending on the controller fault handler, the controller might shut down.
ATTENTION
A watchdog time can range from 1 ms to 2,000,000 ms (2000 seconds). The default is 500 ms. The watchdog timer begins to time when the task is initiated and stops when all the programs within the task have executed. If the task takes longer than the watchdog time, a major fault occurs. (The time includes interruptions by other tasks.) A watchdog time-out fault (major fault) also occurs if a task is triggered again while it is executing (task overlap). This can happen if a lower-priority task is interrupted by a higher-priority task, delaying completion of the lower-priority task. You can use the controller fault handler to clear a watchdog fault. If the same watchdog fault occurs a second time during the same logic scan, the controller enters faulted mode, regardless of whether the controller fault handler clears the watchdog fault.
1.
1. In the controller organizer, right-click the task and choose Properties. 2. Click the Configuration tab.
Publication 1756-PM001G-EN-P - March 2004
1-32
Getting Started
3.
Chapter
This chapter provides basic information on how a Logix5000 controller communicates with I/O modules.
For this information or procedure Configure an I/O Module Address I/O Data Buffer I/O See this page: 2-1 2-7 2-8
To communicate with an I/O module in your system, you add the module to the I/O Configuration folder of the controller.
When you add the module, you also define a specific configuration for the module. While the configuration options vary from module to module, there are some common options that you typically configure: Requested Packet Interval Communication Format Electronic Keying
2-2
In Logix5000 controllers, I/O values update at a period that you configure via the I/O configuration folder of the project. The values update asynchronous to the execution of logic. At the specified interval, the controller updates a value independently from the execution of logic. Take care to ensure that data memory contains the appropriate values throughout a tasks execution. You can duplicate or buffer data at the beginning of the scan to provide reference values for your logic.
ATTENTION
Programs within a task access input and output data directly from controller-scoped memory. Logic within any task can modify controller-scoped data. Data and I/O values are asynchronous and can change during the course of a tasks execution. An input value referenced at the beginning of a tasks execution can be different when referenced later. To prevent an input value from changing during a scan, copy the value to another tag and use the data from there (buffer the values). To buffer your I/O values, see page 2-8.
2-3
Communication Format
The communication format that you choose determines the data structure for the tags that are associated with the module. Many I/O modules support different formats. Each format uses a different data structure. The communication format that you choose also determines: Direct or Rack-Optimized Connection Ownership
A direct connection is any connection that does not use the Rack Optimization Comm Format. rack-optimized connection For digital I/O modules, you can select rack-optimized communication. A rack-optimized connection consolidates connection usage between the controller and all the digital I/O modules in the chassis (or DIN rail). Rather than having individual, direct connections for each I/O module, there is one connection for the entire chassis (or DIN rail).
rack-optimized connection
2-4
Ownership
In a Logix5000 system, modules multicast data. This means that multiple devices can receive the same data at the same time from a single device. When you choose a communication format, you have to choose whether to establish an owner or listen-only relationship with the module.
owner controller The controller that creates the primary configuration and communication connection to a module. The owner controller writes configuration data and can establish a connection to the module.
An owner connection is any connection that does not include Listen-Only in its Comm Format.
listen-only connection
An I/O connection where another controller owns/provides the configuration data for the I/O module. A controller using a listen-only connection only monitors the module. It does not write configuration data and can only maintain a connection to the I/O module when the owner controller is actively controlling the I/O module.
listen-only connection
2-5
Use the following table to choose the type of ownership for a module:
If the module is an: input module And another controller: does not own the module owns the module maintain communication with the module if it loses communication with the other controller stop communication with the module if it loses communication with the other controller output module does not own the module owns the module And you want to: Then use this type of connection: owner (i.e., not listen-only) owner (i.e., not listen-only) Use the same configuration as the other owner controller. listen-only
There is a noted difference in controlling input modules versus controlling output modules.
Controlling: input modules This ownership: owner Description: An input module is configured by a controller that establishes a connection as an owner. This configuring controller is the first controller to establish an owner connection. Once an input module has been configured (and owned by a controller), other controllers can establish owner connections to that module. This allows additional owners to continue to receive multicast data if the original owner controller breaks its connection to the module. All other additional owners must have the identical configuration data and identical communications format that the original owner controller has, otherwise the connection attempt is rejected. listen-only Once an input module has been configured (and owned by a controller), other controllers can establish a listen-only connection to that module. These controllers can receive multicast data while another controller owns the module. If all owner controllers break their connections to the input module, all controllers with listen-only connections no longer receive multicast data. An output module is configured by a controller that establishes a connection as an owner. Only one owner connection is allowed for an output module. If another controller attempts to establish an owner connection, the connection attempt is rejected. Once an output module has been configured (and owned by one controller), other controllers can establish listen-only connections to that module. These controllers can receive multicast data while another controller owns the module. If the owner controller breaks its connection to the output module, all controllers with listen-only connections no longer receive multicast data.
output modules
owner
listen-only
2-6
Electronic Keying
ATTENTION Be careful when you disable electronic keying. If used incorrectly, this option can lead to personal injury or death, property damage, or economic loss.
When you configure a module, you specify the slot number for the module. However, it is possible to place a different module in that slot, either on purpose or accidently. Electronic keying lets you protect your system against the accidental placement of the wrong module in a slot. The keying option you choose determines how closely any module in a slot must match the configuration for that slot.
If: all information must match: type catalog number vendor major and minor revision number all information except the minor revision number no information must match Then select: Exact Match
2-7
I/O information is presented as a set of tags. Each tag uses a structure of data. The structure depends on the specific features of the I/O module. The name of the tags is based on the location of the I/O module in the system.
When you add a module to the I/O Configuration folder the software automatically creates controller-scoped tags for the module.
2-8
Buffer I/O
Buffer I/O
To buffer I/O, perform these actions: 1. On the rung before the logic for the function (s), copy or move the data from the required input tags to their corresponding buffer tags. 2. In the logic of the function (s), reference the buffer tags. 3. On the rung after the function (s), copy the data from the buffer tags to the corresponding output tags.
2-9
The following example copies inputs and outputs to the tags of a structure for a drill machine. Buffer I/O
EXAMPLE
The main routine of the program executes the following subroutines in this sequence.
The map_inputs routine copies the values of input devices to their corresponding tags that are used in the drill routine.
_1791_8AC:I.Data[0].0 drill[1].depth_limit
_1791_8AC:I.Data[0].4
drill[1].home_limit
The drill routine executes the logic for the drill machine.
drill[1].part_advance / drill[1].forward one_shots.0 ONS drill[1].depth_limit / drill[1].forward
drill[1].depth_limit drill[1].retract
drill[1].home_limit /
drill[1].retract
The map_outputs routine copies the values of output tags in the drill routine to their corresponding output devices.
drill[1].forward _1791_8AC:O.Data[0].0
drill[1].retract
_1791_8AC:O.Data[0].1
42369
2-10
The following example uses the CPS instruction to copy an array of data that represent the input devices of a DeviceNet network. Buffer I/O
EXAMPLE
Local:0:I.Data stores the input data for the DeviceNet network that is connected to the 1756-DNB module in slot 0. To synchronize the inputs with the application, the CPS instruction copies the input data to input_buffer. While the CPS instruction copies the data, no I/O updates can change the data. As the application executes, it uses for its inputs the input data in input_buffer.
CPS Synchronous Copy File Source Local:0:I.Data[0] Dest input_buffer[0] Length 20
42578
Chapter
Organize Tags
Use this chapter to organize the data for your Logix5000 controller.
For this information: Defining Tags Guidelines for Tags Create a Tag Create an Array Create a User-Defined Data Type Describe a User-Defined Data Type Address Tag Data Assign Alias Tags Assign an Indirect Address See page: 3-1 3-7 3-9 3-13 3-17 3-21 3-23 3-24 3-27
Defining Tags
Term: tag
With a Logix5000 controller, you use a tag (alphanumeric name) to address data (variables).
Definition: A text-based name for an area of the controllers memory where data is stored. Tags are the basic mechanism for allocating memory, referencing data from logic, and monitoring data. The minimum memory allocation for a tag is four bytes. When you create a tag that stores data that requires less than four bytes, the controller allocates four bytes, but the data only fills the part it needs.
The controller uses the tag name internally and doesnt need to cross-reference a physical address. In conventional PLCs, a physical address identifies each item of data. Addresses follow a fixed, numeric format that depend on the type of data, such as N7:8, F8:3. Symbols are required to make logic easier to interpret. In Logix5000 controllers, there is no fixed, numeric format. The tag name itself identifies the data. This lets you: organize your data to mirror your machinery document (through tag names) your application as you develop it
1 Publication 1756-PM001G-EN-P - March 2004
3-2
Organize Tags
EXAMPLE
Tags
When you create a tag, you assign the following properties to the tag: Tag Type Data Type Scope
Tag Type
The tag type defines how the tag operates within your project.
If you want the tag to: store a value or values for use by logic within the project represent another tag. send data to another controller receive data from another controller Then choose this type: Base Alias Produced Consumed
If you plan to use produced or consumed tags, you must follow additional guidelines as you organize your tags. Refer to "Communicate with Other Devices" on page 10-1.
Organize Tags
3-3
Data Type
Term: data type structure Definition: The data type defines the type of data that a tag stores, such as a bit, integer, floating-point value, string, etc. A data type that is a combination of other data types. A structure is formatted to create a unique data type that matches a specific need. Within a structure, each individual data type is called a member. Like tags, members have a name and data type. A Logix5000 controller contains a set of predefined structures (data types) for use with specific instructions such as timers, counters, function blocks, etc. You can create your own structures, called a user-defined data type.
The following table outlines the most common data types and when to use each.
Table 3.1 Data Types For: analog device in floating-point mode analog device in integer mode (for very fast sample rates) ASCII characters bit counter digital I/O point floating-point number integer (whole number) sequencer timer Select: REAL INT string BOOL COUNTER BOOL REAL DINT CONTROL TIMER
3-4
Organize Tags
The minimum memory allocation for a tag is 4 bytes. When you create a tag that stores data that requires less than four bytes, the controller allocates 4 bytes, but the data only fills the part it needs.
Data type Bool Sint Int Dint Real Bits 31 not used not used not used 16 15 8 7 1 0 0 or 1 -128 to +127 -32,768 to +32767 -2,147,483,648 to +2,147,483,647 -3.40282347E38 to -1.17549435E-38 (negative values) 0 -38 38 1.17549435E to 3.40282347E (positive values)
The COUNTER and TIMER data types are examples of commonly used structures.
COUNTER structure To collapse a structure and hide its members, click the sign. TIMER structure
members of running_seconds
42365
To copy data to a structure, use the COP instruction. See the Logix5000 Controllers General Instruction Set Reference Manual, publication 1756-RM003.
Organize Tags
3-5
Scope
When you create a tag, you define it as either a controller tag (global data) or a program tag for a specific program (local data).
project controller tags (global data)
A Logix5000 controller lets you divide your application into multiple programs, each with its own data. There is no need to manage conflicting tag names between programs. This makes it easier to re-use both code and tag names in multiple programs.
controller tags (global data)
Data at the program scope is isolated from other programs: Routines cannot access data that is at the program scope of another program. You can re-use the tag name of a program-scoped tag in multiple programs. For example, both Program_A and Program_B can have a program tag named Tag_4.
Publication 1756-PM001G-EN-P - March 2004
3-6
Organize Tags
Avoid using the same name for a both controller tag and a program tag. Within a program, you cannot reference a controller tag if a tag of the same name exists as a program tag for that program. Certain tags must be controller scope (controller tag).
If you want to use the tag: in more than one program in the project in a Message (MSG) instruction to produce or consume data to communicate with a PanelView terminal none of the above program scope (program tags) controller scope (controller tags) Then assign this scope:
Organize Tags
3-7
An array creates multiple instances of a data type under a common tag name. Arrays let you organize a block of tags that use the same data type and perform a similar function. You organize the data in 1, 2, or 3 dimensions to match what the data represents. For example, use a 2 dimension array to organize the data for a tank farm. Each element of the array represents a single tank. The location of the element within the array represents the geographic location of the tank. Important: Minimize the use of BOOL arrays. Many array instructions do not operate on BOOL arrays. This makes it more difficult to initialize and clear an array of BOOL data. Typically, use a BOOL array for the bit-level objects of a PanelView screen. Otherwise, use the individual bits of a DINT tag or an array of DINTs.
If you want multiple tags with the same name, define each tag at the program scope (program tags) for a different program. This lets you re-use both logic and tag names in multiple programs. Avoid using the same name for both a controller tag and a program tag. Within a program, you cannot reference a controller tag if a tag of the same name exists as a program tag for that program. Certain tags must be controller scope (controller tag). If you want to use the tag: in more than one program in the project in a Message (MSG) instruction to produce or consume data to communicate with a PanelView terminal none of the above program scope (program tags) controller scope (controller tags) Then assign this scope:
3-8
Organize Tags
Details: To increase the efficiency of your logic, minimize the use of SINT or INT data types. Whenever possible, use the DINT data type for integers. A Logix5000 controller typically compares or manipulates values as 32-bit values (DINTs or REALs). The controller typically converts a SINT or INT value to a DINT or REAL value before it uses the value. If the destination is a SINT or INT tag, the controller typically converts the value back to a SINT or INT value. The conversion to or from SINTs or INTs occurs automatically with no extra programming. But it takes extra execution time and memory.
5. Limit a tag name to 40 characters. Here are the rules for a tag name: only alphabetic characters (A-Z or a-z), numeric characters (0-9), and underscores (_) must start with an alphabetic character or an underscore no more than 40 characters no consecutive or trailing underscore characters (_) not case sensitive
Although tags are not case sensitive (upper case A is the same as lower case a), mixed case is easier to read. These tags are easier to read: Tank_1 Tank1 Than these tags: TANK_1 TANK1 tank_1 tank1
RSLogix 5000 software displays tags of the same scope in alphabetical order. To make it easier to monitor related tags, use similar starting characters for tags that you want to keep together.
Starting each tag for a tank with Tank keeps the tags together. Tag Name Tank_North Tank_South
Otherwise, the tags may end up separated from each other. Tag Name North_Tank South_Tank other tags that start with the letters o, p, q, etc.
Organize Tags
3-9
Create a Tag
IMPORTANT RSLogix 5000 software automatically creates tags when you: add an element to a sequential function chart (SFC) add a function block instruction to a function block diagram To create a tag, you have the following options: Create a Tag Using a Tags Window Create Tags Using Microsoft Excel Create a Tag as You Enter Your Logic (See the corresponding chapter for the programming language that you are using.)
2.
42350
3.
4.
5.
3-10
Organize Tags
42350
3.
4.
5.
3. Type a name for the tag. 4. Type the data type: 5. Type a description (optional).
Organize Tags
3-11
4.
5.
42361
4. Note the name of the export file (project_name-Tags). 5. Select the scope of tags to export. If you select Program Tags, select the program tags to export. 6. Click Export.
3-12
Organize Tags
2.
3.
4.
5.
4. Enter the name of the tag. 5. Enter the data type of the tag. 6. Repeat steps 2. to 5. for each additional tag. 7. Save and close the file. (Keep it as a .CSV format.)
Organize Tags
3-13
Create an Array
Term: array
A subscript (s) identifies each individual element within the array. A subscript starts at 0 and extends to the number of elements minus 1 (zero based).
To collapse an array and hide its elements, click the sign. elements of timer_presets
This array contains six elements of the DINT data type. six DINTs
42367
3-14
Organize Tags
EXAMPLE
Single dimension array In this example, a single timer instruction times the duration of several steps. Each step requires a different preset value. Because all the values are the same data type (DINTs) an array is used.
To collapse an array and hide its elements, click the sign. elements of timer_presets
This array contains six elements of the DINT data type. six DINTs
42367
Organize Tags
3-15
EXAMPLE
Two dimension array A drill machine can drill one to five holes in a book. The machine requires a value for the position of each hole from the leading edge of the book. To organize the values into configurations, a two dimension array is used. The first subscript indicates the hole to which the value corresponds and the second subscript indications how many holes will be drilled (one to five).
subscript of second dimension 0 0 1 subscript of 2 first dimension 3 4 5 1.5 2.5 8.0 1.25 5.5 9.75 1.25 3.5 7.5 9.75 1.25 3.5 5.5 7.5 9.75 1 2 3 4 5
Description
Position of first hole from leading edge of book Position of second hole from leading edge of book Position of third hole from leading edge of book Position of fourth hole from leading edge of book Position of fifth hole from leading edge of book
In the Tags window, the elements are in the order depicted below.
This array contains a two-dimensional grid of elements, six elements by six elements.
42367
The right-most dimension increments to its maximum value then starts over.
When the right-most dimension starts over, the dimension to the left increments by one.
3-16
Organize Tags
Create an Array
To create an array, you create a tag and assign dimensions to the data type: 1. From the Logic menu, select Edit Tags.
2.
42350
3.
4.
Organize Tags
3-17
User-defined data types (structures) let you organize your data to match your machine or process.
User-defined data type that stores a recipe In a system of several tanks, each tank can run a variety of recipes. Because the recipe requires a mix of data types (REAL, DINT, BOOL, etc.) a user-defined data type is used.
Name (of data type): TANK Member Name temp deadband step step_time preset mix Data Type REAL REAL DINT TIMER DINT[6] BOOL
An array that is based on this data type would look like this:
array of recipes
first recipe
42368
3-18
Organize Tags
EXAMPLE
User-defined data type that stores the data that is required to run a machine Because several drill stations require the following mix of data, a user-defined data type is created.
Name (of data type): DRILL_STATION Member Name part_advance hole_sequence type hole_position depth total_depth Data Type BOOL CONTROL DINT REAL REAL REAL
An array that is based on this data type would look like this:
array of drills
first drill
42583
Organize Tags
3-19
1.
3-20
Organize Tags
2. 3.
42196
4.
5.
6.
7.
2. Type a name for the data type. 3. Type a description (optional). 4. Type the name of the first member. 5. Specify the data type for the member. Limit any arrays to a single dimension. 6. To display the value (s) of the member in a different style (radix), select the style. 7. Type a description for the member (optional). 8. Click Apply. 9. More members?
If: Yes No Then: Repeat steps 4. to 8. Click OK.
Organize Tags
3-21
RSLogix 5000 software lets you automatically build descriptions out of the descriptions in your user-defined data types. This greatly reduces the amount of time you have to spend documenting your project. As you organize your user-defined data types, keep in mind the following features of RSLogix 5000 software:
pass through of descriptions When possible, RSLogix 5000 software looks for an available description for a tag, element, or member: Descriptions in user-defined data types ripple through to the tags that use that data type. Description of an array tag ripples through to the elements and members of the array.
append description to base tag RSLogix 5000 software automatically builds a description for each member of a tag that uses a user-defined data type. It starts with the description of the tag and then adds the description of the member from the data type. paste pass-through description Use the data type and array description as a basis for more specific descriptions. In this example, Tank became West Tank.
3-22
Organize Tags
Organize Tags
3-23
Is: Name that identifies this specific tag. Subscript or subscripts that point to a specific element within an array. Use the element identifier only if the tag or member is an array. Use one subscript for each dimension of the array. For example: [5], [2,8], [3,2,7]. To indirectly (dynamically) reference an element, use a tag or numeric expression that provides the element number. A numeric expression uses a combination of tags, constants, operators, and functions to calculate a value. For example, Tag_1-Tag_2, Tag_3+4, ABS(Tag_4). Keep the value of the tag or numeric expression within the dimensions of the array. For example, if a dimension of an array contains 10 elements, then the value of the tag or numeric expression must be 0 to 9 (10 elements).
Member
Specific member of a structure. Use the member identifier only if the tag is a structure. If the structure contains another structure as one of its members, use additional levels of the .Member format to identify the required member.
Bit Index
Specific bit of an integer data type (SINT, INT, or DINT). To indirectly (dynamically) reference a bit of an integer, use a tag or numeric expression that provides the bit number. A numeric expression uses a combination of tags, constants, operators, and functions to calculate a value. For example, Tag_1-Tag_2, Tag_3+4, ABS(Tag_4). Keep the value of the tag or numeric expression within the range of bits of the integer tag. For example, if the integer tag is a Dint (32-bits), then the value of the index must be 0 to 31 (32-bits).
3-24
Organize Tags
An alias tag lets you create one tag that represents another tag. Both tags share the same value (s). When the value (s) of one of the tags changes, the other tag reflects the change as well. Use aliases in the following situations: program logic in advance of wiring diagrams assign a descriptive name to an I/O device provide a more simple name for a complex tag use a descriptive name for an element of an array The tags window displays alias information.
drill_1_depth_limit is an alias for Local:2:I.Data.3 (a digital input point). When the input turns on, the alias tag also turns on.
drill_1_on is an alias for Local:0:O.Data.2 (a digital output point). When the alias tag turns on, the output tag also turns on.
A common use of alias tags is to program logic before wiring diagrams are available: 1. For each I/O device, create a tag with a name that describes the device, such as conveyor for the conveyor motor. 2. Program your logic using the descriptive tag names. (You can even test your logic without connecting to the I/O.) 3. Later, when wiring diagrams are available, add the I/O modules to the I/O configuration of the controller. 4. Finally, convert the descriptive tags to aliases for their respective I/O points or channels.
Organize Tags
3-25
The following logic was initially programmed using descriptive tag names, such as stop and conveyor_on. Later, the tags were converted to aliases for the corresponding I/O devices.
stop is an alias for Local:2:I.Data.1 (the stop button on the operator panel)
stop <Local:2:I.Data.1>
42351
3-26
Organize Tags
Assign an Alias
To assign a tag as an alias tag for another tag: 1. From the Logic menu, select Edit Tags.
2.
42360
4.
2. Select the scope of the tag. 3. To the right of the tag name, click the Alias For cell. The cell displays a 4. Click the 5. Select the tag that the alias will represent:
To: select a tag select a bit number Do this: Double-click the tag name. A. Click the tag name. B. To the right of the tag name, click C. Click the required bit.
Organize Tags
3-27
If you want an instruction to access different elements in an array, use a tag in the subscript of the array (an indirect address). By changing the value of the tag, you change the element of the array that your logic references.
When index equals 1, array[index] points here. array[0] array[1] array[2] array[3] When index equals 2, array[index] points here. 4500 6000 3000 2500
The following table outlines some common uses for an indirect address:
To: select a recipe from an array of recipes load a specific machine setup from an array of possible setups load parameters or states from an array, one element at a time log error codes perform several actions on an array element and then index to the next element Use a tag in the subscript and: Enter the number of the recipe in the tag. Enter the desired setup in the tag. A. Perform the required action on the first element. B. Use an ADD instruction to increment the tag value and point to the next element in the array.
3-28
Organize Tags
The following example loads a series of preset values into a timer, one value (array element) at a time. Step through an array
EXAMPLE
The timer_presets array stores a series of preset values for the timer in the next rung. The north_tank.step tag points to which element of the array to use. For example, when north_tank.step equals 0, the instruction loads timer_presets[0] into the timer (60,000 ms).
MOV Move Source timer_presets[north_tank.step] 60000 Dest north_tank.step_time.PRE 60000 north_tank.step_time.DN / TON Timer On Delay Timer north_tank.step_time Preset 60000 Accum 0
EN DN
When north_tank.step_time is done, the rung increments north_tank.step to the next number and that element of the timer_presets array loads into the timer.
north_tank.step_time.DN Add Source A ADD 1
When north_tank.step exceeds the size of the array, the rung resets the tag to start at the first element in the array. (The array contains elements 0 to 3.)
EQU Equal Source A north_tank.step 0 Source B 4 MOV Move Source 0
Dest north_tank.step 0
42358
Organize Tags
3-29
Expressions
You can also use an expression to specify the subscript of an array. An expression uses operators, such as + or -, to calculate a value. The controller computes the result of the expression and uses it as the array subscript. You can use these operators to specify the subscript of an array:
Operator: + * / ABS AND FRD Description: add subtract/negate multiply divide Absolute value AND BCD to integer Operator: MOD NOT OR SQR TOD TRN XOR Description: Modulo complement OR square root integer to BCD Truncate exclusive OR
3-30
Organize Tags
Chapter
The default RSLogix 5000 project provides a single task for all your logic. While this is sufficient for many applications, some situations may require more than one task. This chapter provides the following information to help you use multiple tasks in your project:
For this information: Select the Controller Tasks Prioritize Periodic and Event Tasks Leave Enough Time for Unscheduled Communication Avoid Overlaps Configure Output Processing for a Task Inhibit a Task Choose the Trigger for an Event Task Using the Module Input Data State Change Trigger Using the Motion Group Trigger Using the Axis Registration Trigger Using the Axis Watch Trigger Using the Consumed Tag Trigger Using the EVENT Instruction Trigger Create a Task Define a Timeout Value for an Event Task See page: 4-2 4-5 4-8 4-9 4-13 4-17 4-20 4-22 4-32 4-34 4-38 4-42 4-50 4-53 4-55
4-2
A Logix5000 controller lets you use multiple tasks to schedule and prioritize the execution of your programs based on specific criteria. This balances the processing time of the controller among the different operations in your application. The controller executes only one task at one time. A different task can interrupt a task that is executing and take control. In any given task, only one program executes at one time.
4-3
A Logix5000 controller uses three types of tasks. Use the following table to choose the appropriate type of task for each section of your logic.
If you want to execute a section of your logic: all of the time Then use this type of task: Continuous Task Description: The continuous task runs in the background. Any CPU time not allocated to other operations (such as motion, communications, and periodic or event tasks) is used to execute the programs within the continuous task. The continuous task runs all the time. When the continuous task completes a full scan, it restarts immediately. A project does not require a continuous task. If used, there can be only one continuous task. at a constant period (e.g., every 100 ms) multiple times within the scan of your other logic Periodic Task A periodic task performs a function at a specific period. Whenever the time for the periodic task expires, the periodic task: interrupts any lower priority tasks executes one time returns control to where the previous task left off You can configure the time period from 0.1 ms to 2000 s. The default is 10 ms. The performance of a periodic task depends on the type of Logix5000 controller and on the logic in the task. immediately when an event occurs Event Task An event task performs a function only when a specific event (trigger) occurs. Whenever the trigger for the event task occurs, the event task: interrupts any lower priority tasks executes one time returns control to where the previous task left off The trigger can be: change of a digital input new sample of analog data certain motion operations consumed tag EVENT instruction Important: Some Logix5000 controllers do not support all triggers. See Table 4.1 on page 4-21.
4-4
Here are some example situations and the type of task that you could use:
For this example situation: Fill a tank to its maximum level and then open a drain valve Collect and process system parameters and send them to a display Complete step 3 in a control sequencereposition the bin diverter Your system must check the position of a field arm each 0.1 s and calculate the average rate of change in its position. This is used to determine braking pressure. Read the thickness of a paper roll every 20 ms. A packaging line glues boxes closed. When a box arrives at the gluing position, the controller must immediately execute the gluing routine. In a high-speed assembly operation, an optical sensor detects a certain type of reject. When the sensor detects a reject, the machine must immediately divert the reject. In an engine test stand, you want to capture and archive each analog data immediately after each sample of data Immediately after receiving new production data, load the data into the station In a line that packages candy bars, you have to make sure that the perforation occurs in the correct location on each bar. Each time the registration sensor detects the registration mark, check the accuracy of an axis and perform any required adjustment. Use this type of task: continuous task continuous task continuous task periodic task periodic task event task event task event task event task event task
A gluing station must adjust the amount of glue it applies to compensate for changes in the speed of event task the axis. After the motion planner executes, check the command speed of the axis and vary the amount of glue, if needed. In a production line, if any of the programs detect an unsafe condition the entire line must shut down. event task The shutdown procedure is the same regardless of the unsafe condition.
4-5
Although a project can contain multiple tasks, the controller executes only one task at a time. If a periodic or event task is triggered while another task is currently executing, the priority of each task tells the controller what to do. The number of priority levels depends on the controller:
This Logix5000 controller: CompactLogix ControlLogix DriveLogix FlexLogix SoftLogix5800 Has this many priority levels: 15 15 15 15 3
The controller switches back and forth between each task and executes each one for 1 ms.
4-6
Additional Considerations
As you estimate the execution interrupts for a task, consider the following:
Consideration; motion planner Description: The motion planner interrupts all other tasks, regardless of their priority. The number of axes and coarse update period for the motion group effect how long and how often the motion planner executes. If the motion planner is executing when a task is triggered, the task waits until the motion planner is done. If the coarse update period occurs while a task is executing, the task pauses to let the motion planner execute. I/O task CompactLogix, FlexLogix, and DriveLogix controllers use a dedicated periodic task to process I/O data. This I/O task: Does not show up in the Tasks folder of the controller. Does not count toward the task limits for the controller. Operates at priority 7. Executes at the fastest RPI you have scheduled for the system. Executes for as long as it takes to scan the configured I/O modules. As you assign priorities to your tasks, consider the I/O task: If you want a task to: interrupt or delay I/O processing share controller time with I/O processing system overhead Then assign one of these priorities: 1 to 6 7
let I/O processing interrupt or delay the task 8 to 15 System overhead is the time that the controller spends on unscheduled communication. Unscheduled communication is any communication that you do not configure through the I/O configuration folder of the project, such as Message (MSG) instructions and communication with HMIs or workstations. System overhead interrupts only the continuous task. The system overhead time slice specifies the percentage of time (excluding the time for periodic or event tasks) that the controller devotes to unscheduled communication. The controller performs unscheduled communication for up to 1 ms at a time and then resumes the continuous task. continuous task You do not assign a priority to the continuous task. It always runs at the lowest priority. All other tasks interrupt the continuous task.
4-7
EXAMPLE
The following example depicts the execution of a project with three user tasks.
Priority: n/a 1 2 7 n/a n/a
Task executes.
Task: motion planner event task 1 periodic task 1 I/O taskn/a to ControlLogix and SoftLogix controllers. See page 4-6. system overhead continuous task
Legend:
Period: 8 ms (course update rate) n/a 12 ms 5 ms (fastest RPI) time slice = 20% n/a
Task is interrupted (suspended).
Execution time: 1 ms 1 ms 2 ms 1 ms 1 ms 20 ms
Duration: 1 ms 1 to 2 ms 2 to 4 ms 1 to 5 ms 1 to 6 ms 48 ms
5 2
10 3
15 4
20 5
25
30
35
40
45
50 6
Description:
1 2 3 4 5
Initially, the controller executes the motion planner and the I/O task (if one exists). After executing the continuous task for 4 ms, the controller triggers the system overhead. The period for periodic task 1 expires (12 ms), so the task interrupts the continuous task. After executing the continuous task again for 4 ms, the controller triggers the system overhead. The triggers occurs for event task 1. Event task 1 waits until the motion planner is done. Lower priority tasks experience longer delays. The continuous task automatically restarts.
4-8
Unscheduled communication occurs only when a periodic or event task is not running. If you use multiple tasks, make sure that their scan times and execution intervals leave enough time for unscheduled communication. If you have multiple tasks, follow these rules: 1. The execution time of a highest priority task is significantly less than its update rate. 2. The total execution time of all your tasks is significantly less than the update rate of the lowest priority tasks. For example, in this configuration of tasks:
Task: 1 2 Priority: higher lower Execution time: 20 ms 30 ms Rate 80 ms 100 ms
1. The execution time of the highest priority task (Task 1) is significantly less than its update rate (20 ms is less than 80 ms). 2. The total execution time of all tasks is significantly less than the update rate of the lowest priority task (50 ms is less than 100 ms). This generally leaves enough time for unscheduled communication. Adjust the update rates of the tasks as needed to get the best trade-off between executing your logic and servicing unscheduled communication. If your project has a continuous task, unscheduled communication occurs as a percentage of controller time (excluding the time for periodic or event tasks). See system overhead on page 4-6.
4-9
Avoid Overlaps
An overlap is a condition where a task (periodic or event) is triggered while the task is still executing from the previous trigger. IMPORTANT If an overlap occurs, the controller disregards the trigger that caused the overlap. In other words, you might miss an important execution of the task.
task trigger
event task
Description:
1
Task trigger occurs. Task executes. Task trigger occurs. Task executes. Task trigger occurs. Task executes. Overlap occurs. Task is triggered while it is still executing. The trigger does not restart the task. The trigger is ignored.
Each task requires enough time to finish before it is triggered again. Make sure that the scan time of the task is significantly less than the rate at which the trigger occurs. If an overlap occurs, reduce the frequency at which you trigger the task:
If the type of task is: periodic event Then: increase the period of the task adjust the configuration of your system to trigger the task less frequently.
4-10
1.
1. In the controller organizer, right-click the task and choose Properties. 2. Click the Monitor tab.
4-11
Status information about the task. Once the controller sets one of these bits, you must manually clear the bit. To determine if: An EVENT instruction triggered the task (event task only). A timeout triggered the task (event task only). An overlap occurred for this task. Examine this bit: 0 1 2
TASK
OverlapCount
DINT
Valid for an event or a periodic task. To clear the count, set the attribute to 0.
4-12
EXAMPLE
2. If Task_2_Status.2 = 1, then an overlap occurred so get the count of overlaps: The GSV instruction sets Task_2_Overlap_Count (DINT tag) = OverlapCount attribute of Task_2.
3. If Condition_1 = 1, then clear the bits of the Status attribute for Task_2: The SSV instruction sets the Status attribute of Task_2 = Zero. Zero is a DINT tag with a value of 0.
4-13
At the end of a task, the controller performs overhead operations (output processing) for the I/O modules in your system. While not the same as updating the modules, this output processing may effect the update of the I/O modules in your system. As an option, you can turn off this output processing for a specific task, which reduces the elapsed time of that task.
4-14
To choose how to configure output processing for a task, use the following flow chart
Figure 4.1 Choose how to configure output processing for a task.
B C A
Disable Automatic Output Processing To Reduce Task Overhead Disable Automatic Output Processing To Reduce Task Overhead
How many output modules does this task effect (write data to)? 0, 1, 2, or 3 A Is the this only the only in Tasks the Tasks folder of the Is this task task in the folder of the project? project? No Is another task configured to enable automatic output processing? Yes For the task that is configured for automatic output processing, does it execute frequently/continuously? For this flow chart, a task executes frequently if its interval time (elapsed time between triggers) is the RPI of the I/O modules in your system. B
4 or more
Yes
No
No
For the task that you are configuring, enable automatic output processing. For the task that you are configuring:
Yes
1. Disable automatic output processing. 2. Use an IOT instruction to update each output module that it effects.
4-15
1.
1. In the controller organizer, right-click the task and choose Properties. 2. Click the Configuration tab.
3.
4. Choose
4-16
disable the processing 1 (or any non-zero value) of outputs at the end of the task
EXAMPLE
If Condition_1 = 0 then let Task_2 process outputs when it is done. 1. The ONS instruction limits the true execution of the SSV instruction to one scan. 2. The SSV instruction sets the DisableUpdateOutputs attribute of Task_2 = 0. This lets the task automatically process outputs when it finishes its execution.
If Condition_1 = 1 then do not let Task_2 process outputs when it is done. 1. The ONS instruction limits the true execution of the SSV instruction to one scan. 2. The SSV instruction sets the DisableUpdateOutputs attribute of Task_2 = 1. This prevents the task from automatically processing outputs when it finishes its execution.
4-17
Inhibit a Task
By default, each task executes based on its trigger (event, periodic, or continuous). As an option, you can prevent a task from executing when its trigger occurs (i.e., inhibit the task). This is useful to test, diagnose, or start up your project.
If you want to: let the task execute when its trigger occurs prevent the task from executing when its trigger occurs Then: Uninhibit the task (default). Inhibit the task.
EXAMPLE
Inhibit a Task During the commissioning of a system that uses several task, you can first test each task individually. 1. Inhibit all the tasks except one, and then test that task. 2. Once the task meets your requirements, inhibit it and uninhibit a different task. 3. Continue this process until you have tested all your tasks.
If a task is inhibited, the controller still prescans the task when the controller transitions from program to run or test mode.
1.
1. In the controller organizer, right-click the task and choose Properties. 2. Click the Configuration tab.
4-18
3.
4. Choose
4-19
EXAMPLE
If Condition_1 = 0 then let Task_2 execute. 1. The ONS instruction limits the true execution of the SSV instruction to one scan. 2. The SSV instruction sets the InhibitTask attribute of Task_2 = 0. This uninhibits the task.
If Condition_1 = 1 then do not let Task_2 execute. 1. The ONS instruction limits the true execution of the SSV instruction to one scan. 2. The SSV instruction sets the InhibitTask attribute of Task_2 = 1. This inhibits the task.
4-20
If configured correctly, an event task interrupts all other tasks for the minimum amount of time required to respond to the event. Each event task requires a specific trigger that defines when the task is to execute.
With these considerations: Only one input module can trigger a specific event task. The input module triggers the event task based on the change of state (COS) configuration for the module. The COS configuration defines which points prompt the module to produce data if they turn on or off. This production of data (due to COS) triggers the event task. Typically, enable COS for only one point on the module. If you enable COS for multiple points, a task overlap of the event task may occur.
To trigger an event task when: Use this trigger: digital input turns on or off Module Input Data State Change
Only one input module can trigger a specific event task. The analog module triggers the event task after each real time sample (RTS) of the channels. All the channels of the module use the same RTS. Only one consumed can trigger a specific event task. Typically, use an IOT instruction in the producing controller to signal the production of new data. The IOT instruction sets an event trigger in the producing tag. This trigger passes to the consumed tag and triggers the event task. When a consumed tag triggers an event task, the event task waits for all the data to arrive before the event task executes.
Consumed Tag
Axis Registration 1 or 2
In order for the registration input to trigger the event task, first execute a Motion Arm Registration (MAR) instruction. This lets the axis detect the registration input and in turn trigger the event task. Once the registration input triggers the event task, execute the MAR instruction again to re-arm the axis for the next registration input. If the scan time of your normal logic is not fast enough to re-arm the axis for the next registration input, consider placing the MAR instruction within the event task.
Axis Watch
In order for the registration input to trigger the event task, first execute a Motion Arm Watch (MAW) instruction. This lets the axis detect the watch position and in turn trigger the event task. Once the watch position triggers the event task, execute the MAW instruction again to re-arm the axis for the next watch position. If the scan time of your normal logic is not fast enough to re-arm the axis for the next watch position, consider placing the MAW instruction within the event task
The coarse update period for the motion group triggers the execution of both the motion planner and the event task. Because the motion planner interrupts all other tasks, it executes first. If you assign the event task as the highest priority task, it executes after the motion planner.
EVENT instruction
Multiple EVENT instructions can trigger the same task. This lets you execute a task from different programs.
4-21
Here are some example situations for event tasks and the corresponding triggers:
For this example situation: A packaging line glues boxes closed. When a box arrives at the gluing position, the controller must immediately execute the gluing routine. A production line uses a proximity sensor to detect the presence of a part. Because the proximity sensor is on for only a very short time (pulse), the continuous task might miss the off to on transition of the sensor. In an engine test stand, you must capture and archive each sample of analog data. Controller A produces an array of production data for Controller B. You want to make sure that Controller B doesnt use the values while Controller A is updating the array: In a line that packages candy bars, you have to make sure that the perforation occurs in the correct location on each bar. Each time the registration sensor detects the registration mark, check the accuracy of an axis and perform any required adjustment. At the labeling station of a bottling line, you want to check the position of the label on the bottle. When the axis reaches the position that is defined as the watch point, check the label. A gluing station must adjust the amount of glue it applies to compensate for changes in the speed of the axis. After the motion planner executes, check the command speed of the axis and vary the amount of glue, if needed. In a production line, if any of the programs detect an unsafe condition the entire line must shut down. The shutdown procedure is the same regardless of the unsafe condition. Use an event task with this trigger: Module Input Data State Change Module Input Data State Change
EVENT instruction
The triggers that you can use for an event task varies depending on your type of Logix5000 controller. RSLogix 5000 software may let you configure a trigger for an event task that your controller does not support. The project will verify and successfully download, but the event task will not execute.
IMPORTANT
Table 4.1 Use the following table to determine which Logix5000 controllers support each type of event trigger. If you have this controller: Then you can use these event task triggers: Module Input Data State Change Consumed Tag Axis Registration 1 or 2 Axis Watch Motion Group Execution EVENT instruction
(1) (2)
Requires a 1756 I/O module or a virtual backplane. A SoftLogix5800 controller produces and consumes tags only over a ControlNet network.
Publication 1756-PM001G-EN-P - March 2004
4-22
To trigger an event task based on data from an input module, use the Module Input Data State Change trigger.
Let an event trigger this task. Let data from an input module trigger the task. Let this input tag trigger the task.
When the task is done, do not update digital outputs in the local chassis.
4-23
Definition: The COS parameter instructs a digital input module to multicast data whenever a specified input point transitions from On Off or Off On. You enable COS on a per-point basis. When any point that is enabled for COS receives the specified change, the module multicasts the data for all its points. By default, COS is enabled for both On Off and Off On changes for all points. You must specify an RPI regardless of whether you enable COS. If a change does not occur within the RPI, the module sends its data at the RPI.
The following table summarizes when an input module multicasts its data and triggers an event task within its own chassis.
If the input module And: is: digital COS is enabled for any point on the module COS is not enabled for any point on the module analog RTS RPI RTS > RPI Then it multicasts data: when any point that is enabled for COS receives the specified change at the RPI at the RPI never And it triggers an event task: when any point that is enabled for COS receives the specified change
at the RTS (newly updated channel data) at the RTS (newly updated channel data) at the RPI (does not contain updated data from the channels)
at the RTS for the module at the RTS for the module
If the module is in a remote chassis, only the RPI determines when the controller receives the data and event trigger over the network.
Over this network: EtherNet/IP ControlNet The controller receives the data: close to the RPI, on average at the actual packet interval ( RPI)
4-24
Here are some examples that show COS and RTS configurations: If you use a digital module to trigger an event task, configure only one point on the module for COS. If you configure multiple points, a task overlap could occur.
Then configure the input module like this (point 0 is used as an example only):
IMPORTANT
change of state no change of state for remaining points point 0 event task
change of state no change of state for remaining points point 0 event task
change of state no change of state for remaining points RTS of analog inputs event task 25.0 ms real time sample of inputs
4-25
4-26
4-27
EXAMPLE
As parts move past a diverter location, the controller must decide whether or not to turn on the diverter. Once the diverter is on, the controller must also turn it off before the next part is in that position. Because of the speed of the line, an event task controls the diverter.
A photoeye at the diverter position indicates when a part is in the diverter position. The input is wired to the module in slot 4 of the local chassis.
The diverter photoeye (point 0) is configured for change of state for both Off and On. This lets the photoeye trigger the event task when it turns on and when it turns off.
The event task uses the following logic to control the diverter.
If Diverter_Photoeye = 1 (part is in the diverter position) And Divert_Part = 1 (divert this part) Then Diverter = 1 (turn on the diverter) Otherwise Diverter = 0 (turn off the diverter)
4-28
Estimate Throughput
To estimate the throughput time from input to output (screw to screw), use the following worksheet:
Consideration: 1. What is the input filter time of the module that triggers the event task? This is typically shown in milliseconds. Convert it to microseconds (s). 2. What is the hardware response time for the input module that triggers the event task? Make sure you use the appropriate type of transition (Off On or On Off). See Table 4.2 on page 4-29. 3. What is the backplane communication time? If the chassis size is: 4 slot 7 slot 10 slot 13 slot 17 slot Use this value (worst case): 13 s 22 s 32 s 42 s 54 s s s s s s s s s s s Value:
4. What is the total execution time of the programs of the event task? 5. What is the backplane communication time? (Same value as step 3.) 6. What is the hardware response time of the output module. 7. Add steps 1 through 6. This is the minimum estimated throughput, where execution of the motion planner or other tasks do not delay or interrupt the event task. 8. What is the scan time of the motion group? 9. What is the total scan time of the tasks that have a higher priority than this event task (if any)? 10. Add steps 7 through 9. This is the nominal estimated throughput, where execution of the motion planner or other tasks delay or interrupt the event task.
4-29
Table 4.2 Use the following table to determine the nominal hardware response times for selected 1756 I/O modules. Module: Nominal response time s: 25 C Off On 1756-IB16 1756-IB16D 1756-IB32/B 1756-IV16 1756-IV32 1756-OB16D 1756-OB16E 1756-OB32 1756-OV16E 1756-OV32E 265 303 330 257 381 48 60 38 67 65 On Off 582 613 359 435 476 519 290 160 260 174 Off On 265 305 345 254 319 51 61 49 65 66 60 C On Off 638 673 378 489 536 573 324 179 326 210
4-30
EXAMPLE
Estimate Throughput
The following example shows the throughput considerations for the system shown below. In this example, the throughput is the time from when the input turns on to when the output turns on.
1756-IB32/B digital input module 1756-OB16D digital output module
Off On transition Consideration: 1. What is the input filter time of the module that triggers the event task? This is typically shown in milliseconds. Convert it to microseconds (s). 2. What is the hardware response time for the input module that triggers the event task? Make sure you use the appropriate type of transition (Off On or On Off). See Table 4.2 on page 4-29. 3. What is the backplane communication time? If the chassis size is: 4 slot 7 slot 10 slot 13 slot 17 slot Use this value (worst case): 13 s 22 s 32 s 42 s 54 s
330 s
4. What is the total execution time of the programs of the event task? 5. What is the backplane communication time? (Same value as step 3.) 6. What is the hardware response time of the output module. 7. Add steps 1 through 6. This is the minimum estimated throughput, where execution of the motion planner or other tasks do not delay or interrupt the event task. 8. What is the scan time of the motion group? 9. What is the total scan time of the tasks that have a higher priority than this event task (if any)? 10. Add steps 7 through 9. This is the nominal estimated throughput, where execution of the motion planner or other tasks delay or interrupt the event task.
4-31
Additional Considerations
The following considerations effect the scan time of the event task, which effects the speed at which it can respond to the input signal.
Consideration: amount of code in the event task task priority CPS and UID instructions communication interrupts Description: Each logic element (rung, instruction, structured text construct, etc) adds scan time to the task. If the event task is not the highest priority task, a higher priority task may delay or interrupt the execution of the event task. If one of these instructions are active, the event task cannot interrupt the currently executing task. (The task with the CPS or UID.) The following actions of the controller interrupt a task, regardless of the priority of the task communication with I/O modules Modules that have large data packets have a greater impact, such as the 1756-DNB module. serial port communication
4-32
To couple the execution of an event task with the execution of the motion planner, use the Motion Group Execution trigger.
Let an event trigger this task. Let the motion planner trigger the task. This is the name of the motion group tag.
Interrupt all other tasks. When the task is done, do not update digital outputs in the local chassis.
The Motion Group Execution trigger works as follows: The coarse update period for the motion group triggers the execution of both the motion planner and the event task. Because the motion planner interrupts all other tasks, it executes first. If you assign the event task as the highest priority task, it executes immediately after the motion planner. The following timing diagram shows the relationship between the motion planner and the event task.
The coarse update period for the motion group triggers both the motion planner and the event task.
4-33
4-34
To let the registration input of an axis trigger an event task, use the Axis Registration (1 or 2) trigger.
Let an event trigger this task. Let registration input 1. of this axis trigger the task.
Interrupt all other tasks. When the task is done, do not update digital outputs in the local chassis.
When the specified registration input reaches its trigger condition, it triggers the event task. In the configuration of the event task, specify which registration input you want to trigger the task. Choose either Axis Registration 1 or Axis Registration 2. You must first arm the registration input using a Motion Arm Registration (MAR) instruction. In the MAR instruction, the Trigger Condition operand defines which transition of the registration input (Off On or On Off) triggers the event task. Once the registration input triggers the task, you have to re-arm the registration input. The following timing diagram shows the relationship between the registration input and the event task.
registration input
4-35
4-36
EXAMPLE
In a line that packages candy bars, you have to make sure that the perforation occurs in the correct location on each bar. Each time the registration sensor detects the registration mark, check the accuracy of an axis and perform any required adjustment. Due to the speed of the line, you have to arm the registration input within the event task.
A registration sensor is wired as registration input 1 for the axis named Axis_1.
Task_1 (event task) The GSV instruction sets Task_Status (DINT tag) = Status attribute for the event task. In the Instance Name attribute, THIS means the TASK object for the task that the instruction is in (i.e., Task_1).
4-37
If Task_Status.0 = 1 then an EVENT instruction triggered the event task. In the continuous task, the EVENT executes to arm registration for the first time. The JMP instruction causes the controller to jump its execution to the Arm LBL instruction. This skips all the logic of the routine except the rung that arms registration for the axis.
Other logic
The MAR instruction executes each time the task executes and arms Axis_1 for registration. The OTU instruction sets the EN bit of the MAR instruction = 0. The MAR instruction is a transitional instruction. To execute the MAR instruction, its rung-condition-in must go from false to true. By first clearing the EN bit, the instruction responds as if its rung-condition-in changed from false to true. The MAR instruction arms the axis for registration.
The controller does not clear the bits of the Status attribute once they are set. To use a bit for new status information, you must manually clear the bit. If Task_Status.0 = 1 then clear that bit. The OTU instruction sets Task_Status.0 = 0. The SSV instruction sets the Status attribute of THIS task (Task_1) = Task_Status. This includes the cleared bit.
4-38
To let the watch position of an axis trigger an event task, use the Axis Watch trigger.
Let an event trigger this task. Let the watch position. of this axis trigger the task.
Interrupt all other tasks. When the task is done, do not update digital outputs in the local chassis.
When the axis reaches the position that is specified as the watch position, it triggers the event task. You must first arm the axis for the watch position using a Motion Arm Watch (MAW) instruction. In the MAW instruction, the Trigger Condition operand defines the direction in which the axis must be moving to trigger the event task. Once the axis reaches the watch position and triggers the event task, you have to re-arm the axis for the next watch position. The following timing diagram shows the relationship between the watch position and the event task.
4-39
Configure the event task as the highest priority task. If a periodic task has a higher priority, the event task may have to wait until the periodic task is done.
Limit the number of event tasks. Each additional task reduces the processing time that is available for other tasks. This could cause an overlap.
For an event task, you can typically disable automatic output processing (default). This reduces the elapsed time of the task. To verify this decision, see Figure 4.1 on page 4-14.
4-40
EXAMPLE
At the labeling station of a bottling line, you want to check the position of the label on the bottle. When the axis reaches the position that is defined as the watch point, check the label.and perform any required adjustment. Due to the speed of the line, you have to arm axis for the watch position within the event task.
Let the watch position for the axis named Axis_1 trigger the event task. This event task interrupts all other tasks.
The following logic arms and re-arms the axis for the watch position.
Continuous task If Arm_Watch = 1 (system is ready to set up a watch position) then The ONS instruction limits the execution of the EVENT instruction to one scan. The EVENT instruction triggers an execution of Task_1 (event task).
Task_1 (event task) The GSV instruction sets Task_Status (DINT tag) = Status attribute for the event task. In the Instance Name attribute, THIS means the TASK object for the task that the instruction is in (i.e., Task_1).
4-41
If Task_Status.0 = 1 then an EVENT instruction triggered the event task. In the continuous task, the EVENT executes to set up the watch position for the first time. The JMP instruction causes the controller to jump its execution to the Arm LBL instruction. This skips all the logic of the routine except the rung that arms the axis for the watch position (MAW instruction).
Other logic
The MAW instruction executes each time the task executes and arms Axis_1 for the watch position. The OTU instruction sets the EN bit of the MAW instruction = 0. The MAW instruction is a transitional instruction. To execute the MAW instruction, its rung-condition-in must go from false to true. By first clearing the EN bit, the instruction responds as if its rung-condition-in changed from false to true. The MAW instruction arms the axis for the watch position.
The controller does not clear the bits of the Status attribute once they are set. To use a bit for new status information, you must manually clear the bit. If Task_Status.0 = 1 then clear that bit. The OTU instruction sets Task_Status.0 = 0. The SSV instruction sets the Status attribute of THIS task (Task_1) = Task_Status. This includes the cleared bit.
4-42
To trigger an event task based on data from a consumed tag, use the Consumed Tag trigger.
Let an event trigger this task. Let a consumed tag trigger the task. Let this consumed tag trigger the task.
A produced/consumed tag relationship can pass an event trigger along with data to a consumer controller. Typically, you use an Immediate Output (IOT) instruction to send the event trigger to the consumer controller.
1 2 3 4
Controller A Description:
1 2 3 4
Controller B
In Controller A, logic updates the values of a produced tag. Once the update is complete, the Controller A executes an IOT instruction to send the data and an event trigger to Controller B. Controller B consumes the new data. After Controller B updates the consumed tag, it executes the event task.
4-43
The type of network between the controllers determines when the consuming controller receives the new data and event trigger via the IOT instruction.
With this controller: ControlLogix Over this network: backplane EtherNet/IP network ControlNet network SoftLogix5800 You can produce and consume tags only over a ControlNet network. The consuming device receives the data and event trigger: immediately immediately within the actual packet interval (API) of the consumed tag (connection) within the actual packet interval (API) of the consumed tag (connection)
The following diagrams compare the receipt of data via an IOT instruction over EtherNet/IP and ControlNet networks.
EtherNet/IP network (ControlLogix controller) values loaded into produced tag IOT instruction in the producing controller event task in the consuming controller ControlNet network values loaded into produced tag IOT instruction in the producing controller RPI of the produced tag event task in the consuming controller
4-44
change in values of a produced tag execution of IOT an instruction transmission of the produced tag event task in the consumer controller
1 2 3 4 5
Description:
1
RPI occurs for the produced tag. The produced tag transfers old data to the consuming controller. The producer controller starts to update the values of the produced tag. RPI occurs again for the produced tag. The produced tag transfers a mix of old and new data to the consuming controller. The producer controller finishes updating the values of the produced tag. The producer controller executes an Immediate Output (IOT) instruction. The produced tag immediately transfers all the new data to the consuming controller.
2 3
When the consumer controller receives all the data, it executes its event task.
Although the producing controller executes the IOT instruction immediately after it loads new data, the event task is not triggered (in the consuming controller) until the consuming controller has received all the new data. This ensures that the controller operates on a complete packet of new data.
4-45
event task in the consuming controller A event task in the consuming controller B
1 2 3 4
Description:
1 2 3 4
The first controller executes an action with which other controllers need to stay synchronized. When the action is done, the controller executes an IOT instruction. The IOT instruction uses a produced tag as its target. When controller A receives the produced tag, it executes its event task. When controller B receives the produced tag, it executes its event task.
4-46
This tag stores a copy of Source_Tag at 1 instance in time. CPS Synchronous Copy File
Produced_Tag 6A7844B1 3B221D89 43BB278F
The CPS instruction does not let any controller operation change the data during the copy. Tasks that attempt to interrupt the CPS instruction are delayed until the copy is done.
In the Connection properties of the produced tag, select (check) the following check box:
If you leave this box cleared (unchecked), the producing controller triggers the event task at the end of any task that automatically updates local outputs. In other words, the task scan will trigger the event in addition to the IOT instruction. 3. IOT instruction Use an IOT instruction at the point in your logic where you want to trigger the event task. The IOT instruction overrides the RPI for the tag and immediately sends the event trigger and the data of the tag.
4-47
Event Task This tag stores data that the other controller produces.
Consumed_Tag data from other controller 6A7844B1 3B221D89 43BB278F
This tag stores a copy of Consumed_Tag. Instructions in the project use this data. CPS Synchronous Copy File
Destination_Tag 6A7844B1 3B221D89 43BB278F
The CPS instruction does not let any other instruction use the data during the copy. Tasks that attempt to interrupt the CPS instruction are delayed until the copy is done.
2. Task priority
Configure the event task as the highest priority task. If a periodic task has a higher priority, the event task may have to wait until the periodic task is done.
Limit the number of event tasks. Each additional task reduces the processing time that is available for other tasks. This could cause an overlap.
For an event task, you can typically disable automatic output processing (default). This reduces the elapsed time of the task. To verify this decision, see Figure 4.1 on page 4-14.
4-48
EXAMPLE
As parts move along a production line, each station requires production specifications for the part at its station. To make sure that a station doesnt act on old data, an event task signals the arrival of new data for the next part.
Producer Controller
This controller controls station 24 and produces data for the next station (station 25). To signal the transmission of new data, the controller uses the following elements:
Ladder Logic
If New_Data = on, then the following occurs for one scan: The CPS instruction sets Produced_Tag_1 = Source_Tag_1. The IOT instruction updates Produced_Tag_1 and sends this update to the consuming controller (station 25). When the consuming controller receives this update, it triggers the associated event task in that controller.
4-49
Consumer Controller
The controller at station 25 uses the data produced by station 24. To determine when new data has arrived, the controller uses an event task.
Let an event trigger this task. Let a consumed tag trigger the task. Let this consumed tag trigger the task.
4-50
To trigger an event task based on conditions in your logic, use the EVENT Instruction Only trigger.
Let an event trigger this task. Let an EVENT instruction trigger the task. No tag is required.
The EVENT Instruction Only trigger requires that you use a Trigger Event Task (EVENT) instruction to trigger the task. You can use an EVENT instruction from multiple points in your project. Each time the instruction executes, it triggers the specified event task.
event task
1 2
Description:
1
Program A executes an EVENT instruction. The event task that is specified by the EVENT instruction executes one time. Program B executes an EVENT instruction. The event task that is specified by the EVENT instruction executes one time.
4-51
The controller does not clear the bits of the Status attribute once they are set. To use a bit for new status information, you must manually clear the bit. Use a Set System Value (SSV) instruction to set the attribute to a different value.
4-52
EXAMPLE
A controller uses multiple programs but a common shut down procedure. Each program uses a program-scoped tag named Shut_Down_Line that turns on if the program detects a condition that requires a shut down.
Let an event trigger this task. Let an EVENT instruction trigger the task. No tag is required.
4-53
Create a Task
1.
1. In the controller organizer, right-click the Tasks folder and choose New Task.
2.
3. 4. 5.
6. 7.
2. In the Name text box, type a name for the task. 3. From the Type list, choose Event. 4. From the Trigger list, choose the trigger for the task. 5. From the Tag list, choose the tag that contains the triggering data. 6. In the Priority text box, type the priority for the task. 7. In the Watchdog text box, type the watchdog time for the task. 8. Choose
4-54
IMPORTANT
1.
1. In the controller organizer, right-click the Tasks folder and choose New Task.
2.
3. 4. 5. 6.
2. In the Name text box, type a name for the task. 3. From the Type list, choose Periodic (default). 4. In the Period text box, type the period at which you want the task to execute. 5. In the Priority text box, type the priority for the task. 6. In the Watchdog text box, type the watchdog time for the task. 7. Choose
4-55
If you want your event task to automatically execute if the trigger fails to occur within a certain time, assign a timeout value to the task. When the event task is done, its timeout timer begins to increment. If the timer reaches its preset value before the event task is triggered, the event task automatically executes.
event task timeout value for the task timeout timer bit 1 of the status attribute of the TASK object
1 2 3
Description:
1
Event task executes. Timeout time stops incrementing. Event task is done. Timeout timer resets and begins incrementing. Timeout timer reaches the timeout value. Event task automatically executes. In the Status attribute of the TASK object, bit 1 turns on.
1.
1. In the controller organizer, right-click the event task and choose Properties.
4-56
3.
4.
3. Check the Execute Task If No Event Occurs Within check box. 4. Type the timeout value, in milliseconds. 5. Choose
Enables or disables the timeout function of an event task. To: disable the timeout function enable the timeout function
4-57
EXAMPLE
Programmatically Configure a Timeout To make sure that a timeout value is always defined and enabled for an event task, the following logic configures the timeout when the controller enters the run mode.
If S:FS = 1 (first scan) then set the timeout value for Task_2 and enable the timeout function: 1. The first MOV instruction sets Task_2_Timeout = 10000000 s (DINT value). Then the SSV instruction sets the Rate attribute for Task_2 = Task_2_Timeout. This configures the timeout value for the task. 2. The second MOV instruction sets One = 1 (DINT value). Then the SSV instruction sets the EnableTimeout attribute for Task_2 = One. This enables the timeout function for the task.
4-58
EXAMPLE
Define a Timeout Value for an Event Task If a timeout occurs for the event task, communication with the triggering device might have failed. This requires the process to shut down. To shut down the controller, the event task calls the fault routine for the program and supplies a user-defined fault code (999 in this example).
1. The GSV instruction sets Task_2_Status = Status attribute for Task_2 (DINT value).
2. If Task_2_Status.1 = 1, then a timeout occurred so shut down the controller and set the major fault code to 999: The JSR instruction calls the fault routine for the program. This produces a major fault. The major fault code = 999 (value of the input parameter of 999).
3. If Condition_1 = 1, then clear the bits of the Status attribute for Task_2: The SSV instruction sets the Status attribute of Task_2 = Zero. Zero is a DINT tag with a value of 0.
For more information on shutting down the controller, see Create a User-Defined Major Faulton page 15-13.
4-59
Notes:
4-60
Chapter
Use this procedure to design a sequential function chart (SFC) for your process or system. An SFC is similar to a flowchart of your process. It defines the steps or states through which your system progresses. Use the SFC to: organize the functional specification for your system program and control your system as a series of steps and transitions By using an SFC to specify your process, you gain these advantages: Since an SFC is a graphical representation of your process, it is easier to organize and read than a textual version. In addition, RSLogix 5000 software lets you: add notes that clarify steps or capture important information for use later on print the SFC to share the information with other individuals Since Logix5000 controllers support SFCs, you do not have to enter the specification a second time. You are programming your system as you specify it. By using an SFC to program your process, you gain these advantages: graphical division of processes into its major logic pieces (steps) faster repeated execution of individual pieces of your logic simpler screen display reduced time to design and debug your program faster and easier troubleshooting direct access to the point in the logic where a machine faulted easy updates and enhancements
Typically, the development of an SFC is an iterative process. If you prefer, you can use RSLogix 5000 software to draft and refine your SFC. For specific procedures on how to enter an SFC, see Program a Sequential Function Chart on page 6-1.
5-2
A sequential function chart (SFC) is similar to a flowchart. It uses steps and transitions to perform specific operations or actions. Figure 5.1 and Figure 5.2 is an example that shows the elements of an SFC:
Figure 5.1 SFC Example A step represents a major function of your process. It contains the actions that occur at a particular time, phase, or station. An action is one of the functions that a step performs.
A transition is the true or false condition that tells the SFC when to go to the next step. A qualifier determines when an action starts and stops.
5-3
Figure 5.2 SFC Example (continued from previous page) A selection branch chooses between different execution paths.
A text box lets you add descriptive text or notes to your SFC.
A wire connects one element to another element anywhere on the chart. This wire takes you to the conveyor step on Figure 5.1 on the previous page.
5-4
To design an SFC, you perform these tasks: Define the Tasks Choose How to Execute the SFC Define the Steps of the Process Organize the Steps Add Actions for Each Step Describe Each Action in Pseudocode Choose a Qualifier for an Action Define the Transition Conditions Transition After a Specified Time Turn Off a Device at the End of a Step Keep Something On From Step-to-Step End the SFC Nest an SFC Configure When to Return to the OS/JSR Pause or Reset an SFC The remaining sections of this chapter describe in detail how to perform each task.
5-5
The first step in the development of an SFC is to separate the configuration and regulation of devices from the commands to those devices. Logix5000 controllers let you divide your project into one continuous task and multiple periodic tasks and event tasks. 1. Organize your project as follows:
These functions: configure and regulate devices command a device to a specific state sequence the execution of your process Go here: periodic task SFC in the continuous task
2. For those functions that go in a periodic task, group the functions according to similar update rates. Create a periodic task for each update rate. For example, your 2-state devices may require faster updates than your PID loops. Use separate periodic tasks for each. The following example shows a project that uses two periodic tasks to regulate motors, valves, and temperature loops. The project uses an SFC to control the process. Define the Tasks
EXAMPLE
This task (periodic) uses function block diagrams to turn on or off motors and open or close valves. The SFC in MainTask commands the state for each device. The function block diagrams set and maintain that state.
This task (periodic) uses function block diagrams to configure and regulate temperature loops. The SFC in MainTask commands the temperatures. The function block diagrams set and maintain those temperatures.
This task (continuous) executes the sequential function chart (SFC). The SFC commands the specific state or temperature for each device or temperature loop.
5-6
To execute an SFC, either configure it as the main routine for a program or call it as a subroutine.
If: The SFC is the only routine in the program. The SFC calls all the other routines of the program. The program requires other routines to execute independent of the SFC. The SFC uses boolean actions. Then: Configure the SFC as the main routine for the program. 1. Configure another routine as the main routine for the program. 2. Use the main routine to call the SFC as a subroutine.
If the SFC uses boolean actions, then other logic must run independent of the SFC and monitor status bits of the SFC.
A step represents a major function of your process. It contains the actions that occur at a particular time, phase, or station.
Step A step executes continuously until a transition tells the SFC to go to the next step.
Do this
Actions
MIX
and do this
A transition ends a step. The transition defines the physical conditions that must occur or change in order to go to the next step.
5-7
Paint
Paint_Flow
Air_Flow
Elec_Charg
Clean Transfr_Out
Clean Transfr_Out
When you first open an SFC routine, it contains an initial step and transition. Use this step to initialize your process.
initial step
initial transition
To identify a step, look for a physical change in your system, such as new part that is in position, a temperature that is reached, a preset time that is reached, or a recipe selection that occurs. The step is the actions that take place before that change. Stop when your steps are in meaningful increments. For example:
This organization of steps: produce_solution set_mode, close_outlet, set_temperature, open_inlet_a, close_inlet_a, set_timer, reset_temperature, open_outlet, reset_mode preset_tank, add_ingredient_a, cook, drain Is: probably too large probably too small
5-8
SFC_STEP Structure
Each step uses a tag to provide information about the step. Access this information via either the Step Properties dialog box or the Monitor Tags tab of the Tags window:
If you want to: determine how long a step has been active (milliseconds) flag when the step has been active for a specific length of time (milliseconds) Then check or set Data type: Details: this member: T DINT When a step becomes active, the Timer (T) value resets and then starts to count up in milliseconds. The timer continues to count up until the step goes inactive, regardless of the Preset (PRE) value. Enter the time in the Preset (PRE) member. When the Timer (T) reaches the Preset value, the Done (DN) bit turns on and stays on until the step becomes active again.
PRE
DINT
As an option, enter a numeric expression that calculates the time at runtime. DN flag if a step did not execute long enough LimitLow BOOL DINT When the Timer (T) reaches the Preset (PRE) value, the Done (DN) bit turns on and stays on until the step becomes active again. Enter the time in the LimitLow member (milliseconds). If the step goes inactive before the Timer (T) reaches the LimitLow value, the AlarmLow bit turns on. The AlarmLow bit stays on until you reset it. To use this alarm function, turn on (check) the AlarmEnable (AlarmEn) bit.
As an option, enter a numeric expression that calculates the time at runtime. AlarmEn AlarmLow BOOL BOOL To use the alarm bits, turn on (check) the AlarmEnable (AlarmEn) bit. If the step goes inactive before the Timer (T) reaches the LimitLow value, the AlarmLow bit turns on. The bit stays on until you reset it. To use this alarm function, turn on (check) the AlarmEnable (AlarmEn) bit.
5-9
Then check or set Data type: Details: this member: LimitHigh DINT Enter the time in the LimitHigh member (milliseconds). If the Timer (T) reaches the LimitHigh value, the AlarmHigh bit turns on. The AlarmHigh bit stays on until you reset it. To use this alarm function, turn on (check) the AlarmEnable (AlarmEn) bit.
As an option, enter a numeric expression that calculates the time at runtime. AlarmEn AlarmHigh BOOL BOOL To use the alarm bits, turn on (check) the AlarmEnable (AlarmEn) bit. If the Timer (T) reaches the LimitHigh value, the AlarmHigh bit turns on. The bit stays on until you reset it. To use this alarm function, turn on (check) the AlarmEnable (AlarmEn) bit. do something while the step is active (including first and last scan) X BOOL The X bit is on the entire time the step is active (executing).
Typically, we recommend that you use an action with a N Non-Stored qualifier to accomplish this. do something one time when the step becomes active FS BOOL The FS bit is on during the first scan of the step.
Typically, we recommend that you use an action with a P1 Pulse (Rising Edge) qualifier to accomplish this. do something while the step is active, except on the first and last scan do something one time on the last scan of the step SA BOOL The SA bit is on when the step is active except during the first and last scan of the step. The LS bit is on during the last scan of the step.
LS
BOOL
Use this bit only if you do the following: On the Controller Properties dialog box, SFC Execution tab, set the Last Scan of Active Step to Dont Scan or Programmatic reset.
Typically, we recommend that you use an action with a P0 Pulse (Falling Edge) qualifier to accomplish this.
5-10
If you want to: determine the target of an SFC Reset (SFR) instruction
Then check or set Data type: Details: this member: Reset BOOL An SFC Reset (SFR) instruction resets the SFC to a step or stop that the instruction specifies. The Reset bit indicates to which step or stop the SFC will go to begin executing again. Once the SFC executes, the Reset bit clears.
determine the maximum time that a step has been active during any of its executions determine if the Timer (T) value rolls over to a negative value determine how many times a step has become active
TMax
DINT
Use this for diagnostic purposes. The controller clears this value only when you choose the Restart Position of Restart at initial step and the controller changes modes or experiences a power cycle. Use this for diagnostic purposes. This is not a count of scans of the step. The count increments each time the step becomes active. It increments again only after the step goes inactive and then active again. The count resets only if you configure the SFC to restart at the initial step. With that configuration, it resets when the controller changes from program mode to run mode.
OV Count
BOOL DINT
use one tag for the various status bits of this step
Status
DINT
The following diagram shows the relationship of the X, FS, SA, and LS bits.
5-11
step_name.X
step_name.FS
step_name.SA
5-12
Once you define the steps of your process, organize them into sequences, simultaneous branches, selection branches, or loops.
Overview
To: Execute 1 or more steps in sequence: One executes repeatedly. Then the next executes repeatedly. Use this structure: Sequence With these considerations: The SFC checks the transition at the end of the step: If true, the SFC goes to the next step. If false, the SFC repeats the step.
Choose between alternative steps or groups of steps depending on logic conditions Execute a step or steps or skip the step or steps depending on logic conditions
Selection Branch
It is OK for a path to have no steps and only a transition. This lets the SFC skip the selection branch. By default, the SFC checks from left to right the transitions that start each path. It takes the first true path. If no transitions are true, the SFC repeats the previous step. RSLogix 5000 software lets you change the order in which the SFC checks the transitions.
Execute 2 or more steps at the same time. All paths must finish before continuing the SFC
Simultaneous Branch
A single transition ends the branch. The SFC checks the ending transition after the last step in each path has executed at least once. If the transition is false, the SFC repeats the previous step.
Connect the wire to the step or simultaneous branch to which you want to go. Do not wire into, out of, or between a simultaneous branch.
5-13
45
46
Selection Branch
Drill
Polish
To simplify my programming, I want to separate communications and block transfers from other control logic. All occur at the same time.
Simultaneous Branch
Control
Comms
BTs
In a heat treating area, the temperature ramps up at a specific rate, maintains that temperature for a specific duration, and then cools at a specific rate.
Sequence
Ramp Maintain Cool
At station 12, the machine drills, taps, and bolts a part. The steps occur one after the other.
Sequence
Drill Tap Bolt
Step 12 inspects a process for the correct mix of chemicals. If OK, then continue with the remaining steps. If not OK, go to the top of the SFC and purge the system.
Wire
start of SFC Step 12
Not OK
OK
5-14
Sequence
A sequence is a group of steps that execute one after the other.
do this
THEN this
THEN this
For a detailed diagram of the execution of a sequence of steps, see Figure 5.5 on page 5-52. To override the state of a transition, see Force Logic Elements on page 14-1.
5-15
Selection Branch
A selection branch represents a choice between one path (step or group of steps) or another path (i.e., an OR structure). Only one path executes. By default the SFC checks the transitions from left to right. The SFC takes the first true path. RSLogix 5000 software lets you change the order in which the SFC checks the transitions. See Program a Sequential Function Chart on page 6-1.
single horizontal line each path has its own transition do this OR this OR this
For a detailed diagram of the execution of a selection branch, see Figure 5.7 on page 5-54. To override the state of a transition, see Force Logic Elements on page 14-1.
5-16
Simultaneous Branch
A simultaneous branch represents paths (steps or group of steps) that occur at the same time (i.e., an AND structure). All paths execute. All paths must finish before continuing with the SFC. The SFC checks the transition after the last step of each path has executed at least once.
do this
AND this
AND this
For a detailed diagram of the execution of a simultaneous branch, see Figure 5.6 on page 5-53. To override the branch and prevent a path from executing, see Force Logic Elements on page 14-1.
5-17
go to this step
5-18
Use actions to divide a step into the different functions that the step performs, such as commanding a motor, setting the state of a valve, or placing a group of devices in a specific mode.
Step
Do this
Actions
MIX
and do this
5-19
execute your logic without additional Embed structured text. routines use structured text assignments, constructs, and instructions For example:
When the S_Complete_the_Batch step is active, the S_Open_Outlet action executes. The action sets the Outlet.ProgCommand tag equal to 1, which opens the outlet valve. re-use logic in multiple steps use another language to program the action, such as ladder logic nest an SFC For example: Call a subroutine.
When the S_Complete_the_Batch step is active, the S_Open_Outlet action executes. The action calls the Open_Outlet routine.
Open_Outlet Routine
When the Open_Outlet routine executes, the OTE instruction sets the Outlet.ProgCommand tag equal to 1, which opens the outlet valve.
You cannot reuse a non-boolean action within the same SFC except to reset a stored action. Only one instance of a specific non-boolean action is permitted per SFC.
5-20
When the S_Complete_the_Batch step is active, the S_Open_Outlet action executes. When the action is active, its Q bit turns on.
A ladder logic routine monitors the Q bit (S_Open_Outlet.Q ). When the Q bit is on, the JSR instruction executes and opens the outlet valve.
You can reuse a boolean action multiple times within the same SFC.
SFC_ACTION Structure
Each action (non-boolean and boolean) uses a tag to provide information about the action. Access this information via either the
5-21
Action Properties dialog box or the Monitor Tags tab of the Tags window:
If you want to: determine when the action is active Then check or set this member: Q Data type: Details: BOOL The status of the Q bit depends on whether the action is a boolean action or non-boolean action: If the action is: boolean non-boolean Then the Q bit is: on (1) the entire time the action is active, including the last scan of the action on (1) while the action is active but off (0) at the last scan of the action To use a bit to determine when an action is active, use the Q bit. A determine how long an action has been active (milliseconds) T BOOL DINT The A bit is on the entire time the action is active. When an action becomes active, the Timer (T) value resets and then starts to count up in milliseconds. The timer continues to count up until the action goes inactive, regardless of the Preset (PRE) value. Enter the time limit or delay in the Preset (PRE) member. The action starts or stops when the Timer (T) reaches the Preset value.
PRE
DINT
As an option, enter a numeric expression that calculates the time at runtime. determine how many times an action has become active Count DINT This is not a count of scans of the action. The count increments each time the action becomes active. It increments again only after the action goes inactive and then active again. The count resets only if you configure the SFC to restart at the initial step. With that configuration, it resets when the controller changes from program mode to run mode. use one tag for the various status bits of this action Status DINT For this member: Q A Use this bit: 30 31
To organize the logic for an action, first describe the action in pseudocode. If you are unfamiliar with pseudocode, follow these guidelines: Use a series of short statements that describe exactly what should happen.
5-22
Use terms or symbols such as: if, then, otherwise, until, and, or, =, >, <. Sequence the statements in the order that they should execute. If necessary, name the conditions to check first (when 1st) and then the action to take second (what 2nd). Enter the pseudocode into the body of the action. After you enter the pseudocode, you can: Refine the pseudocode so it executes as structured text. Use the pseudocode to design your logic and leave the pseudocode as comments. Since all structured text comments download to the controller, your pseudocode is always available as documentation for the action. To convert the pseudocode to structured text comments, add the following comment symbols:
For a comment: on a single line that spans more than one line Use one of these formats: //comment (*start of comment . . . end of comment*)
5-23
Each action (non-boolean and boolean) uses a qualifier to determine when it starts and stops. The default qualifier is Non-Stored. The action starts when the step is activated and stops when the step is deactivated. To change when an action starts or stops, assign a different qualifier:
Table 5.1 Choose a Qualifier for an Action If you want the action to: start when the step is activated And: stop when the step is deactivated execute only once stop before the step is deactivated or when the step is deactivated stay active until a Reset action turns off this action stay active until a Reset action turns off this action or a specific time expires, even if the step is deactivated start a specific time after the step is activated and the step is still active stop when the step is deactivated stay active until a Reset action turns off this action D DS SD P P0 R Time Delayed Delayed and Stored Stored and Time Delayed Pulse Pulse (Falling Edge) Reset Then assign this Which qualifier: means: N P1 L S SL Non-Stored Pulse (Rising Edge) Time Limited Stored Stored and Time Limited
start a specific time after the step is activated, stay active until a Reset action turns off this action even if the step is deactivated before this time execute once when the step is activated start when the step is deactivated turn off (reset) a stored action: S SL DS SD Stored Stored and Time Limited Delayed and Stored Stored and Time Delayed execute once when the step is deactivated execute only once
5-24
The transition is the physical conditions that must occur or change in order to go to the next step.
transition
steps transitions
selection branch
transitions
simultaneous branch
transitions
5-25
Here are two examples of transitions: EXAMPLE You want to: a. Turn on 2 compressors. When a compressor is on, the Device1State bit is on. b. When both compressors are on, go to the next step. Solution:
Init Init_Done compressor_1.Device1State = on (1) and
EXAMPLE
You want to: a. Package the product. When the product is in the package, the package_done bit turns on. b. Pack the product either 8 per carton or 16 per carton. Solution:
Package
carton_16
To override the state of a transition, see Force Logic Elements on page 14-1.
5-26
Transition Tag
Each transition uses a BOOL tag to represent the true or false state of the transition.
If the transition is: true false The value is: 1 0 And: The SFC goes to the next step. The SFC continues to execute the current step.
bool_tag_a
dint_tag_a > 8
5-27
Call a Subroutine
To use a subroutine to control a transition, include an End Of Transition (EOT) instruction in the subroutine. The EOT instruction returns the state of the conditions to the transition, as shown below.
3 1
JSR - or -
If condition_1 & condition_2 & condition_3 then BOOL_tag := 1; Else BOOL_tag := 0; End_if;
EOT(BOOL_tag);
1. Call a subroutine. 2. Check for the required conditions. When those conditions are true, turn on a BOOL tag. 3. Use an EOT instruction to set the state of the transition equal to the value of the BOOL tag. When the BOOL tag is on (true), the transition is true.
5-28
Each step of the SFC includes a millisecond timer that runs whenever the step is active. Use the timer to: signal when the step has run for the required time and the SFC should go to the next step signal when the step has run too long and the SFC should go to an error step
Figure 5.3 The following diagram shows the action of the timer and associated bits of a step:
step_name.X
step_name.PRE
step_name.T
step_name.DN
1 Description:
1. Step becomes active. X bit turns on. Timer (T) begins to increment. 2. Timer reaches the Preset (PRE) value of the step. DN bit turns on. Timer continues to increment. 3. Step becomes inactive. X bit turns off. Timer retains its value. DN remains on. 4. Step becomes active. X bit turns on. Timer clears and then begins to increment. DN bit turns off.
5-29
Figure 5.4 The following diagram shows the action of the low and high alarms for a step:
step_name.AlarmHigh
step_name.AlarmLow
Description: 1. AlarmEn is on. To use the low and high alarms turn this bit on. Turn the bit on via the properties dialog box or the tag for the step. 2. Step becomes active. X bit turns on. Timer (T) begins to increment. 3. Step becomes inactive. X bit turns off. Timer retains its value. Since Timer is less than LimitLow, AlarmLow bit turns on.
5-30
Description: 4. Step becomes active. X bit turns on. Timer clears and then begins to increment. AlarmLow stays on. (You have to manually turn it off.) 5. Timer reaches the LimitHigh value of the step. AlarmHigh bit turns on. Timer continues to increment. 6. Step becomes inactive. X bit turns off. Timer retains its value. AlarmHigh stays on. (You have to manually turn it off.)
Here is an example of the use of the Preset time of a step. EXAMPLE Functional specification says: a. Cook the ingredients in the tank for 20 seconds. b. Empty the tank. Solution:
Cook Cook_Done Empty_Tank Cook.PRE = 20000 ms Cook.DN = on (1)
5-31
Here is an example of the use of the high alarm of a step. EXAMPLE Functional specification says: a. Home 8 devices. b. If all 8 devices are not home within 20 seconds, then shutdown the system. Solution:
Init Init.LimitHigh = 20000 ms
Init_OK Step_1
Init_Not_OK Shutdown
Init.AlarmHigh
5-32
When the SFC leaves a step, you have several options on how to turn off devices that the step turned on.
Programmatic Reset
Automatic Reset
Each option requires you to make the following choices: 1. Choose a last scan option. 2. Based on the last scan option, develop your logic so that the last scan returns data to the desired values.
5-33
5-34
The following table compares the different options for handling the last scan of a step:
Characteristic: execution actions During the last scan of a step, this option does the following: Dont scan Only P and P0 actions execute. They execute according to their logic. Programmatic reset All actions execute according to their logic. Automatic reset P and P0 actions execute according to their logic. All other actions execute in postscan mode. On the next scan of the routine, the P and P0 actions execute in postscan mode. retention of data values All data keeps its current values. All data keeps its current values. Data reverts to its values for postscan. Tags to the left of [:=] assignments clear to zero. method for clearing data Use P and P0 actions. Use either: status bits of the step or action to condition logic P and P0 actions reset of a nested SFC A nested SFCs remains at its current step. A nested SFCs remains at its current step. Use either: [:=] assignment (non-retentive assignment) instructions that clear their data during postscan For the Restart Position property, if you choose the Restart at initial step option, then: A nested SFC resets to its initial step. The X bit of a stop element in a nested SFC clears to zero.
5-35
2. Use a P0 Pulse (Falling Edge) action to clear the required data. Make sure that the P0 action or actions are last in the order of actions for the step. During the last scan of the step, the Dont scan option executes only P and P0 actions. The assignments and instructions of the actions execute according to their logic conditions. The controller does not execute a postscan of assignments or instructions. When the SFC leaves the step, all data keeps its current values. The following example uses an action to turn on a conveyor at the start of a step. A different action turns off the conveyor at the end of the step. Use the Dont Scan Option
EXAMPLE
This action turns on the conveyor. When conveyor_state turns on, the conveyor turns on. Before the SFC leaves the step, the P0 action turns off the conveyor. On the last scan of the step, conveyor_state turns off. This turns off the conveyor.
5-36
During the last scan of the step, the Programmatic reset option executes all assignments and instructions according to logic conditions. The controller does not postscan the assignments or instructions. When the SFC leaves the step, all data keeps its current value. The following example uses a single action to turn on and off a conveyor. The LS bit of the step conditions the execution of the logic. See SFC_STEP Structure on page 5-8. Use the Programmatic Reset Option and the LS Bit
EXAMPLE
When the step is not on its last scan (conveyor_fwd.LS = 0), this statement turns on conveyor_state. When conveyor_state turns on, the conveyor turns on. On the last scan of the step (conveyor_fwd.LS =1), this statement turns off conveyor_state. When conveyor_state turns off, the conveyor turns off.
For an action that uses one of the stored qualifiers, use the Q bit of the action to condition your logic. See SFC_ACTION Structure on page 5-20. Use the Programmatic Reset Option and the Q Bit
EXAMPLE
When the action is not on its last scan (conveyor_start.Q =1), this statement turns on conveyor_state. When conveyor_state turns on, the conveyor turns on. On the last scan of the action (conveyor_start.Q =0), this statement turns off conveyor_state. When conveyor_state turns off, the conveyor turns off.
You can also use a P0 Pulse (Falling Edge) action to clear data. The following example uses an action to turn on a conveyor at the start of a step. A different action turns off the conveyor at the end of the step.
5-37
EXAMPLE
This action turns on the conveyor. When conveyor_state turns on, the conveyor turns on. Before the SFC leaves the step, the P0 action turns off the conveyor. On the last scan of the step, conveyor_state turns off. This turns off the conveyor.
5-38
reset any nested SFC (SFC that an action calls as a subroutine) IMPORTANT The postscan of an action actually occurs when the action goes from active to inactive. Depending on the qualifier of the action, the postscan could occur before or after the last scan of the step.
As a general rule, the postscan executes instructions as if all conditions are false. For example, the Output Energize (OTE) instruction clears its data during postscan. Some instructions do not follow the general rule during postscan. For a description of how a specific instruction executes during postscan, see the following manuals: Logix5000 Controllers General Instructions Reference Manual, publication 1756-RM003 Logix5000 Controllers Process and Drives Instructions Reference Manual, publication 1756-RM006 Logix5000 Controllers Motion Instruction Set Reference Manual, publication 1756-RM007
5-39
Here is an example that uses a non-retentive assignment to control a conveyor. It turns on a conveyor at the start of a step and automatically turns off the conveyor when the step is done. Automatically Clear Data
EXAMPLE
This action turns on the conveyor. When conveyor_state turns on, the conveyor turns on.
5-40
Clean Transfr_Out
Transfer_In
Note the step that turns on the device and the step that turns off the device.
Paint
Clean Later, define a Stored and Reset Action pair to control the device. Use One Large Step Paint Use one large step that contains all the actions that occur while the device is on. Transfr_Out
turn off the fan
5-41
EXAMPLE
Transfer_In
Paint_Flow
Air_Flow
Elec_Charg
Fan
Clean Transfr_Out
5-42
more steps
Action_Name
same name as the stored action
When the SFC leaves the step that stores the action, RSLogix 5000 software continues to show the stored action as active. (By default, a green border displays around the action.) This lets you know that the SFC is executing the logic of that action.
5-43
To use a stored action, follow these guidelines: The Reset action only turns off the stored action. It does not automatically turn off the devices of the action. To turn off the device, follow the Reset action with another action that turns off the device. Or use the Automatic reset option described on page 5-38. Before the SFC reaches a stop element, reset any stored actions that you do not want to execute at the stop. An active stored action remains active even if the SFC reaches a stop. Use caution when you jump in between a step that stores an action and a step that resets the action. Once you reset an action, it only starts when you execute the step that stores the action. In the following example, steps 1 - 4 require a fan to be on. At the end of step_4, the fan is reset (turned off). When the SFC jumps back to step_3, the fan remains off.
step_1
step_2
step_4
To turn the fan back on, the SFC has to jump back to step_1.
5-44
EXAMPLE
For additional information on how to nest an SFC, see Nest an SFC on page 5-49.
5-45
Once an SFC completes its last step, it does not automatically restart at the first step. You must tell the SFC what to do when it finishes the last step.
See Wire to a Previous Stepon page 5-17. stop and wait for a command to Use a Stop Element. restart See Use a Stop Element on page 5-45.
5-46
EXAMPLE
When the SFC reaches last_step and process_done is true, the execution of the SFC stops.
5-47
The following example shows the use of the SFC Reset (SFR) instruction to restart the SFC and clear the X bit of the stop element. Restart (Reset) the SFC If SFC_a_stop.X = on (SFC_a is at the stop) and SFC_a_reset = on (time to reset the SFC) then for one scan (ons[0] = on): Reset SFC_a to SFC_a_Step_1 SFC_a_stop.X = 0
EXAMPLE
SFC_STOP Structure
Each stop uses a tag to provide the following information about the stop element:
If you want to: determine when the SFC is at the stop Then check or set this member: X Data type: Details: BOOL When the SFC reaches the stop, the X bit turns on. The X bit clears if you configure the SFCs to restart at the initial step and the controller changes from program to run mode. In a nested SFC, the X bit also clears if you configure the SFCs for automatic reset and the SFC leaves the step that calls the nested SFC. determine the target of an SFC Reset (SFR) instruction Reset BOOL An SFC Reset (SFR) instruction resets the SFC to a step or stop that the instruction specifies. The Reset bit indicates to which step or stop the SFC will go to begin executing again. Once the SFC executes, the Reset bit clears. determine how many times a stop has become active Count DINT This is not a count of scans of the stop. The count increments each time the stop becomes active. It increments again only after the stop goes inactive and then active again. The count resets only if you configure the SFC to restart at the initial step. With that configuration, it resets when the controller changes from program mode to run mode.
5-48
If you want to: use one tag for the various status bits of this stop
Data type: Details: DINT For this member: Reset X Use this bit: 22 31
5-49
Nest an SFC
One method for organizing your project is to create one SFC that provides a high-level view of your process. Each step of that SFC calls another SFC that performs the detailed procedures of the step (nested SFC). The following figure shows one way to nest an SFC. In this method, the last scan option of the SFC is configured for either Programmatic reset or Dont scan. If you configure the SFC for Automatic reset, then step 1 is unnecessary.
SFC_a
SFC_b
3 1. Reset the nested SFC: The SFR instruction restarts the SFC_b at SFC_b_Step_1. Each time the SFC_a leaves this step and then returns, you have to reset the SFC_b. The action also clears the X bit of the stop element. 2. Call the SFC_b. 3. Stop the SFC_b. This sets the X bit of the stop element. 4. Use the X bit of the stop element to signal that the SFC_b is done and it is time to go to the next step.
Publication 1756-PM001G-EN-P - March 2004
5-50
Pass Parameters
To pass parameters to or from an SFC, place a Subroutine/Return element in the SFC.
Input Parameters Return Parameters
SFC_b
By default, an SFC executes a step or group of simultaneous steps and then returns to the operating system (OS) or the calling routine (JSR).
default
You have the option of letting the SFC execute until it reaches a false transition. If several transitions are true at the same time, this option reduces the time to get to the desired step. Use the Execute until FALSE transition option only when: 1. You dont have to update JSR parameters before each step. Parameters update only when the SFC returns to the JSR. See Pass Parameters on page 5-50. 2. A false transition occurs within the watchdog timer for the task. If the time that it takes to return to a JSR and complete the rest of the task is greater than the watchdog timer, a major fault occurs.
5-51
For a detailed diagram of the execution of each option, see Figure 5.9 on page 5-55.
Two optional instructions are available that give you further control over the execution of your SFC:
If you want to: pause an SFC reset an SFC to a specific step or stop Then use this instruction: Pause SFC (SFP) Reset SFC (SFR)
Both instructions are available in the ladder logic and structured text programming languages. For more information, use either of the following resources: In RSLogix 5000 software, from the Help menu, choose Instruction Help. Look in the Program Control Instructions category. See Logix5000 Controllers General Instructions Reference Manual, publication 1756-RM003.
Execution Diagrams
The following diagrams show the execution of an SFC with different organizations of steps or different selections of execution options. Use the diagrams if you require a more detailed understanding of how your SFC executes.
See page: 5-52 5-53 5-54 5-54 5-55
For a diagram of the: Execution of a Sequence Execution of a Simultaneous Branch Execution of a Selection Branch When parameters enter and exit an SFC Options for Execution Control
5-52
step_1
false
return to
step_1
last scan
step_2
false
return to
step_2
last scan
5-53
step_1
last scan
step_2
step_3
tran_2 true
false
return to
step_2
step_3
false
return to
step_2
last scan
step_3
5-54
return to
step_1
step_1
last scan
step_2 return to
step_3 return to
false
false
step_2
step_3
last scan
false
tran_1 true
return parameters
return to
input parameters
step_1
last scan
5-55
This
step_1 tran_1 step_2 tran_2
false
return to
tran_1 true
false
return to
step_1
step_1
last scan
step_2
step_2 return to
false
tran_2 true
false
return to
step_2
step_2
last scan
5-56
Notes:
Chapter
Use this procedure to enter a sequential function chart (SFC) into RSLogix 5000 software. Enter the SFC as you design it. Or first design the SFC and then enter it. To design the SFC, see Design a Sequential Function Chart on page 5-1.
Before you use this procedure, make sure you are able to perform the following tasks:
Navigate the Controller Organizer Identify the Programming Languages That Are Installed
For more information on any of those tasks, see Getting Started on page 1-1.
6-2
To program an SFC: Add an SFC Element Create a Simultaneous Branch Create a Selection Branch Set the Priorities of a Selection Branch Return to a Previous Step Rename a Step Configure a Step Rename a Transition Program a Transition Add an Action Rename an Action Configure an Action Program an Action Assign the Execution Order of Actions Document the SFC Show or Hide Text Boxes or Tag Descriptions Configure the Execution of the SFC Verify the Routine
6-3
To add an element to your SFC, you have these options: Add and Manually Connect Elements Add and Automatically Connect Elements Drag and Drop Elements
green dot
3. To wire (connect) two elements together, click a pin on one of the elements A and then click the pin on the other element B . A green dot shows a valid connection point.
6-4
green dot
6-5
2. To add a path to the branch, select (click) the first step of the path that is to the left of where you want to add the new path. Then click the button.
A B
green dot
3. To wire the simultaneous branch to the preceding transition, click the bottom pin of the transition A and then click the horizontal line of the branch B . A green dot shows a valid connection point.
button.
6-6
B A
green dot
4. To wire the simultaneous branch to the transition, click the top pin of the transition A and then click the horizontal line of the branch B . A green dot shows a valid connection point.
2. To add a path to the branch, select (click) the first transition of the path that is to the left of where you want to add the new path. Then click the button.
A B
green dot
3. To wire the selection branch to the preceding step, click the bottom pin of the step A and then click the horizontal line of the branch B . A green dot shows a valid connection point.
6-7
button.
B A
green dot
4. To wire the selection branch to the step, click the top pin of the step A and then click the horizontal line of the branch B . A green dot shows a valid connection point.
6-8
By default, the SFC checks the transitions that start a selection branch from left to right. If you want to check a different transition first, assign a priority to each path of the selection branch. For example, it is a good practice to check for error conditions first. Then check for normal conditions. To assign priorities to a selection branch: 1. Right click the horizontal line that starts the branch and choose Set Sequence Priorities.
2.
3. 4.
2. Clear (uncheck) the Use default priorities check box. 3. Select a transition. 4. Use the Move buttons to raise or lower the priority of the transition. 5. When all the transitions have the desired priority, choose When you clear (uncheck) the Use default priorities check box, numbers show the priority of each transition.
6-9
To jump to a different step in your SFC: Connect a Wire to the Step Hide a Wire Show a Hidden Wire
1.
Then click here.
2.
Drag the horizontal bar here.
Click here.
green dot
6-10
Hide a Wire
If a wire gets in the way of other parts of your SFC, hide the wire to make the SFC easier to read. To hide a wire, right-click the wire and choose Hide Wire.
To see the SFC element to which the wire goes, click the grid location on the wire.
hidden wire
6-11
Rename a Step
Each step uses a tag to store configuration and status information about the step. To rename the tag of the step: 1. Click the button of the step.
3.
Configure a Step
To configure a step, you have these options: Assign the Preset Time for a Step Configure Alarms for a Step Use an Expression to Calculate a Time
2. Type the time for the step, in milliseconds. 3. Choose When the step is active for the preset time (Timer = Preset), the DN bit of the step turns on. To calculate the preset time for a step at runtime, see Use an Expression to Calculate a Time on page 6-12.
6-12
3. 4.
3. Type the time for the high alarm, in milliseconds. 4. Type the time for the low alarm, in milliseconds. 5. Choose To calculate the time for an alarm at runtime, see Use an Expression to Calculate a Time on page 6-12.
6-13
2.
3.
5.
4. Type a numeric expression that defines the time. Use the buttons alongside the dialog box to help you complete the expression. For information on numeric expressions, see Expressions on page 7-4. 5. Choose 6. To close the Step Properties dialog box, choose
6-14
Rename a Transition
Each transition uses a tag to store the status of the transition. To rename the tag of the transition: 1. Click the button of the transition.
3.
Program a Transition
To program a transition, you have these options: Enter a BOOL Expression Call a Subroutine
BOOL_expression
6-15
The following example shows three transitions that use a BOOL expression. EXAMPLE Enter a BOOL Expression
Call a Subroutine
1. Right-click the transition and choose Set JSR.
2.
2. Choose the routine that contains the logic for the transition. 3. Choose
JSR(routine_name)
6-16
Add an Action
Right-click the step in which the action executes and choose Add Action.
Rename an Action
To change the name of an action to something that is specific to your application: 1. Click the button of the action.
3.
6-17
Configure an Action
To configure an action, you have these options: Change the Qualifier of an Action Calculate a Preset Time at Runtime Mark an Action as a Boolean Action
2. 3.
2. Assign the qualifier for the action. 3. If you chose a timed qualifier, type the time limit or delay for the action, in milliseconds. Timed qualifiers include: L Time Limited SL Stored and Time Limited D Time Delayed DS Delayed and Stored SD Stored and Time Delayed 4. Choose
6-18
2.
3.
5.
4. Type a numeric expression that defines the preset time. Use the buttons alongside the dialog box to help you complete the expression. For information on numeric expressions, see Expressions on page 7-4. 5. Choose 6. To close the Action Properties dialog box, choose
6-19
2.
Program an Action
To program an action, you have these options: Enter Structured Text Call a Subroutine
1. Double-click the text area of the action. 2. Type the required structured text. 3. To close the text entry window, press [Ctrl] + [Enter].
6-20
//comment statement;
6-21
Call a Subroutine
Use a Jump to Subroutine (JSR) instruction to execute a subroutine when the action is active. 1. In the SFC, right-click the text entry area of the action and choose Set JSR.
2.
3.
4.
2. Choose the routine that you want to call. 3. To pass a parameter to the routine, click the empty Input Parameters text box. Then use the down arrow to choose the tag that contains the parameter. 4. To receive a parameter from the routine, click the empty Return Parameters text box. Then use the down arrow to choose the tag in which to store the parameter from the routine. 5. Choose
6-22
To change the order in which an action executes, drag the action to the desired location in the sequence. A green bar shows a valid placement location. For example:
6-23
transition
download the documentation to the controller have the option of showing or hiding the documentation position the documentation anywhere in the SFC
Add Structured Text Comments Add a Text Box -orAdd a Tag Description Add Structured Text Comments Add a Text Box -orAdd a Tag Description
/*comment*/ that spans more than one line (*start of comment . . . end of comment*)
6-24
For more information, see Comments on page 7-28. To enter the comments:
1. Double-click the text area of the action. 2. Type the comments. 3. To close the text entry window, press [Ctrl] + [Enter].
//comment statement;
3.
3. Type the description for the element (tag). 4. Choose 5. Drag the description box to the desired location on the SFC.
6-25
2. Drag the text box to a location near the element to which it applies. 3. Double-click the text box and type the note. Then press [Ctrl] + [Enter]. 4. As you move the element on the SFC, what do you want the text box to do?
If you the text box to: stay in the same spot move with the element to which it applies Then: Stop. You are done. Go to step 5.
B A green dot
5. Click the pin symbol in the text box and then click the SFC element to which you want to attach the text box. A green dot shows a valid connection point.
6-26
You have the option of showing or hiding both text boxes and tag descriptions. If you choose to show descriptions, the SFC window only shows the descriptions for steps, transitions, and stops (not actions). To show or hide text boxes or descriptions, you have these options: Show or Hide Text Boxes or Descriptions Hide an Individual Tag Description
2.
2. Under SFC Editor, choose the Display category. 3. Choose the desired option.
If you want to: show text boxes or descriptions hide text boxes or descriptions Then: check the corresponding check box clear (uncheck) the corresponding check box
4. Choose
6-27
3. Choose To show other descriptions, see Show or Hide Text Boxes or Descriptions on page 6-26.
6-28
The SFC Execution tab of the controller properties lets you configure the following: what to do when a transition is true where to start after a transition to the run mode or recovery from a power loss what to do on the last scan of a step
1.
1. On the Online toolbar, click controller properties button. 2. Click the SFC Execution tab.
2.
3.
4.
5.
3. Choose whether or not to return to the OS/JSR if a transition is true. 4. Choose where to restart the SFC after a transition to run mode or recovery from a power loss. 5. Choose what to do on the last scan of a step. 6. Choose
6-29
As you program your routine, periodically verify your work: 1. In the top-most toolbar of the RSLogix 5000 window, click 2. If any errors are listed at the bottom of the window: a. To go to the first error or warning, press [F4]. b. Correct the error according to the description in the Results window. c. Go to step 1. 3. To close the Results window, press [Alt] + [1].
6-30
Notes:
6-31
Notes:
6-32
Chapter
Use this chapter to write and enter structured text for a: structured text routine action of a sequential function chart (SFC) transition of sequential function chart (SFC)
Structured text is a textual programming language that uses statements to define what to execute. Structured text is not case sensitive. Use tabs and carriage returns (separate lines) to make your structured text easier to read. They have no effect on the execution of the structured text. Structured text can contain these components:
Definition: Use an assignment statement to assign values to tags. The := operator is the assignment operator. Terminate the assignment with a semi colon ;. An expression is part of a complete assignment or construct statement. An expression evaluates to a number (numerical expression) or to a true or false state (BOOL expression). An expression contains: tags immediates operators functions A named area of the memory where data is stored (BOOL, SINT,INT,DINT, REAL, string). A constant value. A symbol or mnemonic that specifies an operation within an expression. When executed, a function yields one value. Use parentheses to contain the operand of a function. Even though their syntax is similar, functions differ from instructions in that functions can only be used in expressions. Instructions cannot be used in expressions.
7-2
Definition: An instruction is a standalone statement. An instruction uses parenthesis to contain its operands. Depending on the instruction, there can be zero, one, or multiple operands. When executed, an instruction yields one or more values that are part of a data structure. Terminate the instruction with a semi colon ;. Even though their syntax is similar, instructions differ from functions in that instructions cannot be used in expressions. Functions can only be used in expressions.
A conditional statement used to trigger structured text code (i.e, other statements). Terminate the construct with a semi colon ;.
IF...THEN CASE FOR...DO WHILE...DO REPEAT...UNTIL EXIT //comment (*start of comment . . . end of comment*) /*start of comment . . . end of comment*/
Text that explains or clarifies what a section of structured text does. Use comments to make it easier to interpret the structured text. Comments do not affect the execution of the structured text. Comments can appear anywhere in structured text.
Assignments
Use an assignment to change the value stored within a tag. An assignment has this syntax: tag := expression ; where:
Component: tag := expression Description: represents the tag that is getting the new value the tag must be a BOOL, SINT, INT, DINT, or REAL is the assignment symbol represents the new value to assign to the tag If tag is this data type: BOOL SINT INT DINT REAL ; ends the assignment Use this type of expression: BOOL expression numeric expression
7-3
The tag retains the assigned value until another assignment changes the value. The expression can be simple, such as an immediate value or another tag name, or the expression can be complex and include several operators and/or functions. See the next section Expressionson page 7-4 for details.
7-4
To add or insert a string of characters to a string tag, use either of these ASCII string instructions:
To: add characters to the end of a string insert characters into a string Use this instruction: CONCAT INSERT
Expressions
An expression is a tag name, equation, or comparison. To write an expression, use any of the following: tag name that stores the value (variable) number that you enter directly into the expression (immediate value) functions, such as: ABS, TRUNC operators, such as: +, -, <, >, And, Or As you write expressions, follow these general rules: Use any combination of upper-case and lower-case letter. For example, these three variations of "AND" are acceptable: AND, And, and. For more complex requirements, use parentheses to group expressions within expressions. This makes the whole expression easier to read and ensures that the expression executes in the desired sequence. See Determine the order of executionon page 7-10.
7-5
In structured text, you use two types of expressions: BOOL expression: An expression that produces either the BOOL value of 1 (true) or 0 (false). A bool expression uses bool tags, relational operators, and logical operators to compare values or check if conditions are true or false. For example, tag1>65. A simple bool expression can be a single BOOL tag. Typically, you use bool expressions to condition the execution of other logic. Numeric expression: An expression that calculates an integer or floating-point value. A numeric expression uses arithmetic operators, arithmetic functions, and bitwise operators. For example, tag1+5. Often, you nest a numeric expression within a bool expression. For example, (tag1+5)>65. Use the following table to choose operators for your expressions:
If you want to: Calculate an arithmetic value Compare two values or strings Check if conditions are true or false Compare the bits within values Then: Use arithmetic operators and functionson page 7-6. Use relational operatorson page 7-7. Use logical operatorson page 7-9. Use bitwise operatorson page 7-10.
7-6
Arithmetic functions perform math operations. Specify a constant, a non-boolean tag, or an expression for the function.
For: absolute value arc cosine arc sine arc tangent cosine radians to degrees natural log log base 10 degrees to radians sine square root tangent truncate Use this function: ABS (numeric_expression) ACOS (numeric_expression) ASIN (numeric_expression) ATAN (numeric_expression) COS (numeric_expression) DEG (numeric_expression) LN (numeric_expression) LOG (numeric_expression) RAD (numeric_expression) SIN (numeric_expression) SQRT (numeric_expression) TAN (numeric_expression) TRUNC (numeric_expression) Optimal data type: DINT, REAL REAL REAL REAL REAL DINT, REAL REAL REAL DINT, REAL REAL DINT, REAL REAL DINT, REAL
7-7
For example:
Use this format: Example: For this situation: value1 operator value2 If gain_4 and gain_4_adj are DINT tags and your specification says: "Add 15 to gain_4 and store the result in gain_4_adj." If alarm and high_alarm are DINT tags and your specification says: Negate high_alarm and store the result in alarm. If overtravel and overtravel_POS are DINT tags and your specification says: Calculate the absolute value of overtravel and store the result in overtravel_POS. If adjustment and position are DINT tags and sensor1 and sensor2 are REAL tags and your specification says: Find the absolute value of the average of sensor1 and sensor2, add the adjustment, and store the result in position. Youd write: gain_4_adj := gain_4+15; alarm:= -high_alarm; overtravel_POS := ABS(overtravel);
operator value1
function(numeric_expression)
7-8
For example:
Use this format: Example: For this situation: value1 operator value2 stringtag1 operator stringtag2 char1 operator char2 To enter an ASCII character directly into the expression, enter the decimal value of the character. bool_tag := bool_expressions If temp is a DINT tag and your specification says: If temp is less than 100 then If bar_code and dest are string tags and your specification says: If bar_code equals dest then If bar_code is a string tag and your specification says: If bar_code.DATA[0] equals A then Youd write: IF temp<100 THEN... IF bar_code=dest THEN...
IF bar_code.DATA[0]=65 THEN...
If count and length are DINT tags, done is a BOOL tag, and your specification says If count is greater than or equal to length, you are done counting.
Hex Codes $31$61$62 $31$62 $41 $41$42 $42 $61 $61$62 a>B AB < B
1b A AB B a ab
Strings are equal if their characters match. Characters are case sensitive. Upper case A ($41) is not equal to lower case a ($61). For the decimal value and hex code of a character, see the back cover of this manual.
7-9
For example:
Use this format: Example: For this situation:
BOOLtag NOT BOOLtag expression1 & expression2
Youd write:
If photoeye is a BOOL tag and your specification IF photoeye THEN... says: If photoeye_1 is on then If photoeye is a BOOL tag and your specification IF NOT photoeye THEN... says: If photoeye is off then If photoeye is a BOOL tag, temp is a DINT tag, and your specification says: If photoeye is on and temp is less than 100 then. If photoeye is a BOOL tag, temp is a DINT tag, and your specification says: If photoeye is on or temp is less than 100 then. If photoeye1 and photoeye2 are BOOL tags and your specification says: If: photoeye1 is on while photoeye2 is off or photoeye1 is off while photoeye2 is on then" IF photoeye & (temp<100) THEN... IF photoeye OR (temp<100) THEN... IF photoeye1 XOR photoeye2 THEN...
expression1 OR expression2
open := photoeye1 & If photoeye1 and photoeye2 are BOOL tags, open is a BOOL tag, and your specification says: photoeye2; If photoeye1 and photoeye2 are both on, set open to true.
7-10
For example:
Use this format: Example: For this situation: value1 operator value2 If input1, input2, and result1 are DINT tags and your specification says: Calculate the bitwise result of input1 and input2. Store the result in result1. Youd write: result1 := input1 AND input2;
7-11
Instructions
Structured text statements can also be instructions. See the Locator Table at the beginning of this manual for a list of the instructions available in structured text. A structured text instruction executes each time it is scanned. A structured text instruction within a construct executes every time the conditions of the construct are true. If the conditions of the construct are false, the statements within the construct are not scanned. There is no rung-condition or state transition that triggers execution. This differs from function block instructions that use EnableIn to trigger execution. Structured text instructions execute as if EnableIn is always set. This also differs from relay ladder instructions that use rung-condition-in to trigger execution. Some relay ladder instructions only execute when rung-condition-in toggles from false to true. These are transitional relay ladder instructions. In structured text, instructions will execute each time they are scanned unless you pre-condition the execution of the structured text instruction. For example, the ABL instruction is a transitional instruction in relay ladder. In this example, the ABL instruction only executes on a scan when tag_xic transitions from cleared to set. The ABL instruction does not execute when tag_xic stays set or when tag_xic is cleared.
In structured text, if you write this example as: IF tag_xic THEN ABL(0,serial_control); END_IF; the ABL instruction will execute every scan that tag_xic is set, not just when tag_xic transitions from cleared to set.
7-12
If you want the ABL instruction to execute only when tag_xic transitions from cleared to set, you have to condition the structured text instruction. Use a one shot to trigger execution.
osri_1.InputBit := tag_xic; OSRI(osri_1);
Constructs
If you want to: do something if or when specific conditions occur select what to do based on a numerical value
do something a specific number of times before doing anything else keep doing something as long as certain conditions are true keep doing something until a condition is true
7-13
IF...THEN
Operands:
Structured Text
IF bool_expression THEN <statement>; END_IF;
Type: BOOL
Enter: BOOL tag or expression that evaluates to a BOOL value (BOOL expression)
. . .
optional
. . .
optional
ELSE <statement>;
. . .
END_IF;
To use ELSIF or ELSE, follow these guidelines: 1. To select from several possible groups of statements, add one or more ELSIF statements. Each ELSIF represents an alternative path. Specify as many ELSIF paths as you need. The controller executes the first true IF or ELSIF and skips the rest of the ELSIFs and the ELSE. 2. To do something when all of the IF or ELSIF conditions are false, add an ELSE statement.
7-14
The following table summarizes different combinations of IF, THEN, ELSIF, and ELSE.
If you want to: do something if or when conditions are true choose from alternative statements (or groups of statements) based on input conditions And: do nothing if conditions are false do nothing if conditions are false assign default statements if all conditions are false Then use this construct IFTHEN IFTHENELSIF IFTHENELSIFELSE
Arithmetic Status Flags: not affected Fault Conditions: none Example 1: IFTHEN
If you want this: IF rejects > 3 then conveyor = off (0) alarm = on (1) Enter this structured text: IF rejects > 3 THEN conveyor := 0; alarm := 1; END_IF;
Example 2: IFTHENELSE
If you want this: If conveyor direction contact = forward (1) then light = off Otherwise light = on Enter this structured text: IF conveyor_direction THEN light := 0; ELSE light [:=] 1; END_IF;
The [:=] tells the controller to clear light whenever the controller: enters the RUN mode leaves the step of an SFC if you configure the SFC for Automatic reset (This applies only if you embed the assignment in the action of the step or use the action to call a structured text routine via a JSR instruction.)
7-15
Example 3: IFTHENELSIF
If you want this: If sugar low limit switch = low (on) and sugar high limit switch = not high (on) then inlet valve = open (on) Until sugar high limit switch = high (off) Enter this structured text: IF Sugar.Low & Sugar.High THEN Sugar.Inlet [:=] 1; ELSIF NOT(Sugar.High) THEN Sugar.Inlet := 0; END_IF;
The [:=] tells the controller to clear Sugar.Inlet whenever the controller: enters the RUN mode leaves the step of an SFC if you configure the SFC for Automatic reset (This applies only if you embed the assignment in the action of the step or use the action to call a structured text routine via a JSR instruction.)
Example 4: IFTHENELSIFELSE
If you want this: If tank temperature > 100 then pump = slow If tank temperature > 200 then pump = fast otherwise pump = off ELSE pump.fast :=0; pump.slow :=0; pump.off :=1; END_IF; Enter this structured text: 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;
7-16
CASE...OF
Operands:
Structured Text
CASE numeric_expression OF selector1: statement; selectorN: statement; ELSE statement; END_CASE; selector
Operand:
numeric_ expression
immediate
IMPORTANT
If you use REAL values, use a range of values for a selector because a REAL value is more likely to be within a range of values than an exact match of one, specific value.
selector2 :
. . .
selector3 : <statement>;
. . .
ELSE <statement>;
optional
. . .
END_CASE;
See the table on the next page for valid selector values.
Publication 1756-PM001G-EN-P - March 2004
7-17
The CASE construct is similar to a switch statement in the C or C++ programming languages. However, with the CASE construct the controller executes only the statements that are associated with the first matching selector value. Execution always breaks after the statements of that selector and goes to the END_CASE statement.
7-18
Example
If you want this: If recipe number = 1 then Ingredient A outlet 1 = open (1) Ingredient B outlet 4 = open (1) If recipe number = 2 or 3 then Ingredient A outlet 4 = open (1) Ingredient B outlet 2 = open (1) If recipe number = 4, 5, 6, or 7 then Ingredient A outlet 4 = open (1) Ingredient B outlet 2 = open (1) If recipe number = 8, 11, 12, or 13 then Ingredient A outlet 1 = open (1) Ingredient B outlet 4 = open (1) Otherwise all outlets = closed (0)
ELSE Ingredient_A.Outlet_1 [:=]0; Ingredient_A.Outlet_4 [:=]0; Ingredient_B.Outlet_2 [:=]0; Ingredient_B.Outlet_4 [:=]0; END_CASE; 8,11..13 Ingredient_A.Outlet_1 :=1; Ingredient_B.Outlet_4 :=1; 4..7: Ingredient_A.Outlet_4 :=1; Ingredient_B.Outlet_2 :=1; 2,3:
The [:=] tells the controller to also clear the outlet tags whenever the controller: enters the RUN mode leaves the step of an SFC if you configure the SFC for Automatic reset (This applies only if you embed the assignment in the action of the step or use the action to call a structured text routine via a JSR instruction.)
7-19
FORDO
Operands:
Use the FORDO loop to do something a specific number of times before doing anything else.
Structured Text
FOR count:= initial_value TO final_value BY increment DO <statement>; END_FOR;
Operand: count
Type: SINT INT DINT SINT INT DINT SINT INT DINT SINT INT DINT
Format: tag
Description: tag to store count position as the FORDO executes must evaluate to a number specifies initial value for count specifies final value for count, which determines when to exit the loop (optional) amount to increment count each time through the loop If you dont specify an increment, the count increments by 1.
IMPORTANT
Make sure that you do not iterate within the loop too many times in a single scan. The controller does not execute any other statements in the routine until it completes the loop. If the time that it takes to complete the loop is greater than the watchdog timer for the task, a major fault occurs. Consider using a different construct, such as IF...THEN.
optional
If there are conditions when you want to exit the loop early, use other statements, such as an IF...THEN construct, to condition an EXIT statement.
7-20
The following diagrams show how a FOR...DO loop executes and how an EXIT statement leaves the loop early.
Done x number of times? no statement 1 statement 2 statement 3 statement 4 rest of the routine yes Done x number of times? no statement 1 statement 2 statement 3 statement 4 Exit ? no rest of the routine yes
yes
To stop the loop before the count reaches the last value, use an EXIT statement.
Example 1:
If you want this: Clear bits 0 - 31 in an array of BOOLs: 1. Initialize the subscript tag to 0. 2. Clear array[ subscript ] . For example, when subscript = 5, clear array[5]. 3. Add 1 to subscript. 4. If subscript is to 31, repeat 2 and 3. Otherwise, stop. Enter this structured text: For subscript:=0 to 31 by 1 do array[subscript] := 0; End_for;
7-21
Example 2:
If you want this: Enter this structured text:
SIZE(Inventory,0,Inventory_Items); A user-defined data type (structure) stores the following information about an item in your inventory: For position:=0 to Inventory_Items - 1 do Barcode ID of the item (string data type) Quantity in stock of the item (DINT data type) If Barcode = Inventory[position].ID then An array of the above structure contains an element for each Quantity := Inventory[position].Qty; different item in your inventory. You want to search the array for a specific product (use its bar code) and determine the Exit; quantity that is in stock. End_if; 1. Get the size (number of items) of the Inventory array and store the result in Inventory_Items (DINT tag). End_for; 2. Initialize the position tag to 0. 3. If Barcode matches the ID of an item in the array, then: a. Set the Quantity tag = Inventory[position].Qty. This produces the quantity in stock of the item. b. Stop. Barcode is a string tag that stores the bar code of the item for which you are searching. For example, when position = 5, compare Barcode to Inventory[5].ID. 4. Add 1 to position. 5. If position is to (Inventory_Items -1), repeat 3 and 4. Since element numbers start at 0, the last element is 1 less than the number of elements in the array. Otherwise, stop.
7-22
WHILEDO
Operands:
Use the WHILEDO loop to keep doing something as long as certain conditions are true.
Structured Text
WHILE bool_expression DO <statement>; END_WHILE;
Type: BOOL
IMPORTANT
Make sure that you do not iterate within the loop too many times in a single scan. The controller does not execute any other statements in the routine until it completes the loop. If the time that it takes to complete the loop is greater than the watchdog timer for the task, a major fault occurs. Consider using a different construct, such as IF...THEN.
If there are conditions when you want to exit the loop early, use other statements, such as an IF...THEN construct, to condition an EXIT statement.
7-23
The following diagrams show how a WHILE...DO loop executes and how an EXIT statement leaves the loop early.
BOOL expression true statement 1 statement 2 statement 3 statement 4 rest of the routine false BOOL expression true statement 1 statement 2 statement 3 statement 4 Exit ? no rest of the routine false
yes
While the bool_expression is true, the controller executes only the statements within the WHILEDO loop.
To stop the loop before the conditions are true, use an EXIT statement.
Example 1:
If you want this: The WHILE...DO loop evaluates its conditions first. If the conditions are true, the controller then executes the statements within the loop. This differs from the REPEAT...UNTIL loop because the REPEAT...UNTIL loop executes the statements in the construct and then determines if the conditions are true before executing the statements again. The statements in a REPEAT...UNTIL loop are always executed at least once. The statements in a WHILE...DO loop might never be executed. Enter this structured text: pos := 0; While ((pos <= 100) & structarray[pos].value <> targetvalue)) do pos := pos + 2; String_tag.DATA[pos] := SINT_array[pos]; end_while;
7-24
Example 2:
If you want this: 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. 1. Initialize Element_number to 0. 2. Count the number of elements in SINT_array (array that contains the ASCII characters) and store the result in SINT_array_size (DINT tag). 3. If the character at SINT_array[element_number] = 13 (decimal value of the carriage return), then stop. 4. Set String_tag[element_number] = the character at SINT_array[element_number]. 5. Add 1 to element_number. This lets the controller check the next character in SINT_array. 6. Set the Length member of String_tag = element_number. (This records the number of characters in String_tag so far.) 7. If element_number = SINT_array_size, then stop. (You are at the end of the array and it does not contain a carriage return.) 8. Go to 3. Enter this structured text: element_number := 0; SIZE(SINT_array, 0, SINT_array_size); While SINT_array[element_number] <> 13 do String_tag.DATA[element_number] := SINT_array[element_number]; element_number := element_number + 1; String_tag.LEN := element_number; If element_number = SINT_array_size then exit; end_if; end_while;
7-25
REPEATUNTIL
Operands:
Use the REPEATUNTIL loop to keep doing something until conditions are true.
Structured Text
REPEAT <statement>; UNTIL bool_expression END_REPEAT;
Type: BOOL
Enter: BOOL tag or expression that evaluates to a BOOL value (BOOL expression)
IMPORTANT
Make sure that you do not iterate within the loop too many times in a single scan. The controller does not execute any other statements in the routine until it completes the loop. If the time that it takes to complete the loop is greater than the watchdog timer for the task, a major fault occurs. Consider using a different construct, such as IF...THEN.
If there are conditions when you want to exit the loop early, use other statements, such as an IF...THEN construct, to condition an EXIT statement.
7-26
The following diagrams show how a REPEAT...UNTIL loop executes and how an EXIT statement leaves the loop early.
statement 1 statement 2 statement 3 statement 4 BOOL expression false rest of the routine false rest of the routine statement 1 statement 2 statement 3 statement 4 Exit ? no BOOL expression true
true
yes
While the bool_expression is false, the controller executes only the statements within the REPEATUNTIL loop.
To stop the loop before the conditions are false, use an EXIT statement.
Example 1:
If you want this: Enter this structured text:
pos := -1; The REPEAT...UNTIL loop executes the statements in the construct and then determines if the conditions are true before REPEAT executing the statements again. pos := pos + 2; This differs from the WHILE...DO loop because the WHILE...DO The WHILE...DO loop evaluates its conditions first. If the conditions are true, the controller then executes the statements within the loop. The statements in a REPEAT...UNTIL loop are always executed at least once. The statements in a WHILE...DO loop might never be executed. UNTIL ((pos = 101) OR (structarray[pos].value = targetvalue)) end_repeat;
7-27
Example 2:
If you want this: 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. 1. Initialize Element_number to 0. 2. Count the number of elements in SINT_array (array that contains the ASCII characters) and store the result in SINT_array_size (DINT tag). 3. Set String_tag[element_number] = the character at SINT_array[element_number]. 4. Add 1 to element_number. This lets the controller check the next character in SINT_array. 5. Set the Length member of String_tag = element_number. (This records the number of characters in String_tag so far.) 6. If element_number = SINT_array_size, then stop. (You are at the end of the array and it does not contain a carriage return.) 7. If the character at SINT_array[element_number] = 13 (decimal value of the carriage return), then stop. Otherwise, go to 3. Enter this structured text: element_number := 0; SIZE(SINT_array, 0, SINT_array_size); Repeat String_tag.DATA[element_number] := SINT_array[element_number]; element_number := element_number + 1; String_tag.LEN := element_number; If element_number = SINT_array_size then exit; end_if; Until SINT_array[element_number] = 13 end_repeat;
7-28
Comments
To make your structured text easier to interpret, add comments to it. Comments let you use plain language to describe how your structured text works. Comments do not affect the execution of the structured text. To add comments to your structured text:
To add a comment: on a single line at the end of a line of structured text within a line of structured text Use one of these formats: //comment (*comment*) /*comment*/ (*comment*) /*comment*/ that spans more than one line (*start of comment . . . end of comment*) /*start of comment . . . end of comment*/
For example:
Format: //comment Example: At the beginning of a line //Check conveyor belt direction IF conveyor_direction THEN... At the end of a line ELSE //If conveyor isnt moving, set alarm light light := 1; END_IF; (*comment*) Sugar.Inlet[:=]1;(*open the inlet*) IF Sugar.Low (*low level LS*)& Sugar.High (*high level LS*)THEN... (*Controls the speed of the recirculation pump. The speed depends on the temperature in the tank.*) IF tank.temp > 200 THEN... /*comment*/ Sugar.Inlet:=0;/*close the inlet*/ IF bar_code=65 /*A*/ THEN... /*Gets the number of elements in the Inventory array and stores the value in the Inventory_Items tag*/ SIZE(Inventory,0,Inventory_Items);
Chapter
Use this procedure to accomplish the following: develop the logic for a ladder logic routine enter the logic into the routine
Before you use this procedure, make sure you are able to perform the following tasks:
Navigate the Controller Organizer Identify the Programming Languages That Are Installed
For more information on any of those tasks, see Getting Started on page 1-1.
8-2
Definitions
Before you write or enter ladder logic, review the following terms: Instruction Branch Rung Condition
Instruction
You organize ladder logic as rungs on a ladder and put instructions on each rung. There are two basic types of instructions: Input instruction: An instruction that checks, compares, or examines specific conditions in your machine or process. Output instruction: An instruction that takes some action, such as turn on a device, turn off a device, copy data, or calculate a value.
input instructions
output instructions
Branch
A branch is two or more instructions in parallel.
branch
branch
8-3
There is no limit to the number of parallel branch levels that you can enter. The following figure shows a parallel branch with five levels. The main rung is the first branch level, followed by four additional branches.
output instruction
input instruction
You can nest branches to as many as 6 levels. The following figure shows a nested branch. The bottom output instruction is on a nested branch that is three levels deep.
input instruction output instruction
8-4
Rung Condition
The controller evaluates ladder instructions based on the rung condition preceding the instruction (rung-condition-in).
input instruction output instruction
rung-condition-in
rung-condition-out
Only input instructions affect the rung-condition-in of subsequent instructions on the rung: If the rung-condition-in to an input instruction is true, the controller evaluates the instruction and sets the rung-condition-out to match the results of the evaluation. If the instruction evaluates to true, the rung-condition-out is true. If the instruction evaluates to false, the rung-condition-out is false. An output instruction does not change the rung-condition-out. If the rung-condition-in to an output instruction is true, the rung-condition-out is set to true. If the rung-condition-in to an output instruction is false, the rung-condition-out is set to false.
8-5
To develop your ladder logic, perform the following actions: Choose the Required Instructions Arrange the Input Instructions Arrange the Output Instructions Choose a Tag Name for an Operand
8-6
any one of several conditions must be met in order to take action For example, If condition_1 OR condition_2 OR condition_3
In parallel:
condition_1
condition_2
condition_3
In combination:
condition_1
condition_2
8-7
TIP
The controller executes all instructions on a rung regardless of their rung-condition-in. For optimal performance of a series of instructions, sequence the instructions from most likely to be false on the left to least likely to be false on the right.
instruction most likely to be FALSE instruction least likely to be FALSE
When the controller finds a false instruction, it executes the remaining instructions in the series with their rung-condition-in set to false. Typically, an instruction executes faster when its rung-condition-in (rung) is false rather than true.
Place the output instructions between input instructions, as long as the last instruction on the rung is an output instruction.
8-8
where: x is the location of the element in the first dimension. y is the location of the element in the second dimension. z is the location of the element in the third dimension. For a structure within a structure, add an additional.member_name .
8-9
EXAMPLE
To access: machine_on tag bit number 1 of the one_shots tag DN member (bit) of the running_seconds timer mix member of the north_tank tag element 2 in the recipe array and element 1,1 in the tanks array
one_shots.1
running_seconds.DN
north_tank.mix
COP Copy File Source recipe[2] Dest tanks[1,1] Length 1 CLR Clear Dest north_tank.preset[2] 0
drill[1].part_advance
42357
8-10
Use the Language Element toolbar to add a ladder logic element to your routine.
other instructions
To add an element: Append an Element to the Cursor Location Drag and Drop an Element
8-11
Assign Operands
To assign an operand you have these options: Create and Assign a New Tag Choose a Name or an Existing Tag Drag a Tag From the Tags Window Assign an Immediate (Constant) Value
4. Click the
button.
8-12
5.
6.
5. Select the data type for the tag. 6. If you want to define the tag as an array, type the number of elements in each dimension. 7. Choose
8.
8-13
8-14
If you want to re-use ladder logic from another project, simply export the logic to an L5X file and import it into the required project. The L5X file contains all that you need for the logic except I/O modules.
Project A export
Project B
If an I/O tag already exists in the project, the import operation uses this tag for any aliases to that tag name. Once you import a project, make sure you check the alias tags for accuracy.
8-15
Export Rungs
1. Select the rungs to export: If rungs are: in sequence out of sequence Do this: Click the first rung and then [Shift] + click the last rung. Click the first rung and then [Ctrl] + click each additional rung.
3. Choose a location and name for the file. 4. Create the file.
8-16
Import Rungs
1. Right-click the location for the rungs and choose Import Rung.
2. Select the file to import. 3. Check for conflicts in names. 4. Import the file.
If the project does not have the base tag, you have to either create the base tag or point the alias to a different base tag.
8-17
As you program your routine (s), periodically verify your work: 1. In the top-most toolbar of the RSLogix 5000 window, click 2. If any errors are listed at the bottom of the window: a. To go to the first error or warning, press [F4]. b. Correct the error according to the description in the Results window. c. Go to step 1. 3. To close the Results window, press [Alt] + [1].
8-18
Notes:
Chapter
Use this procedure to accomplish the following: organize a function block routine develop one or more function block diagrams for the routine enter the function block diagrams into the routine
Before you use this procedure, make sure you are able to perform the following tasks:
Navigate the Controller Organizer Identify the Programming Languages That Are Installed
For more information on any of those tasks, see Getting Started on page 1-1.
To program a function block routine, do the following steps: Identify the Sheets for the Routine Choose the Function Block Elements Choose a Tag Name for an Element Define the Order of Execution Identify any Connectors Define Program/Operator Control Add a Sheet Add a Function Block Element Connect Elements Assign a Tag Assign an Immediate Value (Constant) Connect Blocks with an OCON and ICON Verify the Routine
9-2
To make it easier to navigate through a function block routine, divide the routine into a series of sheets: Sheets help you organize and find your function blocks. They do not effect the order in which the function blocks execute. When the routine executes, all the sheets execute. In general, use one sheet for each device (motor, valve, etc.) The following example shows a function block routine that controls 4 motors.
EXAMPLE
Sheet 3 of 4
motor 3
Sheet 4 of 4
motor 4
9-3
function block
perform an operation on an input value or values and function block produce an output value or values transfer data between function blocks when they are: far apart on the same sheet on different sheets within the same routine disperse data to several points in the routine single output wire connector (OCON) and multiple input wire connectors (ICON) output wire connector (OCON) and an input wire connector (ICON)
9-4
Each function block uses a tag to store configuration and status information about the instruction. When you add function block instruction, RSLogix 5000 software automatically creates a tag for the block. You can use this tag as is, rename the tag, or assign a different tag. For IREFs and OREFs, you have to create a tag or assign an existing tag. The following table outlines the format for a tag name:
For a: tag bit number of a larger data type member of a structure element of a one dimension array element of a two dimension array element of a three dimension array element of an array within a structure member of an element of an array
where: x is the location of the element in the first dimension. y is the location of the element in the second dimension. z is the location of the element in the third dimension. For a structure within a structure, add an additional.member_name .
9-5
You define execution order (flow of data) by wiring elements together and indicating any input (feedback) wires, if necessary. The location of a block does not affect the order in which the blocks execute.
output pin
wire
input pin
output pin
wire
input pin
Data Latching
If you use an IREF to specify input data for a function block instruction, the data in that IREF is latched for the scan of the function block routine. The IREF latches data from program-scoped and controller-scoped tags. The controller updates all IREF data at the beginning of each scan.
IREF
9-6
In this example, the value of tagA is stored at the beginning of the routines execution. The stored value is used when Block_01 executes. The same stored value is also used when Blcock_02 executes. If the value of tagA changes during execution of the routine, the stored value of tagA in the IREF does not change until the next execution of the routine.
Block_01
tagA
Block_02
This example is the same as the one above. The value of tagA is stored only once at the beginning of the routines execution. The routine uses this stored value throughout the routine.
Block_01
tagA
Block_02
tagA
9-7
Starting with RSLogix 5000 software, version 11, you can use the same tag in multiple IREFs and an OREF in the same routine. Because the values of tags in IREFs are latched every scan through the routine, all IREFs will use the same value, even if an OREF obtains a different tag value during execution of the routine. In this example, if tagA has a value of 25.4 when the routine starts executing this scan, and Block_01 changes the value of tagA to 50.9, the second IREF wired into Block_02 will still use a value of 25.4 when Block_02 executes this scan. The new tagA value of 50.9 will not be used by any IREFs in this routine until the start of the next scan.
Order of Execution
The RSLogix 5000 programming software automatically determines the order of execution for the function blocks in a routine when you: verify a function block routine verify a project that contains a function block routine download a project that contains a function block routine You define execution order by wiring function blocks together and indicating the data flow of any feedback wires, if necessary. If function blocks are not wired together, it does not matter which block executes first. There is no data flow between the blocks.
9-8
If you wire the blocks sequentially, the execution order moves from input to output. The inputs of a block require data to be available before the controller can execute that block. For example, block 2 has to execute before block 3 because the outputs of block 2 feed the inputs of block 3.
1 2 3
Execution order is only relative to the blocks that are wired together. The following example is fine because the two groups of blocks are not wired together. The blocks within a specific group execute in the appropriate order in relation to the blocks in that group.
1 3 5
Resolve a Loop
To create a feedback loop around a block, wire an output pin of the block to an input pin of the same block. The following example is OK. The loop contains only a single block, so execution order does not matter.
This input pin uses an output that the block produced on the previous scan.
9-9
If a group of blocks are in a loop, the controller cannot determine which block to execute first. In other words, it cannot resolve the loop.
? ? ?
To identify which block to execute first, mark the input wire that creates the loop (the feedback wire) with the Assume Data Available indicator. In the following example, block 1 uses the output from block 3 that was produced in the previous execution of the routine.
1 2 3
This input pin uses the output that block 3 produced on the previous scan. Assume Data Available indicator
The Assume Data Available indicator defines the data flow within the loop. The arrow indicates that the data serves as input to the first block in the loop.
9-10
Do not mark all the wires of a loop with the Assume Data Available indicator.
This is OK 1 2 ? This is NOT OK ?
The controller cannot resolve the loop because all the wires use the Assume Data Available indicator.
The Assume Data Available indicator defines the data flow within the loop.
9-11
One wire uses the Assume Data Available indicator while the other wire does not.
9-12
Summary
In summary, a function block routine executes in this order: 1. The controller latches all data values in IREFs. 2. The controller executes the other function blocks in the order determined by how they are wired. 3. The controller writes outputs in OREFs.
9-13
Like wires, connectors transfer data from output pins to input pins. Use connectors when: the elements that you want to connect are on different sheets within the same routine a wire is difficult to route around other wires or elements you want to disperse data to several points in the routine
Connector_A data
Connector_A
To use connectors, follow these rules: Each OCON requires a unique name. For each OCON, you must have at least one corresponding ICON (i.e., an ICON with the same name as the OCON). Multiple ICONs can reference the same OCON. This lets you disperse data to several points in your routine.
9-14
Several instructions support the concept of Program/Operator control. These instructions include: Enhanced Select (ESEL) Totalizer (TOT) Enhanced PID (PIDE) Ramp/Soak (RMPS) Discrete 2-State Device (D2SD) Discrete 3-State Device (D3SD)
Program/Operator control lets you control these instructions simultaneously from both your user program and from an operator interface device. When in Program control, the instruction is controlled by the Program inputs to the instruction; when in Operator control, the instruction is controlled by the Operator inputs to the instruction. Program or Operator control is determined by using these inputs:
Input: .ProgProgReq .ProgOperReq .OperProgReq .OperOperReq Description: A program request to go to Program control. A program request to go to Operator control. An operator request to go to Program control. An operator request to go to Operator control.
To determine whether an instruction is in Program or Control control, examine the ProgOper output. If ProgOper is set, the instruction is in Program control; if ProgOper is cleared, the instruction is in Operator control. Operator control takes precedence over Program control if both input request bits are set. For example, if ProgProgReq and ProgOperReq are both set, the instruction goes to Operator control.
9-15
The Program request inputs take precedence over the Operator request inputs. This provides the capability to use the ProgProgReq and ProgOperReq inputs to lock an instruction in a desired control. For example, lets assume that a Totalizer instruction will always be used in Operator control, and your user program will never control the running or stopping of the Totalizer. In this case, you could wire a literal value of 1 into the ProgOperReq. This would prevent the operator from ever putting the Totalizer into Program control by setting the OperProgReq from an operator interface device.
Because the ProgOperReq input is always set, pressing the Program button on the faceplate (which sets the OperProgReg input) has no effect. Normally, setting OperProgReq puts the TOT in Program control.
Wiring a 1 into ProgOperReq means the user program always wants the TOT to be in Operator control
9-16
Likewise, constantly setting the ProgProgReq can lock the instruction into Program control. This is useful for automatic startup sequences when you want the program to control the action of the instruction without worrying about an operator inadvertently taking control of the instruction. In this example, you have the program set the ProgProgReq input during the startup, and then clear the ProgProgReq input once the startup was complete. Once the ProgProgReq input is cleared, the instruction remains in Program control until it receives a request to change. For example, the operator could set the OperOperReq input from a faceplate to take over control of that instruction. The following example shows how to lock an instruction into Program control.
When StartupSequenceActive is set, the PIDE instruction is placed in Program control and Manual mode. The StartupCV value is used as the loop output.
Operator request inputs to an instruction are always cleared by the instruction when it executes. This allows operator interfaces to work with these instructions by merely setting the desired mode request bit. You dont have to program the operator interface to reset the request bits. For example, if an operator interface sets the OperAutoReq input to a PIDE instruction, when the PIDE instruction executes, it determines what the appropriate response should be and clears the OperAutoReq.
9-17
Program request inputs are not normally cleared by the instruction because these are normally wired as inputs into the instruction. If the instruction clears these inputs, the input would just get set again by the wired input. There might be situations where you want to use other logic to set the Program requests in such a manner that you want the Program requests to be cleared by the instruction. In this case, you can set the ProgValueReset input and the instruction will always clear the Program mode request inputs when it executes. In this example, a rung of ladder logic in another routine is used to one-shot latch a ProgAutoReq to a PIDE instruction when a pushbutton is pushed. Because the PIDE instruction automatically clears the Program mode requests, you dont have to write any ladder logic to clear the ProgAutoReq after the routine executes, and the PIDE instruction will receive only one request to go to Auto every time the pushbutton is pressed.
When the TIC101AutoReq Pushbutton is pressed, one-shot latch ProgAutoReq for the PIDE instruction TIC101. TIC101 has been configured with the ProgValueReset input set, so when the PIDE instruction executes, it automatically clears ProgAutoReq.
9-18
Add a Sheet
Use the Language Element toolbar to add a function block element to your routine.
IREF
function blocks
9-19
To add an element: 1. On the Language Element toolbar, click the button for the element that you want to add. 2. Drag the element to the desired location. For example:
You can also drag the button for the element directly to the desired location. For example
9-20
Connect Elements
To define the flow of data: Show or Hide a Pin Wire Elements Together Mark a Wire with the Assume Data Available Indicator
2.
3. Choose
9-21
green dot
input wire
9-22
Assign a Tag
To assign a tag to a function block element, you have these options: Create and Assign a New Tag Rename the Tag of a Function Block Assign an Existing Tag
4. Click the
button.
5.
6.
5. Select the data type for the tag. 6. If you want to define the tag as an array, type the number of elements in each dimension. 7. Choose
9-23
8.
3.
9-24
To assign a constant value instead of a tag value to an input parameter, you have these options:
If you want to: make the value visible on the diagram and reports Then: Use an IREF
be able to change the value online without editing the Enter a Value in the Tag of a Block routine
Use an IREF
1. Add an IREF. 2. Wire the IREF to the input pin that gets the value.
3.
3. Double-click the operand area of the IREF. 4. Type the value and press the Enter key.
2.
9-25
ICON OCON
Add an OCON
1. Add an output wire connector (OCON) and place it near the output pin that supplies the value. 2. Wire the OCON to the output pin. 3. Double-click the operand area of the OCON. 4. Type a name that identifies the connector and press [Enter].
Add an ICON
1. Add an input wire connector (ICON) and place it near the input pin that gets the value from the corresponding OCON. 2. Wire the ICON to the input pin. 3. Double-click the operand area of the ICON. 4. Select the name of the OCON that supplies the value to this connector and then click a blank spot on the diagram
9-26
As you program your routine, periodically verify your work: 1. In the top-most toolbar of the RSLogix 5000 window, click 2. If any errors are listed at the bottom of the window: a. To go to the first error or warning, press [F4]. b. Correct the error according to the description in the Results window. c. Go to step 1. 3. To close the Results window, press [Alt] + [1].
Chapter
10
Use this chapter to plan your communication between the controller and I/O modules or other controllers.
For this information: Connections Produce and Consume a Tag Execute a Message (MSG) Instruction Get or Set the Number of Unconnected Buffers Convert Between INTs and DINTs See page: 10-1 10-9 10-19 10-25 10-28
Connections
Term: connection
A Logix5000 controller uses connections for many, but not all, of its communication with other devices.
Definition: A communication link between two devices, such as between a controller and an I/O module, PanelView terminal, or another controller. Connections are allocations of resources that provide more reliable communications between devices than unconnected messages. The number of connections that a single controller can have is limited. You indirectly determine the number of connections the controller uses by configuring the controller to communicate with other devices in the system. The following types of communication use connections: I/O modules produced and consumed tags certain types of Message (MSG) instructions (not all types use a connection)
10-2
Definition: The RPI specifies the period at which data updates over a connection. For example, an input module sends data to a controller at the RPI that you assign to the module. Typically, you configure an RPI in milliseconds (ms). The range is 0.2 ms (200 microseconds) to 750 ms. If a ControlNet network connects the devices, the RPI reserves a slot in the stream of data flowing across the ControlNet network. The timing of this slot may not coincide with the exact value of the RPI, but the control system guarantees that the data transfers at least as often as the RPI.
path
The path describes the route that a connection takes to get to the destination. Typically, you automatically define the path for a connection when you add the devices to the I/O Configuration folder of the controller.
I/O Configuration
Inhibit a Connection
ATTENTION Inhibiting a module breaks the connection to the module and prevents communication of I/O data.
!
In some situations, such as when initially commissioning a system, it is useful to disable portions of a control system and enable them as you wire up the control system. The controller lets you inhibit individual modules or groups of modules, which prevents the controller from trying to communicate with the modules.
10-3
When you configure an I/O module, it defaults to being not inhibited. You can change an individual modules properties to inhibit a module.
If you want to: communicate with the module prevent communication with the module Then: do not inhibit the module inhibit the module
When you inhibit a communication bridge module, such as a 1756-CNB or 1756-DHRIO module, the controller shuts down the connections to the bridge module and to all the modules that depend on that bridge module. Inhibiting a communication bridge module lets you disable an entire branch of the I/O network. When you select to inhibit the module, the controller organizer displays a yellow attention symbol
If you are: offline online inhibit a module while you are connected to the module inhibit a module but a connection to the module was not established (perhaps due to an error condition or fault) uninhibit a module (clear the check box) no fault occurs And you: And: Then: The inhibit status is stored in the project. When you download the project, the module is still inhibited. The connection to the module is closed. The modules outputs go to the last configured program mode. The module is inhibited. The module status information changes to indicate that the module is inhibited and not faulted.
!
A connection is made to the module and the module is dynamically reconfigured (if the controller is the owner controller) with the configuration you created for that module. If the controller is configured for listen-only, it cannot reconfigure the module. A connection is not made to the module. The module status information changes to indicate the fault condition.
fault occurs
10-4
To inhibit or uninhibit a module from logic: 1. Use a Get System Value (GSV) instruction to read the Mode attribute for the module. 2. Set or clear bit 2:
If you want to: inhibit the module uninhibit the module Then: Set bit 2. Clear bit 2
3. Use a Set System Value (SSV) instruction to write the Mode attribute back to the module.
EXAMPLE
Inhibit a Connection
If Module_1_Inhibit = 1, then inhibit the operation of the I/O module named Module_1: 1. The GSV instruction sets Module_1_Mode = value of the Mode attribute for the module. 2. The OTE instruction sets bit 2 of Module_1_Mode = 1. This means inhibit the connection. 3. The SSV instruction sets the Mode attribute for the module = Module_1_Mode.
10-5
!
EXAMPLE
If the controller loses communication with a module, data from that device does not update. When this occurs, the logic makes decisions on data that may or may not be correct. Loss of communication Controller B requires data from controller A. If communication fails between the controllers, then controller B continues to act on the last data that it received from controller A.
A
communication failure
41031
If communication with a device in the I/O configuration of the controller does not occur for 100 ms, the communication times out. If this occurs, you have the following options:
If you want the controller to: fault (major fault) continue operating Then: Configure a Major Fault to Occur Monitor the Health of a Module
10-6
If the connection times out, continue operation without invoking a major fault on the controller.
If communication with a module times out, the controller produces the following warnings: The I/O LED on the front of the controller flashes green. A ! shows over the I/O configuration folder and over the device (s) that has timed out. A module fault code is produced, which you can access through: Module Properties window for the module GSV instruction
Publication 1756-PM001G-EN-P - March 2004
10-7
To monitor the health of your connections, use a Get System Value (GSV) instruction to monitor the MODULE object for either the controller or a specific module:
If you want to: determine if communication has timed out with any device Get this attribute: LEDStatus Data Type: INT For efficiency, use a DINT as the destination data type. Description: Specifies the current state of the I/O LED on the front of the controller. Note: You do not enter an instance name with this attribute. This attribute applies to the entire collection of modules. Value: 0 Meaning: LED off: No MODULE objects are configured for the controller (there are no modules in the I/O Configuration section of the controller organizer). Flashing red: None of the MODULE objects are Running. Flashing green: At least one MODULE object is not Running. Solid green: All the Module objects are Running.
1 2 3 determine if communication has timed out with a specific device FaultCode INT For efficiency, use a DINT as the destination data type.
A number which identifies a module fault, if one occurs. In the Instance Name, choose the device whose connection you want to monitor. Make sure to assign a name to the device in the I/O Configuration folder of the project.
10-8
EXAMPLE
The GSV instruction continuously sets I_O_LED_Status (DINT tag) = status of the I/O LED of the controller.
If I_O_LED_Status = 2, then communication has timed out (faulted) with at least one module. The GSV instruction sets Module_3_Fault_Code = fault code for Module_3.
If Module_3_Fault_Code. is NOT equal to 0, then communication has timed out (faulted) with Module_3. The OTE instruction sets Module_3_Faulted = 1.
10-9
To transfer data between controllers (send or receive data), you have the following options:
needs regular delivery at an interval that you specify (i.e., deterministic) is sent when a specific condition occurs in your application
A Logix5000 controller lets you produce (broadcast) and consume (receive) system-shared tags.
Definition A tag that a controller makes available for use by other controllers. Multiple controllers can simultaneously consume (receive) the data. A produced tag sends its data to one or more consumed tags (consumers) without using logic. The produced tag sends its data at the RPI of the consuming tag. A tag that receives the data of a produced tag. The data type of the consumed tag must match the data type (including any array dimensions) of the produced tag. The RPI of the consumed tag determines the period at which the data updates.
consumed tag
10-10
Can produce and consume tags over this network: Backplane ControlNet EtherNet/IP
For two controllers to share produced or consumed tags, both controllers must be attached to the same network (such as a ControlNet or Ethernet/IP network). You cannot bridge produced and consumed tags over two networks.
Produced and consumed tags each require connections. As you increase the number of controllers that can consume a produced tag, you also reduce the number of connections the controller has available for other operations, like communications and I/O.
10-11
EXAMPLE
Connection Requirements of a Produced or Consumed Tag A FlexLogix controller producing a tag for 5 controllers (consumers) uses 5 connections. A ControlLogix controller producing 4 tags for 1 controller uses 8 connections: Each tag uses 2 connections (1 consumer + 1 = 2). 2 connections per tag x 4 tags = 8 connections Consuming 4 tags from a controller uses 4 connections (1 connection per tag x 4 tags = 4 connections).
10-12
only one REAL value more than one REAL value consume integers
If you must transfer more than 500 bytes, create logic to transfer the data in packets. See chapter 11. If you produce the tag over a ControlNet network, the tag may need to be less than 500 bytes. Refer to "Adjust for Bandwidth Limitations" on page 10-13.
Use the highest permissible RPI for your application. Combine data this goes to the same controller.
If the controller consumes the tag over a ControlNet network, use a binary multiple of the ControlNet network update time (NUT). For example, if the NUT is 5 ms, use an RPI of 5, 10, 20, 40 ms, etc. If you are producing several tags for the same controller: Group the data into one or more user-defined data types. (This uses less connections than producing each tag separately.) Group the data according to similar update intervals. (To conserve network bandwidth, use a greater RPI for less critical data.) For example, you could create one tag for data that is critical and another tag for data that is not as critical.
10-13
The Rack Optimization format uses an additional 8 bytes for each slot in its chassis. Analog modules or modules that are sending or getting diagnostic, fuse, timestamp, or schedule data require direct connections and cannot take advantage of the rack optimized form. Selecting None frees up the 8 bytes per slot for other uses, such as produced or consumed tags. Separate the tag into two or more smaller tags. Create logic to transfer the data in smaller sections (packets). 1. Group the data according to similar update rates. For example, you could create one tag for data that is critical and another tag for data that is not as critical. 2. Assign a different RPI to each tag. Refer to "Produce a Large Array" on page 11-1.
10-14
Produce a Tag
1. Open the RSLogix 5000 project that contains the tag that you want to produce. 2. In the controller organizer, right-click the Controller Tags folder and choose Edit Tags. (You can produce only controller-scoped tags.) 3. In the Controller Tags window, right-click the tag that you want to produce and choose Edit Tag Properties.
4.
6.
6. Type or select the number of controllers that will consume (receive) the tag. 7. Choose
10-15
5. 6.
5. Select the Consumed option button. 6. Make sure the data type is as follows:
If the producing controller is: Logix5000 controller PLC-5C controller Then the data type should be: same data type as the produced tag user-defined data type with the following members: Data type: DINT Description: Status
INT[x], where x is the output size Data produced by a PLC-5C controller of the data from the PLC-5C controller. (If you are consuming only one INT, omit x.)
10-16
8. 9.
10.
8. Select the controller that produces the data. 9. Type the name or instance number of the produced data.
If the producing controller is: Logix5000 controller PLC-5C controller Then type or select: tag name of the produced tag message number from the ControlNet configuration of the PLC-5C controller
10. Type or select the requested packet interval (RPI) for the connection. 11. Choose 12. If you consume the tag over a ControlNet network, use RSNetWorx for ControlNet software to schedule the network.
10-17
10-18
The following example shows how to re-construct a REAL (floating point value) in the PLC-5C controller Re-construct a floating point value
EXAMPLE
The two MOV instructions reverse the order of the integers as the integers move to a new location. Because the destination of the COP instruction is a floating-point address, it takes two consecutive integers, for a total of 32 bits, and converts them to a single floating-point value.
42354
10-19
To transfer data between controllers (send or receive data), you have the following options:
If the data: needs regular delivery at a rate that you specify (i.e., deterministic) Then: Produce and Consume a Tag See: Page 10-9 This section
is sent when a specific condition occurs in your Execute a Message (MSG) application Instruction
EXAMPLE
If count_send = 1 and count_msg.EN = 0 (MSG instruction is not already enabled), then execute a MSG instruction that sends data to another controller.
count_send count_msg.en / MSG Type - Unconfigured Message Control
count_msg ...
EN DN ER
10-20
The following diagram shows how the controller processes Message (MSG) instructions.
1 2 3 4
Message Queue
Cache List
Unconnected Buffers
No
MSG 16 total
Cached? Yes
destination device
Description:
1
The controller scans the MSG instruction and its rung-condition-in goes true. The MSG instruction enters the message queue. The MSG instruction comes off the queue and is processed. If the MSG instruction: does not use a connection or the connection was not previously cached. uses a connection and the connection is cached Communication occurs with the destination device. Then the MSG instruction: uses an unconnected buffer to establish communication with the destination device does not use an unconnected buffer
2 3
10-21
Message Queue
The message queue holds up to 16 MSG instructions, including those that you configure as a block-transfer read or block-transfer write. When the queue is full, an instruction tries to enter the queue on each subsequent scan of the instruction, as shown below:
rung-condition-in
false
true
false
.EN bit
off
on
.EW bit
off
on
Description:
1
The controller scans the MSG instruction. The rung-condition-in for the MSG instruction is true. The EN bit is set. The MSG instruction attempts to enter the queue but the queue is full (16 MSG instructions are already enabled). The EW bit remains cleared. The controller scans the MSG instruction. The rung-condition-in for the MSG instruction is false. The EN bit remains set. The MSG instruction attempts to enter the queue but the queue is full. The EW bit remains cleared. The controller scans the MSG instruction. The MSG instruction attempts to enter the queue. The queue has room so the instruction enters the queue. The EW bit is set.
2 & 3
10-22
Cache List
Depending on how you configure a MSG instruction, it may use a connection to send or receive data.
This type of message: CIP data table read or write PLC2, PLC3, PLC5, or SLC (all types) CIP CIP with Source ID DH+ CIP generic block-transfer read or write
(1)
You can connect CIP generic messages. But for most applications we recommend you leave CIP generic messages unconnected.
If a MSG instruction uses a connection, you have the option to leave the connection open (cache) or close the connection when the message is done transmitting.
If you: Cache the connection Then: The connection stays open after the MSG instruction is done. This optimizes execution time. Opening a connection each time the message executes increases execution time. The connection closes after the MSG instruction is done. This frees up that connection for other uses.
The controller has the following limits on the number of connections that you can cache:
If you have this software and firmware revision: 11.x or earlier 12.x or later Then you can cache: block transfer messages for up to 16 connections other types of messages for up to 16 connections up to 32 connections
10-23
If several messages go to the same device, the messages may be able to share a connection.
If the MSG instructions are to: different devices same device enabled at the same time NOT enabled at the same time And they are: Then: Each MSG instruction uses 1 connection. Each MSG instruction uses 1 connection. The MSG instructions share the connection. (I.e., Together they count as 1 connection.)
EXAMPLE
Share a Connection If the controller alternates between sending a block-transfer read message and a block-transfer write message to the same module, then together both messages count as 1 connection. Caching both messages counts as 1 on the cache list.
Unconnected Buffers
To establish a connection or process unconnected messages, the controller uses an unconnected buffer.
Term: unconnected buffer Definition An allocation of memory that the controller uses to process unconnected communication. The controller performs unconnected communication when it: establishes a connection with a device, including an I/O module executes a MSG instruction that does not use a connection The controller can have 10 - 40 unconnected buffers. The default number is 10. To increase the number of unconnected buffers, execute a MSG instruction that reconfigures the number of unconnected buffers. Refer to Get or Set the Number of Unconnected Buffers on page 10-25. Each unconnected buffers uses 1.1K bytes of memory. If all the unconnected buffers are in use when an instruction leaves the message queue, the instruction errors and data does not transfer.
If a MSG instruction uses a connection, the instruction uses an unconnected buffer when it first executes to establish a connection. If you configure the instruction to cache the connection, it no longer requires an unconnected buffer once the connection is established.
10-24
Guidelines
As you plan and program your MSG instructions, follow these guidelines:
Guideline: 1. For each MSG instruction, create a control tag. Details: Each MSG instruction requires its own control tag. Data type = MESSAGE Scope = controller The tag cannot be part of an array or a user-defined data type. 2. Keep the source and/or destination data A MSG instruction can access only tags that are in the Controller Tags folder (controller at the controller scope. scope). 3. If your MSG is to a device that uses 16-bit integers, use a buffer of INTs in the MSG and DINTs throughout the project. If your message is to a device that uses 16-bit integers, such as a PLC-5 or SLC 500 controller, and it transfers integers (not REALs), use a buffer of INTs in the message and DINTs throughout the project. This increases the efficiency of your project because Logix5000 controllers execute more efficiently and use less memory when working with 32-bit integers (DINTs). Refer to Convert Between INTs and DINTs on page 10-28. 4. Cache the connected MSGs that execute most frequently. Cache the connection for those MSG instructions that execute most frequently, up to the maximum number permissible for your controller revision. This optimizes execution time because the controller does not have to open a connection each time the message executes. 5. If you want to enable more than 16 MSGs at one time, use some type of management strategy. If you enable more than 16 MSGs at one time, some MSG instructions may experience delays in entering the queue. To guarantee the execution of each message, use one of these options: Enable each message in sequence. Enable the messages in groups. Program a message to communicate with multiple devices. For more information, see Appendix B. Program logic to coordinate the execution of messages. For more information, see Appendix A. 6. Keep the number of unconnected and uncached MSGs less than the number of unconnected buffers. The controller can have 10 - 40 unconnected buffers. The default number is 10. If all the unconnected buffers are in use when an instruction leaves the message queue, the instruction errors and does not transfer the data. You can increase the number of unconnected buffers (40 max.), but continue to follow guideline 5. To increase the number of unconnected buffers, see page 10-25.
10-25
To determine or change the number of unconnected buffers, use a MSG instruction. The range is 10 - 40 unconnected buffers. The default number is 10. Each unconnected buffers uses 1.1K bytes of memory.
10-26
10-27
EXAMPLE
If S:FS = 1 (first scan), then set the number of unconnected buffers for the controller: Source_Array[0] = 1 Source_Array[1] = 0 Source_Array[2] = 17 Source_Array[3] = 0 Source_Array[4] = 12 (The number of unconnected buffers that you want. In this example, we want 12 buffers.) If UCB_Set.EN = 0 (MSG instruction is not already enabled) then: MSG instruction sets the number of unconnected buffers = Source_Array[4]
where:
Tag Name UCB_Set Source_Array Type MESSAGE SINT[8] Description Control tag for the MSG instruction. Source values for the MSG instruction, including the number of unconnected buffers that you want.
10-28
In the Logix5000 controller, use the DINT data type for integers whenever possible. Logix5000 controllers execute more efficiently and use less memory when working with 32-bit integers (DINTs). If your message is to a device that uses 16-bit integers, such as a PLC-5 or SLC 500 controller, and it transfers integers (not REALs), use a buffer of INTs in the message and DINTs throughout the project. This increases the efficiency of your project.
1 2 Buffer of INTs INT_Buffer[0] INT_Buffer[1] INT_Buffer[2] DINTs for use in the project DINT_Array[0] DINT_Array[1] DINT_Array[2]
1. The Message (MSG) instruction reads 16-bit integers (INTs) from the device and stores them in a temporary array of INTs. 2. An File Arith/Logical (FAL) instruction converts the INTs to DINTs for use by other instructions in your project.
1 Write 16-Bit Integers DINTs from the project DINT_Array[0] DINT_Array[1] DINT_Array[2] Buffer of INTs INT_Buffer[0] INT_Buffer[1] INT_Buffer[2]
1. An FAL instruction converts the DINTs from the Logix5000 controller to INTs. 2. The MSG instruction writes the INTs from the temporary array to the device.
10-29
EXAMPLE
If Condition_1 = 1 And Msg_1.EN = 0 (MSG instruction is not already enabled) then: Read 3 integers from the PLC-5 controller and store them in INT_Buffer (3 INTs)
If Msg_1.DN =1 (MSG instruction has read the data.) then Reset the FAL instruction. The FAL instruction sets DINT_Array = INT_Buffer. This converts the values to 32-bit integers (DINTs).
EXAMPLE
If Condition_2 = 1 then: Reset the FAL instruction. The FAL instruction sets INT_Buffer = DINT_Array. This converts the values to 16-bit integers (INTs).
If Control_2.DN = 1 (FAL instruction has converted the DINTs to INTs) And Msg_2.EN = 0 (MSG instruction is not already enabled) then: Write the integers in INT_Buffer (3 INTs) to the PLC-5 controller
10-30
Notes:
Chapter
11
The Logix5000 controller can send as many as 500 bytes of data over a single scheduled connection. This corresponds to 125 DINT or REAL elements of an array. To transfer an array of more than 125 DINTs or REALs, use a produced/consumed tag of 125 elements to create a packet of data. You can then use the packet to send the array piecemeal to another controller. When you send a large array of data in smaller packets, you must ensure that the transmission of a packet is complete before the data is moved into the destination array, for these reasons. Produced data over the ControlLogix backplane is sent in 50 byte segments. Data transmission occurs asynchronous to program scan. The logic that this section includes uses an acknowledge word to make sure that each packet contains new data before the data moves to the destination array. The logic also uses an offset value to indicate the starting element of the packet within the array. Because of the offset and acknowledge elements, each packet carries 123 elements of data from the array, as depicted below:
Producer Consumer
array
offset acknowledge
offset acknowledge
11-2
In addition, the array must contain an extra 122 elements. In other words, it must be 122 elements greater than the greatest number of elements that you want to transfer: These elements serve as a buffer. Since each packet contains the same number of elements, the buffer prevents the controller from copying beyond the boundaries of the array. Without the buffer, this would occur if the last packet contained fewer than 123 elements of actual data.
1. Open the RSLogix 5000 project that will produce the array. 2. In the Controller Tags folder, create the following tags:
P Tag Name array_ack array_packet Type DINT[2] DINT[125]
where:
array is the name for the data that you are sending. 3. Convert array_ack to a consumed tag:
For: Controller Remote Tag Name Specify: name of the controller that is receiving the packet array_ack
Both controllers use the same name for this shared data.
11-3
4. In either the Controller Tags folder or the tags folder of the program that will contain the logic for the transfer, create the following tags:
Tag Name array array_offset array_size array_transfer_time array_transfer_time_max array_transfer_timer Type DINT[x] where x equals the number of elements to transfer plus 122 elements DINT DINT DINT DINT TIMER
where: array is the name for the data that you are sending. 5. In the array_size tag, enter the number of elements of real data. (The value of x from step 4. minus the 122 elements of buffer.) 6. Create or open a routine for the logic that will create packets of data. 7. Enter the following logic: Times how long it takes to send the entire array
TON Timer On Delay Timer array_transfer_timer Preset 10000000 Accum 0 EN DN
When the offset value in array_ack[0] is not equal to the current offset value but array_ack[1] equals -999, the consumer has begun to receive a new packet, so the rung moves -999 into the last element of the packet. The consumer waits until it receives the value -999 before it copies the packet to the array. This guarantees that the consumer has new data.
NEQ Not Equal Source A array_ack[0] 0 Source B array_packet[123] 0 EQU Equal Source A array_ack[1] 0 Source B -999 MOV Move Source -999
Dest array_packet[124] 0
11-4
When the offset value in array_ack[0] is equal to the current offset value, the consumer has copied the packet to the array; so the rung checks for more data to transfer. If the offset value plus 123 is less than the size of the array, there is more data to transfer; so the rung increases the offset by 123. Otherwise, there is no more data to transfer; so the rung resets the offset value, logs the transfer time, and resets the timer. In either case, the rung uses the new offset value to create a new packet of data, appends the new offset value to the packet, and clears the acknowledge element of the packet (packet[124]).
EQU Equal Source A array_ack[0] 0 Source B array_packet[123] 0 CMP Compare Expression (array_ack[0] + 123) < array_size ADD Add Source A array_packet[123] 0 Source B 123 Dest CMP Compare Expression (array_ack[0] + 123) >= array_size array_offset 0 CLR Clear Dest array_offset 0 MOV Move Source array_transfer_timer.ACC 0 Dest array_transfer_time 0 array_transfer_timer RES COP Copy File Source array[array_offset] Dest array_packet[0] Length 123 MOV Move Source array_offset 0 Dest array_packet[123] 0 CLR Clear Dest array_packet[124] 0
If the current transfer time is greater than the maximum transfer time, updates the maximum transfer time. This maintains a record of the longest time to transfer data.
GRT Greater Than (A>B) Source A array_transfer_time 0 Source B array_transfer_time_max 0 MOV Move Source array_transfer_time 0 Dest array_transfer_time_max 0
42355
11-5
8. Open the RSLogix 5000 project that will consume the array. 9. In the Controller Tags folder, create the following tags:
P Tag Name array_ack array_packet Type DINT[2] DINT[125]
where: array is the name for the data that you are sending. Use the same name as in the producing controller (step 2.). 10. Convert array_packet to a consumed tag:
For: Controller Remote Tag Name Specify: name of the controller that is sending the packet array_packet
Both controllers use the same name for this shared data.
Refer to "Consume Data That Is Produced by Another Controller" on page 10-15. 11. In either the Controller Tags folder or the tags folder of the program that will contain the logic for the transfer, create the following tags:
Tag Name array array_offset Type DINT[x] where x equals the number of elements to transfer plus 122 elements DINT
where: array is the name for the data that you are sending. 12. Create or open a routine for the logic that will move the data from the packets to the destination array.
11-6
13. Enter the following logic: When the offset value in array_packet[123] is different than the offset value in array_ack[0], the controller has begun to receive a new packet of data; so the rung checks for the value of -999 in the last element of the packet. If the last element of the packet equals -999, the controller has received an entire packet of new data and begins the copy operation: The offset value moves from the packet to array_offset. The COP instructions copies the data from the packet to the destination array, starting at the offset value. The offset value moves to array_ack[0], which signals that the copy is complete. Array_ack[1] resets to zero and waits to signal the arrival of a new packet. If the last element of the packet is not equal -999, the transfer of the packet to the controller may not be complete; so -999 moves to array_ack[1]. This signals the producer to return the value of -999 in the last element of the packet to verify the transmission of the packet.
NEQ Not Equal Source A array_packet[123] 0 Source B array_ack[0] 0 EQU Equal Source A array_packet[124] 0 Source B -999 MOV Move Source array_packet[123] 0 Dest array_offset 0 COP Copy File Source array_packet[0] Dest array[array_offset] Length 123 MOV Move Source array_packet[123] 0 Dest array_ack[0] 0 CLR Clear Dest array_ack[1] 0 NEQ Not Equal Source A array_packet[124] 0 Source B -999 MOV Move Source -999
Dest array_ack[1] 0
42356
11-7
Transferring a large array as smaller packets improves system performance over other methods of transferring the data: Fewer connections are used than if you broke the data into multiple arrays and sent each as a produced tag. For example, an array with 5000 elements would take 40 connections (5000/125=40) using individual arrays. Faster transmission times are achieved than if you used a message instruction to send the entire array. Messages are unscheduled and are executed only during the system overhead portion of the Logix5550 execution. Therefore, messages can take a fairly long time to complete the data transfer. You can improve the transfer time by increasing system overhead time slice, but this diminishes the performance of the continuous task.
11-8
Notes:
Chapter
12
Use this procedure to exchange ASCII data with a device through the serial port of the controller. For example, you can use the serial port to: read ASCII characters from a weigh scale module or bar code reader send and receive messages from an ASCII triggered device, such as a MessageView terminal.
connection from the serial port of the controller to the ASCII device
42237
Before you use this procedure: Configure the ASCII Device for Your Application To complete this procedure, do the following tasks: Connect the ASCII Device Configure the Serial Port Configure the User Protocol Create String Data Types Read Characters from the Device
Publication 1756-PM001G-EN-P - March 2004
12-2
1. For the serial port of the ASCII device, determine which pins send signals and which pins receive signals. 2. Connect sending pins to corresponding receiving pins and attach jumpers:
If the communications: Then wire the connectors as follows: handshake
ASCII Device
1 CD 2 RDX 3 TXD 4 DTR COMMON 6 DSR 7 RTS 8 CTS 9
Controller
1 CD 2 RDX 3 TXD 4 DTR COMMON 6 DSR 7 RTS 8 CTS 9
42231
do not handshake
ASCII Device
1 CD 2 RDX 3 TXD 4 DTR COMMON 6 DSR 7 RTS 8 CTS 9
Controller
1 CD 2 RDX 3 TXD 4 DTR COMMON 6 DSR 7 RTS 8 CTS 9
42232
3. Attach the cable shield to both connectors. 4. Connect the cable to the controller and the ASCII device.
12-3
1. Determine the following communication settings for the ASCII device: a. b. c. d. baud rate data bits parity stop bits
42627
3. On the Online toolbar, click the controller button. 4. Click the Serial Port tab.
5.
6.
42251
5. Select User. 6. Select the settings for the ASCII device, from step 1.
12-4
7.
8. 9.
42251
Full Duplex Half Duplex Half Duplex Select the Continuous Carrier check box. Clear the Continuous Carrier check box (default).
8. Type the amount of delay (20 ms units) between the time that the RTS signal turns on (high) and the time that data is sent. For example, a value of 4 produces an 80 ms delay. 9. Type the amount of delay (20 ms units) between the time that the last character is sent and the time that the RTS signal turns off (low). 10. Click Apply.
12-5
2. 3.
42252
2. Select or type a number that is greater than or equal to the greatest number of characters in a transmission. (Twice the number of characters is a good guideline.) 3. If you are using ABL or ARL instructions, type the characters that mark the end of the data. For the ASCII code of a character, refer to the back cover of this manual.
If the device sends: one termination character Then: A. In the Termination Character 1 text box, type the hexadecimal ASCII code for the first character. B. In the Termination Character 2 text box, type $FF. two termination characters In the Termination Character 1 and 2 text boxes, type the hexadecimal ASCII code for each character. Notes: For printable characters, such as 1 or A, type the character.
12-6
4. 5. 6.
7.
42252
4. If you are using the AWA instruction, type the character(s) to append to the data. For the ASCII code of a character, refer to the back cover of this manual.
To append: one character Then: A. In the Append Character 1 text box, type the hexadecimal ASCII code for the first character. B. In the Append Character 2 text box, type $FF. two characters In the Append Character 1 and 2 text boxes, type the hexadecimal ASCII code for each character. Notes: For printable characters, such as 1 or A, type the character.
5. If the ASCII device is configured for XON/XOFF flow control, select the XON/XOFF check box. 6. If the ASCII device is a CRT or is pre-configured for half duplex transmission, select the Echo Mode check box.
12-7
CRT
Printer
The DEL character ($7F) and the character that precedes the DEL character are not sent to the destination. If echo mode is selected and an ASCII instruction reads the DEL character, the echo returns two characters: / ($2F) followed by the character that was deleted.
Ignore
8. Click OK.
12-8
You store ASCII characters in tags that use a string data type.
42811
42812
You can use the default STRING data type. It stores up to 82 characters.
or
You can create a new string data type to store the number of characters that you define.
IMPORTANT
Use caution when you create a new string data type. If you later decide to change the size of the string data type, you may lose data in any tags that currently use that data type.
If you: make a string data type smaller make a string data type larger Then: The data is truncated. The LEN is unchanged. The data and LEN is reset to zero.
If: no yes
2. In the controller organizer, right-click Strings and choose New String Type 3. Type a name for the data type. 4. Type the maximum number characters that this string data type will store.
42233
5. Choose OK.
12-9
As a general rule, before you read the buffer use an ACB or ABL instruction to verify that the buffer contains the required characters: An ARD or ARL instruction continues to read the buffer until the instruction reads the required characters. While an ARD or ARL instruction is reading the buffer, no other ASCII Serial Port instructions, except the ACL, can execute. Verifying that the buffer contains the required characters prevents the ARD or ARL from holding up the execution of other ASCII Serial Port instructions while the input device sends its data. For additional information on ASCII Serial Port instructions, refer to Logix5000 Controllers General Instruction Set Reference Manual, publication 1756-RM003.
IMPORTANT
If you are not familiar with how to enter ladder logic in an RSLogix 5000 project, first review Program Ladder Logic on page 8-1.
42235a
3. Enter 0. (The serial port is channel 0.) 4. Enter a tag name for the ACB instruction and define the data type as SERIAL_PORT_CONTROL. 5. Enter the EN bit of the ACB tag. (The tag from step 4.)
12-10
7.
8.
11.
12.
42235a
7. Enter the POS member of the ACB tag. (The tag from step 4.) 8. Enter the number of characters in the data. 9. Enter 0. 10. Enter a tag name to store the ASCII characters. Define the data type as a string. 11. Enter a tag name for the ARD instruction and define the data type as SERIAL_PORT_CONTROL. 12. Enter the number of characters in the data.
12-11
EXAMPLE
A bar code reader sends bar codes to the serial port (channel 0) of the controller. Each bar code contains 24 characters. To determine when the controller receives a bar code, the ACB instruction continuously counts the characters in the buffer.
ACB ASCII Chars in Buffer Channel 0 SerialPort Control bar_code_count Character Count 0
bar_code_count.EN /
EN DN ER
When the buffer contains at least 24 characters, the controller has received a bar code. The ARD instruction moves the bar code to the bag_bar_code tag.
GEQ Grtr Than or Eql (A>=B) Source A bar_code_count.pos 0 Source B 24 ARD ASCII Read Channel Destination SerialPort Control String Length Characters Read EN 0 bag_bar_code '' bar_code_read 24 0 DN ER
42227
bar_code_read.EM
MID
12-12
42235
15. Enter 0. 16. Enter a tag name for the ABL instruction and define the data type as SERIAL_PORT_CONTROL. 17. Enter the EN bit of the ABL tag. (The tag from step 16.) 18. Enter the following rung:
21. 19. 20.
22.
23.
42235
19. Enter the FD bit of the ABL tag. (The tag from step 16.) 20. Enter 0. 21. Enter a tag name to store the ASCII characters. Define the data type as a string. 22. Enter a tag name for the ARL instruction and define the data type as SERIAL_PORT_CONTROL. 23. Enter 0. This lets the instruction set the SerialPort Control Length equal to the size of the Destination.
12-13
EXAMPLE
Continuously tests the buffer for a message from the MessageView terminal. Since each message ends in a carriage return ($0D), the carriage return is configured as the termination character in the Controller Properties dialog box, User Protocol tab. When the ABL finds a carriage return, its sets the FD bit.
MV_line.EN /
ABL ASCII Test For Buffer Line Channel 0 SerialPort Control MV_line Character Count 0
EN DN ER
When the ABL instruction finds the carriage return (MV_line.FD is set), the controller removes the characters from the buffer, up to and including the carriage return, and places them in the MV_msg tag.
MV_line.FD ARL ASCII Read Line Channel Destination SerialPort Control String Length Characters Read
42226
12-14
And you: want to automatically append one or two characters to the end of the data do not want to append characters want to automatically append one or two characters to the end of the data do not want to append characters
always send the same number of characters send different numbers of characters
6.
7.
42236a
3. Enter the input condition (s) that determines when the characters are to be sent: You can use any type of input instruction. The instruction must change from false to true each time the characters are to be sent. 4. Enter 0. 5. Enter the tag name that stores the ASCII characters. Define the data type as a string. 6. Enter a tag name for the AWA instruction and define the data type as SERIAL_PORT_CONTROL. 7. Enter the number of characters to send. Omit the characters that are appended by the instruction.
12-15
EXAMPLE
When the temperature exceeds the high limit (temp_high is on), the AWA instruction sends five characters from the string[1] tag to a MessageView terminal. The $14 counts as one character. It is the hex code for the Ctrl-T character. The instruction also sends (appends) the characters defined in the user protocol. In this example, the AWA instruction sends a carriage return ($0D), which marks the end of the message.
temp_high
AWA ASCII Write Append Channel Source SerialPort Control String Length Characters Sent
42229
12-16
13.
14.
42236b
10. Enter the input condition (s) that determines when the characters are to be sent: You can use any type of input instruction. The instruction must change from false to true each time the characters are to be sent. 11. Enter 0. 12. Enter the tag name that stores the ASCII characters. Define the data type as a string. 13. Enter a tag name for the AWT instruction and define the data type as SERIAL_PORT_CONTROL. 14. Enter the number of characters to send.
EXAMPLE
When the temperature reaches the low limit (temp_low is on), the AWT instruction sends nine characters from the string[2] tag to a MessageView terminal. (The $14 counts as one character. It is the hex code for the Ctrl-T character.)
AWT ASCII Write Channel Source SerialPort Control String Length Characters Sent EN 0 string[2] '$142224\01$r' temp_low_write 9 9 DN ER
temp_low
42229
12-17
21.
22.
20.
42236c
17. Enter the input condition (s) that determines when the characters are to be sent: You can use any type of input instruction. The instruction must change from false to true each time the characters are to be sent. 18. Enter 0. 19. Enter the tag name that stores the ASCII characters. Define the data type as a string. 20. Enter a tag name for the AWA instruction and define the data type as SERIAL_PORT_CONTROL. 21. Enter the LEN member of the Source tag. (The tag from step 19.) 22. Enter the LEN member of the AWA instruction. (The tag from step 20.)
12-18
EXAMPLE
When alarm is on, the AWA instruction sends the characters in alarm_msg and appends a termination character. Because the number of characters in alarm_msg varies, the rung first moves the length of alarm_msg (alarm_msg.LEN) to the length of the AWA instruction (alarm_write.LEN). In alarm_msg, the $14 counts as one character. It is the hex code for the Ctrl-T character.
alarm
AWA ASCII Write Append Channel Source SerialPort Control String Length Characters Sent
42229
12-19
29.
30.
28.
42236d
25. Enter the input condition (s) that determines when the characters are to be sent: You can use any type of input instruction. The instruction must change from false to true each time the characters are to be sent. 26. Enter 0. 27. Enter the tag name that stores the ASCII characters. Define the data type as a string. 28. Enter a tag name for the AWT instruction and define the data type as SERIAL_PORT_CONTROL. 29. Enter the LEN member of the Source tag. (The tag from step 27.) 30. Enter the LEN member of the AWT instruction. (The tag from step 28.)
12-20
EXAMPLE
When MV_update is on, the AWT instruction sends the characters in MV_msg. Because the number of characters in MV_msg varies, the rung first moves the length of MV_msg (MV_msg.LEN) to the length of the AWT instruction (MV_write.LEN). In MV_msg, the $16 counts as one character. It is the hex code for the Ctrl-V character.
MV_update
AWT ASCII Write Channel Source EN DN ER 0 MV_msg '$161365\8\1$r' SerialPort Control MV_write String Length 10 Characters Sent 10
42229
12-21
IMPORTANT
This String Browser window shows the characters up to the value of the LEN member of the string tag. The string tag may contain additional data, which the String Browser window does not show.
1.
42616
2.
dollar sign ($24) single quote ($27) line feed ($0A) new line ($0D$0A) form feed ($0C) carriage return ($0D) tab ($09)
42615
The number of characters that you see in the window. This is the same as the LEN member of the string tag.
The maximum number of characters that the string tag can hold.
12-22
Notes:
Chapter
13
Use this procedure to: interpret a bar code and take action based on the bar code use a weight from a weigh scale when the weight is sent as ASCII characters decode a message from an ASCII triggered device, such as an operator terminal build a string for an ASCII triggered device using variables from your application
Depending on your application, you may not need to do all the tasks in this procedure. Use the following table to determine where to start:
If you want to: isolate specific information from a bar code search an array for a specific string of characters compare two strings of characters use a weight from a weigh scale decode a message from an operator terminal create a string to send to an operator terminal Then go to: Extract a Part of a Bar Code Look Up a Bar Code Check the Bar Code Characters Convert a Value Decode an ASCII Message Build a String On page: 13-2 13-4 13-10 13-12 13-14 13-18
For additional information on ASCII-related instructions, refer to Logix5000 Controllers General Instruction Set Reference Manual, publication 1756-RM003.
13-2
Use the following steps to extract a part of a bar code so you can take action based on its value. For example, a bar code may contain information about a bag on a conveyor at an airport. To check the flight number and destination of the bag, you extract characters 10 - 18.
origin O 7 P 8 9 5 0
flight # 5 8 A
destination M S 0 2 2
date 2 0 1
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
9 characters
Steps:
1. Enter the following rung:
3. 2. 4.
42808
5.
6.
2. Enter the EM bit of the ARD instruction that reads the bar code. 3. Enter the string tag that contains the bar code. 4. Enter the number of characters in the part of the bar code that you want to check. 5. Enter the position of the first character in the part of the bar code that you want to check. 6. Enter a tag name to store the part of the bar code that you want to check. Define the data type as a string.
13-3
EXAMPLE
In the baggage handling conveyor of an airport, each bag gets a bar code. Characters 10 - 18 of the bar code are the flight number and destination airport of the bag. After the bar code is read (bag_read.EM is on) the MID instruction copies the flight number and destination airport to the bag_flt_and_dest tag.
42808
13-4
Use the following steps to return specific information about an item based on its bar code. For example, in a sorting operation, an array of a user-defined data type creates a table that shows the lane number for each type of product. To determine which lane to route a product, the controller searches the table for the product ID (characters of the bar code that identify the product).
Tag Name Value
sort_table
product_id GHI
To look up a bar code: TIP Create the PRODUCT_INFO Data Type Search for the Characters Identify the Lane Number Reject Bad Characters Enter the Product IDs and Lane Numbers
To copy the above components from a sample project, open the \RSLogix 5000\Projects\Samples folder.
13-5
Create the following user-defined data type. + Controller Your_Project + Tasks + Motion Groups
Trends
Data Types
User-Defined
+ Product_ID
Right-click and choose New Data Type. Lane
13-6
1. 2. 3.
43038
1. The SIZE instruction counts the number of elements in the sort_table array. This array contains the product ID for each item and the corresponding lane number for the item.
Tag Name sort_table Type PRODUCT_INFO[number_of_items ] where: number_of_items is the number of items hat you must sort.
2. The SIZE instruction counts the number of elements in Dimension 0 of the array. In this case, that is the only dimension. 3. The SIZE instruction sets the Length of the subsequent FSC instruction equal to the size of the sort_table array. This ensures that the FSC instruction searches the exact size of the array.
Tag Name sort_table_search Type CONTROL
13-7
4. 5. 6.
43038
4. The sort_table_search tag controls the FSC instruction, which looks through the sort_table array for the bar code characters. 5. Although the previous instruction sets the Length of this instruction, the software requires an initial value to verify the project. 6. The product_id tag contains the bar code characters that identify the item. The FSC instruction searches each Product_ID member in the sort_table array until the instruction finds a match to the product_id tag.
Tag Name product_id Type STRING
13-8
43038
1. When the FSC instruction finds the product ID within the sort_table array, the instruction sets the FD bit. 2. When the FSC finds a match. the POS member indicates the element number within the sort_table array of the match. The corresponding LANE member indicates the lane number of the match. 3. Based on the POS value, the MOV instruction moves the corresponding lane number into the lane tag. The controller uses the value of this tag to route the item.
Tag Name lane Type DINT
4. After the MOV instruction sets the value of the lane tag, the RES instruction resets the FSC instruction so it can search for the next product ID.
13-9
43038
1. If the FSC instruction does not find the product ID within the sort_table array, the instruction sets the DN bit. 2. When no match is found, the MOV instruction moves 999 into the lane tag. This tells the controller to reject or reroute the item. 3. After the MOV instruction sets the value of the lane tag, the RES instruction resets the FSC instruction so it can search for the next product ID.
13-10
In this task, you use a compare instruction (EQU, GEQ, GRT, LEQ, LES, NEQ) to check for specific characters. The hexadecimal values of the characters determine if one string is less than or greater than another string. When the two strings are sorted as in a telephone directory, the order of the strings determines which one is greater.
ASCII Characters 1ab
l e s s e r g r e a t e r
Hex Codes $31$61$62 $31$62 $41 $41$42 $42 $61 $61$62 a>B AB < B
1b A AB B a ab
Steps:
1. Enter a rung and a compare instruction:
To see if the string is: equal to specific characters not equal to specific characters greater than specific characters equal to or greater than specific characters less than specific characters equal to or less than specific characters Enter this instruction: EQU NEQ GRT GEQ LES LEQ
13-11
2.
3.
6.
4.
42808
2. Enter the tag that stores the part of the bar code that you want to check. (The Destination from Extract a Part of a Bar Code, step 6.) 3. Enter a tag name to store the characters that you want to test against. Define the data type as a string. 4. Double-click value area of Source B. 5. Type the ASCII characters to test against and choose OK.
42615
EXAMPLE
When bag_flt_and_dest is equal to gate[1], xfer{1] turns on. This routes the bag to the required gate.
42808
13-12
Convert a Value
Use the following steps to convert the ASCII representation of a value to an DINT or REAL value that you can use in your application. The STOD and STOR instructions skip any initial control or non-numeric characters (except the minus sign in front of a number). If the string contains multiple groups of numbers that are separated by delimiters (e.g., / ), the STOD and STOR instructions convert only the first group of numbers.
Steps:
1. Which type of number is the value?
If: floating-point integer Then: Go to step 2. Go to step 7.
42810
3. Enter the EM bit of the ARD or ARL instruction that read the value. 4. Enter the string tag that contains the value. 5. Enter a tag name to store the value for use in your application. Define the data type as REAL.
EXAMPLE
After reading the weight from the scale (weight_read.EM is on) the STOR instruction converts the numeric characters in weight_ascii to a REAL value and stores the result in weight.
42810
13-13
42810
8. Enter the EM bit of the ARD or ARL instruction that read the value. 9. Enter the string tag that contains the value. 10. Enter a tag name to store the value for use in your application. Define the data type as DINT.
EXAMPLE
When MV_read.EM is on, the STOD instruction converts the first set of numeric characters in MV_msg to an integer value. The instruction skips the initial control character ($06) and stops at the delimiter ( \ ).
42620
11. Does this string have another value that you want to use?
If: yes no Then: Go to Decode an ASCII Message on page 13-14. Stop. You are done with this procedure.
13-14
Use the following steps to extract and convert a value from an ASCII message that contains multiple values. For example, a message may look like this:
first value second value third value
control character
delimiter
delimiter
termination character
42810
42810
13-15
4. 3.
5. 6.
42810
8.
9.
3. Enter the EM bit of the ARL instruction that read the value. 4. Enter the string tag that contains the value. 5. Enter a tag name to store the delimiter that marks the beginning of the value. Define the data type as a string. 6. Double-click the value area of Search.
42615
7. Type the delimiter and choose OK. 8. Enter the position in the string to start the search. Initially, you can use 0 to find the first delimiter. To decode additional data, increase this value to search for the next delimiter. 9. Enter a tag name to store the location of the delimiter. Define the data type as a DINT.
13-16
10.
11.
42810
12.
13.
10. Enter the string tag that contains the value. 11. Enter the maximum number of characters that this value can contain. 12. Enter the tag that stores the position of the delimiter. (The tag from step 9.) 13. Enter a tag name to store this value. Define the data type as a string. 14. Which type of conversion instruction did you use?
If: STOR STOD Then: Go to step 15. Go to step 18.
13-17
15.
16.
42809
15. Enter the tag that stores the value. (The tag from step 13.) 16. Enter a tag name to store the value for use in your application. Define the data type as REAL. 17. Go to step 20.
18. 19.
42809
18. Enter the tag that stores the value. (The tag from step 13.) 19. Enter a tag name to store the value for use in your application. Define the data type as DINT. 20. Does the string have another value that you want to use?
If: yes Then: A. Add 1 to the Result of the Find instruction. (The tag from step 9.) B. Repeat steps 2 - 19. no Stop. You are done with this procedure.
13-18
Build a String
Use the following steps to build a string from variables in your application. You can then send the string to an ASCII triggered device, such as a MessageView terminal. In this procedure, you build a string that contains two variables. For example, an operator terminal may require a string that looks like this:
[Ctrl-F] message # \ address [CR]
control character
delimiter
termination character
If you need to include more variables, use additional INSERT or CONCAT instructions. If you need to send a floating-point value, use a RTOS instruction in place of the DTOS instruction. The final string will not include the termination character. When you send the string, use an AWA instruction to automatically append the termination character.
Steps:
1. Enter the following rung:
2. 3. 4.
42813
2. Enter the input condition (s) that determines when to build the string. 3. Enter the DINT tag that contains the first value for the string. 4. Enter a tag name to stores the ASCII representation of the value. Define the data type as a string.
13-19
5.
6.
8.
42813
9.
10.
5. Enter a tag name to store the control and delimiter characters for the string. Define the data type as a string. 6. Double-click the value area of the Source A.
42615
7. Type the control character and delimiter and choose OK. For a control character, type the hex code of the character. For a list of hex codes, see the back cover of this manual. 8. Enter the tag that stores the ASCII representation of the first value. (The tag from step 4.) 9. Enter 2. This puts the value after the first character (control character) in Source A. 10. Enter a tag name to store the partially completed string. Define the data type as a string.
13-20
11.
12.
13.
14.
42813
15.
11. Enter the DINT tag that contains the second value for the string. 12. Enter a tag name to store the ASCII representation of the value. Define the data type as a string. 13. Enter the tag that stores the partially completed string. (The tag from step 10.) 14. Enter the tag that stores the ASCII representation of the second value. (The tag from step 12.) 15. Enter a tag name to store the completed string. Define the data type as a string.
13-21
EXAMPLE
To trigger a message in a MessageView terminal, the controller sends the terminal a message in the following format: [Ctrl-T] message # \ address [CR] When send_msg is on, the rung does the following: The first DTOS instruction converts the message number to ASCII characters. The INSERT instruction inserts the message number (in ASCII) after the control character [Ctrl-T]. (The hex code for Ctrl-T is $14.) The second DTOS instruction converts the node number of the terminal to ASCII characters. The CONCAT instruction puts the node number (in ASCII) after the backslash [ \ ] and stores the final string in msg. To send the message, an AWA instruction sends the msg tag and appends the carriage return [CR].
42813
13-22
Notes:
Chapter
14
Use a force to override data that your logic either uses or produces. For example, use forces in the following situations: test and debug your logic check wiring to an output device temporarily keep your process functioning when an input device has failed Use forces only as a temporary measure. They are not intended to be a permanent part of your application.
review general information about I/O forces, including which elements you are permitted to When to Use an I/O Force on page 14-6 force and how an I/O force effects your project force an I/O value review general information about stepping through a transition or a simultaneous path step through an active transition step through a simultaneous path that is forced false review general information about SFC forces, including which elements you are permitted to force and how the forces effect the execution of your SFC force a transition or simultaneous path within an SFC stop the effects of a force Add an I/O Force on page 14-8 When to Use Step Through on page 14-9 Step Through a Transition or a Force of a Path on page 14-9 When to Use an SFC Force on page 14-9 Add an SFC Force on page 14-12 Remove or Disable Forces on page 14-13
14-2
Precautions
ATTENTION
Forcing can cause unexpected machine motion that could injure personnel. Before you use a force, determine how the force will effect your machine or process and keep personnel away from the machine area. Enabling I/O forces causes input, output, produced, or consumed values to change. Enabling SFC forces causes your machine or process to go to a different state or phase. Removing forces may still leave forces in the enabled state. If forces are enabled and you install a force, the new force immediately takes effect.
Enable Forces
For a force to take effect, you enable forces. You can only enable and disable forces at the controller level. You can enable I/O forces and SFC forces separately or at the same time. You cannot enable or disable forces for a specific module, tag collection, or tag element.
IMPORTANT
If you download a project that has forces enabled, the programming software prompts you to enable or disable forces after the download completes.
14-3
ATTENTION
Changes to forces can cause unexpected machine motion that could injure personnel. Before you disable or remove forces, determine how the change will effect your machine or process and keep personnel away from the machine area.
14-4
Before you use a force, determine the status of forces for the controller. You can check force status in the following ways:
To determine the status of: I/O forces Use any of the following: Online Toolbar FORCE LED GSV Instruction SFC forces Online Toolbar
Online Toolbar
The Online toolbar shows the status of forces. It shows the status of I/O forces and SFC forces separately.
Forces tab
This: Enabled
Means: If the project contains any forces of this type, they are overriding your logic. If you add a force of this type, the new force immediately takes effect
Forces of this type are inactive. If the project contains any forces of this type, they are not overriding your logic. At least one force of this type exists in the project. No forces of this type exist in the project.
14-5
FORCE LED
If your controller has a FORCE LED, use the LED to determine the status of any I/O forces.
IMPORTANT The FORCE LED shows only the status of I/O forces. It does not show that status of SFC forces.
Then: No tags contain force values. I/O forces are inactive (disabled). flashing solid At least one tag contains a force value. I/O forces are inactive (disabled). I/O forces are active (enabled). Force values may or may not exist.
GSV Instruction
IMPORTANT The ForceStatus attribute shows only the status of I/O forces. It does not show the status of SFC forces.
The following example shows how to use a GSV instruction to get the status of forces.
14-6
What to Force
If you want to:
override an input value, output value, produced tag, or consumed tag override the conditions of a transition one time to go from an active step to the next step override one time the force of a simultaneous path and execute the steps of the path override the conditions of a transition in a sequential function chart execute some but not all the paths of a simultaneous branch of a sequential function chart
Use an I/O force to accomplish the following: override an input value from another controller (i.e., a consumed tag) override an input value from an input device override your logic and specify an output value for another controller (i.e., a produced tag) override your logic and specify the state of an output device
IMPORTANT
Forcing increases logic execution time. The more values you force, the longer it takes to execute the logic.
IMPORTANT
I/O forces are held by the controller and not by the programming workstation. Forces remain even if the programming workstation is disconnected.
When you force an I/O value: You can force all I/O data, except for configuration data. If the tag is an array or structure, such as an I/O tag, force a BOOL, SINT, INT, DINT, or REAL element or member. If the data value is a SINT, INT, or DINT, you can force the entire value or you can force individual bits within the value. Individual bits can have a force status of: no force force on force off
14-7
You can also force an alias to an I/O structure member, produced tag, or consumed tag. An alias tag shares the same data value as its base tag, so forcing an alias tag also forces the associated base tag. Removing a force from an alias tag removes the force from the associated base tag.
14-8
To override an input value, output value, produced tag, or consumed tag, use an I/O force: Forcing can cause unexpected machine motion that could injure personnel. Before you use a force, determine how the force will effect your machine or process and keep personnel away from the machine area. Enabling I/O forces causes input, output, produced, or consumed values to change. If forces are enabled and you install a force, the new force immediately takes effect. 1. What is the state of the I/O Forces indicator?
If: off flashing Then note the following: No I/O forces currently exist. No I/O forces are active. But at least one force already exists in your project. When you enable I/O forces, all existing I/O forces will also take effect. I/O forces are enabled (active). When you install (add) a force, it immediately takes effect.
solid
2. Open the routine that contains the tag that you want to force. 3. Right-click the tag and choose Monitor If necessary, expand the tag to show the value that you want to force (e.g., BOOL value of a DINT tag). 4. Install the force value:
To force a: BOOL value non-BOOL value Do this: Right-click the tag and choose Force ON or Force OFF. In the Force Mask column for the tag, type the value to which you want to force the tag. Then press the Enter key.
14-9
To override a false transition one time and go from an active step to the next step, use the Step Through option. With the Step Through option: You do not have to add, enable, disable, or remove forces. The next time the SFC reaches the transition, it executes according to the conditions of the transition. This option also lets you override one time the false force of a simultaneous path. When you step through the force, the SFC executes the steps of the path.
To step through the transition of an active step or a force of a simultaneous path: 1. Open the SFC routine. 2. Right-click the transition or the path that is forced and choose Step Through.
Force a Transition
To override the conditions of a transition through repeated executions of an SFC, force the transition. The force remains until you remove it or disable forces
If you want to: prevent the SFC from going to the next step cause the SFC go to the next step regardless of transition conditions Then: force the transition false force the transition true
14-10
If you force a transition within a simultaneous branch to be false, the SFC stays in the simultaneous branch as long as the force is active (installed and enabled). To leave a simultaneous branch, the last step of each path must execute at least one time and the transition below the branch must be true. Forcing a transition false prevents the SFC from reaching the last step of a path. When you remove or disable the force, the SFC can execute the rest of the steps in the path.
For example, to exit this branch, the SFC must be able to: execute Step_011 at least once get past Tran_011 and execute Step_012 at least once determine that Tran_012 is
14-11
If you force a path of a simultaneous branch to be false, the SFC stays in the simultaneous branch as long as the force is active (installed and enabled). To leave a simultaneous branch, the last step of each path must execute at least one time and the transition below the branch must be true. Forcing a path false prevents the SFC from entering a path and executing its steps. When you remove or disable the force, the SFC can execute the steps in the path.
14-12
Forcing can cause unexpected machine motion that could injure personnel. Before you use a force, determine how the force will effect your machine or process and keep personnel away from the machine area. Enabling SFC forces causes your machine or process to go to a different state or phase. If forces are enabled and you install a force, the new force immediately takes effect. 1. What is the state of the SFC Forces indicator?
If: off flashing Then note the following: No SFC forces currently exist. No SFC forces are active. But at least one force already exists in your project. When you enable SFC forces, all existing SFC forces will also take effect. SFC forces are enabled (active). When you install (add) a force, it immediately takes effect.
solid
2. Open the SFC routine. 3. Right-click the transition or start of a simultaneous path that you want to force, and choose either Force TRUE (only for a transition) or Force FALSE. 4. Are SFC forces enabled? (See step 1.)
If: no yes Then: From the Logic menu, choose SFC Forcing ! Enable All SFC Forces. Then choose Yes to confirm. Stop.
14-13
!
If you want to: stop an individual force
And: leave other forces enabled and in effect leave the I/O forces in the project remove the I/O forces from the project leave the SFC forces in the project remove the SFC forces from the project
Then: Remove an Individual Force Disable All I/O Forces Remove All I/O Forces Disable All SFC Forces Remove All SFC Forces
stop all I/O forces but leave all SFC forces active stop all SFC forces but leave all I/O forces active
1. Open the routine that contains the force that you want to remove. 2. What is the language of the routine?
If: SFC ladder logic function block structured text Then: Go to step 4. Go to step 4. Go to step 3. Go to step 3.
3. Right-click the tag that has the force and choose Monitor If necessary, expand the tag to show the value that is forced (e.g., BOOL value of a DINT tag). 4. Right-click the tag or element that has the force and choose Remove Force.
Publication 1756-PM001G-EN-P - March 2004
14-14
Chapter
15
Use this chapter to develop logic that handles specific fault conditions.
For this information: Develop a Fault Routine Programmatically Clear a Major Fault Clear a Major Fault During Prescan Test a Fault Routine Create a User-Defined Major Fault Major Fault Codes See page: 15-1 15-5 15-8 15-12 15-13 15-15
If a fault condition occurs that is severe enough for the controller to shut down, the controller generates a major fault and stops the execution of logic. Depending on your application, you may not want all major faults to shut down your entire system. In those situations, you can use a fault routine to clear a specific fault and let at least some of your system continue to operate. EXAMPLE Use a fault routine In a system that uses recipe numbers as indirect addresses, a miss-typed number could produce a major fault, such as type 4, code 20. To keep the entire system from shutting down, a fault routine clears any type 4, code 20, major faults.
15-2
15-3
1. Right-click the program and choose Properties. 2. Specify the fault routine.
1. Create a program for the Controller Fault Handler. 2. Create a routine for the program.
15-4
When power is restored, take specific actions and then resume normal operation
1. Create a program for the Power-Up Handler. 2. Create a routine for the program.
15-5
To clear a major fault that occurs during the execution of your project, complete the following actions in the appropriate routine. (See Choose Where to Place the Fault Routine on page 15-2.)
Step
Page: Create a Data Type to Store Fault Information Get the Fault Type and Code Check for a Specific Fault Clear the Fault 15-5 15-6 15-7 15-7
15-6
To simplify access to the MajorFaultRecord attribute, create the following user-defined data type:
To create a new data type:
Data Types
User-Defined
Info
1. 2.
42372
1. The GSV instruction accesses the MAJORFAULTRECORD attribute of this program. This attribute stores information about the fault. 2. The GSV instruction stores the fault information in the major_fault_record tag. When you enter a tag that is based on a structure, enter the first member of the tag.
Tag Name major_fault_record Type FAULTRECORD
15-7
42372
3.
4.
1. This EQU instruction checks for a specific type of fault, such as program, I/O. In Source B, enter the value for the type of fault that you want to clear. 2. This EQU instruction checks for a specific fault code. In Source B, enter the value for the code that you want to clear. 3. This CLR instruction sets to zero the value of the fault type in the major_fault_record tag. 4. This CLR instruction sets to zero the value of the fault code in the major_fault_record tag.
1. 2.
42372
1. The SSV instruction writes new values to the MAJORFAULTRECORD attribute of this program. 2. The SSV instruction writes the values contained in the major_fault_record tag. Since the Type and Code member are set to zero, the fault clears and the controller resumes execution.
15-8
If the controller faults immediately after you switch it to the Run mode, then examine the prescan operation for the fault. Depending on the revision of your controller, an array subscript that is beyond the range of the array (out of range) during prescan may or may not produce a fault:
Then: During prescan, an array subscript that is beyond the range of the array (out of range) produces a major fault. See the release notes for the firmware of your controller. During prescan, the controller automatically clears any faults due to an array subscript that is beyond the range of the array (out of range).
To clear a major fault that occurs during prescan: Identify When the Controller is in Prescan Get the Fault Type and Code Check for a Specific Fault Clear the Fault
43063
1. Enter this rung as the first rung in the main routine of the program. 2. The fault routine of this program uses the status of this bit to determine if the fault occurred during prescan or normal scan of the logic: During prescan, this bit is off. (During prescan, the controller resets all bits that are referenced by OTE instructions.) Once the controller begins to execute the logic, this bit will always be on.
Tag Name CPU_scanning
Publication 1756-PM001G-EN-P - March 2004
Type BOOL
15-9
1. 2.
43064
1. The GSV instruction accesses the MAJORFAULTRECORD attribute of this program. This attribute stores information about the fault. 2. The GSV instruction stores the fault information in the major_fault_record tag. When you enter a tag that is based on a structure, enter the first member of the tag.
Tag Name major_fault_record Type FAULTRECORD
15-10
43064
4.
5.
1. During prescan the bits of all OTE instructions are off and this instruction is true. Once the controller begins to execute the logic, this instruction is always false. 2. This EQU instruction checks for a fault of type 4, which means that an instruction in this program caused the fault. 3. This EQU instruction checks for a fault of code 20, which means that either an array subscript is too large, or a POS or LEN value of a CONTROL structure is invalid. 4. This CLR instruction sets to zero the value of the fault type in the major_fault_record tag. 5. This CLR instruction sets to zero the value of the fault code in the major_fault_record tag.
15-11
2. 3.
43064
1. During prescan the bits of all OTE instructions are off and this instruction is true. Once the controller begins to execute the logic, this instruction is always false. 2. The SSV instruction writes new values to the MAJORFAULTRECORD attribute of this program. 3. The SSV instruction writes the values contained in the major_fault_record tag. Since the Type and Code member are set to zero, the fault clears and the controller resumes execution.
15-12
You can use a JSR instruction to test the fault routine of a program without creating an error (i.e., simulate a fault): 1. Create a BOOL tag that you will use to initiate the fault. 2. In the main routine or a subroutine of the program, enter the following rung:
is the: tag that you will use to initiate the fault (Step 1.) fault routine of the program
EXAMPLE
When test_fault_routine is on, a major fault occurs and the controller executes Fault_Routine.
15-13
If you want to suspend (shut down) the controller based on conditions in your application, create a user-defined major fault. With a user-defined major fault: The fault type = 4. You define a value for the fault code. Choose a value between 990 to 999. These codes are reserved for user-defined faults. The controller handles the fault the same as other major faults: The controller changes to the faulted mode (major fault) and stops executing the logic. Outputs are set to their configured state or value for faulted mode. EXAMPLE User-defined major fault When Tag_1.0 = 1, produce a major fault and generate a fault code of 999. To create a user-defined major fault: Create a Fault Routine for the Program Configure the Program to Use the Fault Routine Jump to the Fault Routine
1. In the controller organizer, right-click the program and choose New Routine. 2. In the name box, type a name for the fault routine (name_of_fault_routine ). 3. From the Type drop-down list, choose Ladder. 4. Choose OK.
15-14
where: Fault_Routine x
is: name of the fault routine for the program value for the fault code
EXAMPLE
When Tag_1.0 = 1, execution jumps to name_of_fault_routine. A major fault occurs and the controller enters the faulted mode. Outputs go to the faulted state. The Controller Properties dialog box, Major Faults tab, displays the code 999.
15-15
Use the following table to determine the cause and corrective action for a major fault. The type and code correspond to the type and code displayed in these locations: Controller Properties dialog box, Major Faults tab PROGRAM object, MAJORFAULTRECORD attribute
Table 15.1 Major Fault Types and Codes Type: 1 1 Code: 1 60 Cause: The controller powered on in Run mode. For a controller with no CompactFlash card installed, the controller: detected a non-recoverable fault cleared the project from memory Recovery Method: Execute the power-loss handler. 1. Clear the fault. 2. Download the project. 3. Change to remote run/run mode. If the problem persists: 1. Before you cycle power to the controller, record the state of the OK and RS232 LEDs. 2. Contact Rockwell Automation support. See the back of this publication. 1. Clear the fault. 2. Download the project. 3. Change to remote run/run mode. If the problem persists, contact Rockwell Automation support. See the back of this publication. Check that the I/O module is in the chassis. Check electronic keying requirements. View the controller properties Major Fault tab and the module properties Connection tab for more information about the fault. 3 3 4 4 4 4 20 23 16 20 21 31 Possible problem with the ControlBus chassis. At least one required connection was not established before going to Run mode. Unknown instruction encountered. Array subscript too big, control structure .POS or .LEN is invalid. Control structure .LEN or .POS < 0. The parameters of the JSR instruction do not match those of the associated SBR or RET instruction. A timer instruction has a negative preset or accumulated value. JMP to a label that did not exist or was deleted. Not recoverable - replace the chassis. Wait for the controller I/O light to turn green before changing to Run mode. Remove the unknown instruction. This probably happened due to a program conversion process. Adjust the value to be within the valid range. Dont exceed the array size or go beyond dimensions defined. Adjust the value so it is > 0. Pass the appropriate number of parameters. If too many parameters are passed, the extra ones are ignored without any error. Fix the program to not load a negative value into timer preset or accumulated value. Correct the JMP target or add the missing label.
61
For a controller with a CompactFlash card installed, the controller: detected a non-recoverable fault wrote diagnostic information to the CompactFlash card cleared the project from memory A required I/O module connection failed.
16
4 4
34 42
15-16
Table 15.1 Major Fault Types and Codes (Continued) Type: 4 Code: 82 Cause: A sequential function chart (SFC) called a subroutine and the subroutine tried to jump back to the calling SFC. Occurs when the SFC uses either a JSR or FOR instruction to call the subroutine. The data tested was not inside the required limits. Stack overflow. In a SFR instruction, the target routine does not contain the target step. Task watchdog expired. User task has not completed in specified period of time. A program error caused an infinite loop, or the program is too complex to execute as quickly as specified, or a higher priority task is keeping this task from finishing. 7 40 Store to nonvolatile memory failed. Recovery Method: Remove the jump back to the calling SFC.
4 4 4 6
83 84 89 1
Modify value to be within limits. Reduce the subroutine nesting levels or the number of parameters passed. Correct the SFR target or add the missing step. Increase the task watchdog, shorten the execution time, make the priority of this task higher, simplify higher priority tasks, or move some code to another controller.
1. Try again to store the project to nonvolatile memory. 2. If the project fails to store to nonvolatile memory, replace the memory board.
42
Load from nonvolatile memory failed because the firmware revision of the project in nonvolatile memory does not match the firmware revision of the controller. Attempted to place controller in Run mode with keyswitch during download. Actual position has exceeded positive overtravel limit. Actual position has exceeded negative overtravel limit. Actual position has exceeded position error tolerance.
Update the controller firmware to the same revision level as the project that is in nonvolatile memory.
8 11 11 11 11 11 11 11
1 1 2 3 4 5 6 7
Wait for the download to complete and clear fault. Move axis in negative direction until position is within overtravel limit and then execute Motion Axis Fault Reset. Move axis in positive direction until position is within overtravel limit and then execute Motion Axis Fault Reset. Move the position within tolerance and then execute Motion Axis Fault Reset.
Encoder channel A, B, or Z connection is broken. Reconnect the encoder channel then execute Motion Axis Fault Reset. Encoder noise event detected or the encoder signals are not in quadrature. Drive Fault input was activated. Synchronous connection incurred a failure. Fix encoder cabling then execute Motion Axis Fault Reset. Clear Drive Fault then execute Motion Axis Fault Reset. First execute Motion Axis Fault Reset. If that doesnt work, pull servo module out and plug back in. If all else fails replace servo module.
15-17
Table 15.1 Major Fault Types and Codes (Continued) Type: 11 11 Code: 8 9 Cause: Servo module has detected a serious hardware fault. Asynchronous Connection has incurred a failure. The motion task has experienced an overlap. Recovery Method: Replace the module. First execute Motion Axis Fault Reset. If that doesnt work, pull servo module out and plug back in. If all else fails replace servo module. The groups course update rate is too high to maintain correct operation. Clear the group fault tag, raise the groups update rate, and then clear the major fault.
11
32
15-18
Notes:
Chapter
16
If a fault condition occurs that is not severe enough for the controller to shut down, the controller generates a minor fault. The controller continues to execute. You do not need to clear a minor fault. To optimize execution time and ensure program accuracy, you should monitor and correct minor faults.
1. Enter a GSV instructions that gets the FAULTLOG object, MinorFaultBits attribute. 2. Monitor bit 6. 1. Enter a GSV instructions that gets the FAULTLOG object, MinorFaultBits attribute. 2. Monitor bit 7. 1. Enter a GSV instructions that gets the FAULTLOG object, MinorFaultBits attribute. 2. Monitor bit 9. 1. Enter a GSV instructions that gets the FAULTLOG object, MinorFaultBits attribute. 2. Monitor bit 10. 1. Create a user-defined data type that stores the fault information. Name the data type FaultRecord and assign the following members: Name: TimeLow TimeHigh Type Code Info Data Type: DINT DINT INT INT DINT[8] Style: Decimal Decimal Decimal Decimal Hex
2. Create a tag that will store the values of the MinorFaultRecord attribute. Select the data type from step 1. 3. Monitor S:MINOR. 4. If S:MINOR is on, use a GSV instruction to get the values of the MinorFaultRecord attribute. 5. If you want to detect a minor fault that is caused by another instruction, reset S:MINOR. (S:MINOR remains set until the end of the scan.)
16-2
The following example checks for a low battery warning. Check for a minor fault
EXAMPLE
Minor_fault_check times for 1 minute (60000 ms) and then automatically restarts itself.
Every minute, minor_fault_check.DN turns on for one scan. When this occurs, the GSV instruction gets the value of the FAULTLOG object, MinorFaultBits attribute, and stores it in the minor_fault_bits tag. Because the GSV instruction only executes once every minute, the scan time of most scans is reduced.
42373
16-3
The following example checks for a minor fault that is caused by a specific instruction. Check for a minor fault that is caused by an instruction
EXAMPLE
Multiplies value_a by 1000000 and checks for a minor fault, such as a math overflow: To make sure that a previous instruction did not produce the fault, the rung first clears S:MINOR. The rung then executes the multiply instruction. If the instruction produces a minor fault, the controller sets S:MINOR. If S:MINOR is set, the GSV instruction gets information about the fault and resets S:MINOR.
42373
16-4
Use the following table to determine the cause and corrective action for a minor fault. The type and code correspond to the type and code displayed in these locations: Controller Properties dialog box, Minor Faults tab PROGRAM object, MINORFAULTRECORD attribute
Table 16.1 Minor Fault Types and Codes Type: 4 4 4 Code: 4 5 6 Cause: An arithmetic overflow occurred in an instruction. In a GSV/SSV instruction, the specified instance was not found. In a GSV/SSV instruction, either: specified Class name is not supported specified Attribute name is not valid 4 4 4 4 7 35 36 51 The GSV/SSV destination tag was too small to hold all of the data. PID delta time 0. PID setpoint out of range The LEN value of the string tag is greater than the DATA size of the string tag. Fix the destination so it has enough space. Adjust the PID delta time so that it is > 0. Adjust the setpoint so that it is within range. 1. Check that no instruction is writing to the LEN member of the string tag. 2. In the LEN value, enter the number of characters that the string contains. 4 52 The output string is larger than the destination. Create a new string data type that is large enough for the output string. Use the new string data type as the data type for the destination. Either: Reduce the size of the ASCII value. Use a larger data type for the destination. 4 56 The Start or Quantity value is invalid. 1. Check that the Start value is between 1 and the DATA size of the Source. 2. Check that the Start value plus the Quantity value is less than or equal to the DATA size of the Source. 4 57 The AHL instruction failed to execute because the serial Either: port is set to no handshaking. Change the Control Line setting of the serial port. Delete the AHL instruction. 6 2 Periodic task overlap. Periodic task has not completed before it is time to execute again. 7 49 Project loaded from nonvolatile memory. Simplify program(s), or lengthen period, or raise relative priority, etc. Recovery Method: Fix program by examining arithmetic operations (order) or adjusting values. Check the instance name. Check the Class name and Attribute name.
53
The output number is beyond the limits of the destination data type.
16-5
Table 16.1 Minor Fault Types and Codes (Continued) Type: 9 9 Code: 0 1 Cause: Unknown error while servicing the serial port. Recovery Method: Contact GTS personnel.
The CTS line is not correct for the current configuration. Disconnect and reconnect the serial port cable to the controller. Make sure the cable is wired correctly
Poll list error. A problem was detected with the DF1 masters poll list, such as specifying more stations than the size of the file, specifying more then 255 stations, trying to index past the end of the list, or polling the broadcast address (STN #255).
Check for the following errors in the poll list: total number of stations is greater than the space in the poll list tag total number of stations is greater than 255 current station pointer is greater than the end of the poll list tag a station number greater than 254 was encountered
DF1 slave poll timeout. The poll watchdog has timed out for slave. The master has not polled this controller in the specified amount of time.
Modem contact was lost. DCD and/or DSR control lines are not being received in proper sequence and/or state.
10
10
16-6
Notes:
Chapter
17
Nonvolatile memory stores the contents of the user memory at the time that you store the project. Changes that you make after you store the project are not reflected in nonvolatile memory. If you make changes to the project but do not store those changes, you overwrite them when you load the project from nonvolatile memory. If this occurs, you have to upload or download the project to go online. If you want to store changes such as online edits, tag values, or a ControlNet network schedule, store the project again after you make the changes.
Use this procedure to store or load a project using the nonvolatile memory of a controller. If the controller loses power and does not have enough battery capacity, it loses the project in user memory. Nonvolatile memory lets you keep a copy of your project on the controller. The controller does not need power to keep this copy. You can load the copy from nonvolatile memory to the user memory of the controller: on every power-up whenever there is no project in the controller and it powers-up anytime through RSLogix 5000 software
17-2
Store:
Load:
If the controller does not use a 1784-CF64 Industrial CompactFlash several seconds card, a store may take up to 3 minutes. If the controller uses a CompactFlash card, the store is considerably faster (less than a minute).
In what controller mode (s) can I store or load program mode a project? Can I go online with the controller during a store or load? What is the state of the I/O during a store or load? no I/O remains in its configured state for program mode.
17-3
17-4
17-5
Then: The CompactFlash card uses a special format. Use only a Logix5000 controller to store a project on a CompactFlash card. Do not use a CompactFlash reader to read from or write to the card with a computer. Store only a single Logix5000 project and no other data on a CompactFlash card. When you store a project on a CompactFlash card, you overwrite the entire contents of the card. In other words, you lose everything that is currently on the card.
12.0
The CompactFlash card uses the FAT16 file system. If the card: is already formatted for the FAT16 file system is not formatted for the FAT16 file system Then the controller: Leaves existing data. Creates folders and files for the project and firmware. Deletes existing data. Formats the card for the FAT16 file system. Creates folders and files for the project and firmware. Once the CompactFlash card is formatted for the FAT16 file system: The CompactFlash card stores multiple projects and associated firmware. If the CompactFlash card already contains a project with same name, a store overwrites the project on the CompactFlash card. The CompactFlash card loads the most recently stored project. With a revision 12.0, you can also use a CompactFlash reader to read and manipulate the files on a CompactFlash card. See Use a CompactFlash Reader on page 17-18.
17-6
17-7
17-8
Examples
Here are some example uses for the different load options:
Example: 1.
Nonvolatile memory Load Image = On Power Up Load Mode = Program
Description: 1. You update the firmware of the controller to the desired revision. 2. You store the project for the controller in nonvolatile memory. 3. When you turn on power to the controller after installation, the project loads into the controller. 4. The controller remains in program mode.
2.
1. You store the project for the controller in nonvolatile memory. (The major and minor revision of firmware in the controller match the major and minor revision of the project in nonvolatile memory.) 2. If the battery of the controller becomes completely discharged and power to the controller is interrupted, the project is cleared from controller memory. 3. When power is restored, the project automatically loads into the controller and the controller returns to the run mode.
3.
1. The controller fails. 2. You remove the CompactFlash card. 3. You replace the failed controller with a new controller.
Load Image = On Power Up Load Mode = Program Revision 12.0
4. You replace the CompactFlash card. 5. When you turn on the power, both the firmware and project load into the controller. The controller remains in program mode. 1. You want to load a different project into your controller. 2. A CompactFlash card contains the desired project. 3. With the CompactFlash card installed in the controller, you use RSLogix 5000 software to load the project into the controller.
4.
17-9
Store a Project
In this task, you store a project in the nonvolatile memory of the controller. ATTENTION During a store, all active servo axes are turned off. Before you store a project, make sure that this will not cause any unexpected movement of an axis.
Before you store the project: make all the required edits to the logic download the project to the controller schedule your ControlNet networks To store a project: Configure the Store Operation Store the Project Save the Online Project
3.
42627
3. On the Online toolbar, click the controller properties button. 4. Click the Nonvolatile Memory tab.
17-10
5.
42865
5. Choose Load/Store.
Project that is currently in the nonvolatile memory of the controller (if any project is there). Project that is currently in the user memory (RAM) of the controller.
6. 7. 8.
1.
6. Choose when (under what conditions) to load the project back into the user memory (RAM) of the controller. 7. In step 6, which load image option did you select?
If: On Power Up On Corrupt Memory Then: Select the mode that you want the controller to go to after a load: remote program remote run To go to this mode after a load, turn the keyswitch of the controller to the REM position. User Initiated Go to step 8.
8. Type a note that describes the project that you are storing, if desired.
Publication 1756-PM001G-EN-P - March 2004
17-11
17-12
Load a Project
In this task, you use RSLogix 5000 software to load the project from nonvolatile memory. ATTENTION During a load, all active servo axes are turned off. Before you load a project, make sure that this will not cause any unexpected movement of an axis.
!
Steps:
1. Go online with the controller. 2. Did the following dialog box open?
42873
If: No
b.
b. On the Online toolbar, click the controller properties button. Yes Put the controller in Program mode (Rem Program or Program). Use either the: General tab of the Connected To Go Online dialog box. keyswitch on the front of the controller
17-13
4.
42865
4. Choose Load/Store.
Project that is currently in the nonvolatile memory of the controller (if any project is there). Project that is currently in the user memory (RAM) of the controller.
5.
5. Choose Load >. A dialog box asks you to confirm the load. 6. To load the project from the nonvolatile memory, choose Yes.
17-14
During the load, the following events occur: On the front of the controller, the OK LED displays the following sequence:
If the load: does not include firmware includes firmware Then the OK LED displays: solid red ! solid green flashing red ! solid red ! solid green
RSLogix 5000 software goes offline. When the load is finished, you remain offline. If you want to be online, you must manually go online.
When the controller loads a project from nonvolatile memory, it provides the following information: logs a minor fault (type 7, code 49) sets the FAULTLOG object, MinorFaultBits attribute, bit 7 If you want your project to flag that it loaded from nonvolatile memory, use the following ladder logic:
On the first scan of the project (S:FS is on), the GSV instruction gets the FAULTLOG object, MinorFaultBits attribute, and stores the value in minor_fault_bits. If bit 7 is on, the controller loaded the project from its nonvolatile memory.
42867
Is: Tag that stores the FAULTLOG object, MinorFaultBits attribute. Data type is DINT. Tag that indicates that the controller loaded the project from its nonvolatile memory.
17-15
To remove a project from nonvolatile memory, complete the following actions: Check the Current Load Image Option Change the Load Image Option Clear the Project from the Controller Store the Empty Image
2.
42627
2. On the Online toolbar, click the controller properties button. 3. Click the Nonvolatile Memory tab.
4.
42865
17-16
3.
42865
3. Choose Load/Store.
17-17
42874
4.
4. Choose < Store. A dialog box asks you to confirm the store. 5. To store the project, choose Yes. During the store, the following events occur: On the front of the controller, the OK LED displays the following sequence: flashing green ! red ! green RSLogix 5000 software goes offline. A dialog box tells you that the store is in progress. 6. Choose OK. When the store is finished, you remain offline. If you want to be online, you must manually go online.
17-18
If the revision of the project or projects on your CompactFlash card are 12.0, then the card is formatted using the FAT16 file system. Typically, you do not have to manage the files on a CompactFlash card. The card automatically loads the project that you most recently stored. For additional flexibility, the file system also lets you: Manually Change Which Project Loads from the CompactFlash Card Manually Change the Load Parameters for a Project
17-19
1.
2.
1. To change which project loads from the card, open Load.xml. Use a text editor to open the file. 2. Edit the name of the project that you want to load. Use the name of an XML file that is in the CurrentApp folder. In the CurrentApp folder, a project is comprised of an XML file and a P5K file.
17-20
1.
1. To change the load parameters for a project, open the XML file with the same name as the project. Use a text editor to open the file.
17-21
2.
3.
3. Edit the Load Mode option of the project (doesnt apply if the Load Image option is User Initiated).
If you want to set the Load Mode option to: Program (Remote Only) Run (Remote Only) Then enter: PROGRAM RUN
17-22
Chapter
18
Secure a Project
Use this procedure to control who has access to your project. To secure a project, these options are available:
If you want to: Prevent others from seeing the logic within one or more routines of a project Assign varying levels of access to a project, such as let: engineers have full access maintenance personal make limited changes operators only view logic and data Then: Use Routine Source Protection Use RSI Security Server to Protect a Project See page: 18-1 18-13
To limit who has access to a routine, use RSLogix 5000 software to assign a source key to the routine (protect the routine). To protect a routine, you have to first activate the feature for RSLogix 5000 software. Once you protect a routine, a computer requires the source key to edit, copy, or export the routine. You have the option of making a routine either viewable or not viewable without the source key. Regardless of whether or not the source key is available, you can always download the project and execute all the routines. You can regain access to a protected routine from a specific computer using either of the following methods: Add the source key file and point RSLogix 5000 software to the location of the file. Create the source key file and manually enter the name for the source key.
18-2
Secure a Project
If the controller organizer displays: Source Not Available Source Not Available (Viewable)
Then: A source key is assigned to the routine. To open the routine, your computer requires the source key for the routine. A source key is assigned to the routine. You can only open and view the routine. You cannot make any changes or copy any of contents of the routine.
A source key is assigned to the routine. You have full access to the routine. A source key is assigned to the routine. You have full access to the routine. Those who do not have the source key can still view the routine.
No source key is assigned to the routine. You have full access to the routine.
IMPORTANT
If the source of a routine is unavailable, do not export the project. An export file (.L5K) contains only routines where the source code is available. If you export a project where the source code is not available for all routines, you will not be able to restore the entire project.
Secure a Project
18-3
Choose the Level of Protection for Each Routine Choose the Number of Source Keys Define the Source Key or Keys
Choose a File Location in Which to Store the Source Keys Activate the RSLogix 5000 Source Protection Feature Create a File for the Source Keys
Protect a Routine with a Source Key Limit access to the protected routines from this computer? Yes Use this computer to protect other routines? No Disable Routine Source Protection Remove Access to a Protected Routine Yes No
Done
18-4
Secure a Project
greatest number of source keys (more difficult to manage but more protection)
Choose the number of source keys that balances your need for protection verses the level of source key management that you want to undertake.
Secure a Project
18-5
18-6
Secure a Project
To make the registry entry: 1. Get your RSLogix 5000 software CD. 2. From the CD, execute the following file: language \Tools\Source Protection Tool\Enable Protected Routine Config.reg where: language is the language of your software. For example, for software that is in English, open the ENU folder. The Enable Protected Routine Config.reg file makes the required registry entry.
4. Choose Yes.
Secure a Project
18-7
5. 7.
5. Click 6. Select a folder in which to store the file and choose OK. 7. Choose OK. A dialog box asks if you want to create the source key file (sk.dat). 8. Choose Yes.
4. 3.
18-8
Secure a Project
3. Select the routine or routines that you want to protect. 4. Click Protect.
7. 5. 6.
5. Type a name that you want to use as the source key. Or select an existing source key from the drop-down list. 6. If someone does not have the source key, do you want to let them open and view the routine?
If: No Yes Then: Clear (uncheck) the Allow viewing of routine check box (default). Check the Allow viewing of routine check box.
7. Choose OK. 8. When you have assigned the required source keys to the project, click Close. 9. From the File menu, choose Save.
1. Open the RSLogix 5000 project that is protected. 2. From the Tools menu, choose Security ! Configure Source Protection.
Secure a Project
18-9
3.
3. Click Clear. A dialog box asks if you want to delete the source key file (sk.dat). 4. Do you want to remove the source key file from the computer (prevent future access to the file)?
If: Yes No Then: Choose Yes. Choose No.
1. Open the RSLogix 5000 project that is protected. 2. From the Tools menu, choose Security ! Configure Source Protection.
18-10
Secure a Project
4.
3. Click Disable Ability To Configure Protected Routines. A dialog box prompts you to confirm the action. 4. Choose Yes. A dialog box asks if you want to delete the source key file (sk.dat). 5. Do you want to remove the source key file from the computer (prevent future access to the file)?
If: Yes No Then: Choose Yes. Choose No.
Secure a Project
18-11
4. Choose Yes.
5. 7.
5. Click 6. Does this computer already have a source key file (sk.dat)?
If: Yes Then: A. Select the folder that contains the file and choose OK. B. Choose OK. No A. Select the folder in which to store the new file and choose OK.
A dialog box asks if you want to create the source key file (sk.dat).
B. Choose Yes.
18-12
Secure a Project
7.
7. Click View. If you are prompted to select a program with which to open the file, select a word processing program, such as Notepad. The sk.dat file opens. 8. Type the name of the source key. To enter multiple keys, type each key on a separate line.
sk.dat - Notepad key1 key2 key3
Secure a Project
18-13
RSI Security Server software lets you control the access that individuals have to RSLogix 5000 projects. With this software, you customize access to projects based on the: user that is currently logged into the workstation RSLogix 5000 project that the user is accessing workstation from which the user is accessing the RSLogix 5000 project Before you use Security Server software for RSLogix 5000 projects, set up the software: Install RSI Security Server Software Set Up DCOM Enable Security Server for RSLogix 5000 Software Import the RSLogix5000Security.bak File Define the Global Actions for Your Users Define the Project Actions for Your Users Add Users Add User Groups Assign Global Access to RSLogix 5000 Software Assign Project Actions for New RSLogix 5000 Projects
Once Security Server software is set up for RSLogix 5000 projects, complete the following actions to protect a project: Secure an RSLogix 5000 Project Assign Access to an RSLogix 5000 Project Refresh RSLogix 5000 Software, If Needed
See Getting Results with Rockwell Softwares Security Server (Standalone Edition), which ships with the RSI Security Server software.
18-14
Secure a Project
Set Up DCOM
See Getting Results with Rockwell Softwares Security Server (Standalone Edition), which ships with the RSI Security Server software.
Program Files
Keys.ini SetSecKeys.exe
Rockwell Software
RSLogix 5000
language
version
Security
Where:
language version
Is the: language of your software. For example, for software that is in English, open the ENU folder. version of your software, such as v10
The Locate Project File dialog box opens. By default, the Keys.ini file should already be selected. 2. Choose Open.
Secure a Project
18-15
Program Files
Rockwell Software
RSLogix 5000
language
version
+
Where:
language
Security
Is the: language of your software. For example, for software that is in English, open the ENU folder. version of your software, such as v10
version
2.01
Program Files
Rockwell Software
Security Server
System
18-16
Secure a Project
Table 18.2 Global Actions To let a user: secure any unsecured controller create a new RSLogix 5000 project open an .L5K file in RSLogix 5000 software, which creates a project translate a PLC or SLC project to an .L5K file use RSLogix 5000 software to start ControlFLASH software and update the firmware of a controller Update Firmware Then grant access to the following actions: Secure Controller New Project
Use the following worksheet to record the global actions that you will permit each group of users to perform.
Table 18.3 Global actions for each group of users This group of users: Requires this access: Secure Controller New Project Update Firmware
Secure a Project
18-17
43075
43078
18-18
Secure a Project
The following actions apply to a secured RSLogix 5000 project or group of projects.
Table 18.4 Project Actions To let a user: open a project offline copy components from a project export the tags of a project go online and monitor a project save a project save a project as a different .ACD file open an older revision of a project compact a project export a project download or upload a project change the mode of the controller change the path to the controller print a report clear faults change the wall clock time create, delete, edit, and run a trend change the configuration of an I/O module change the configuration of a MSG instruction enter, enable, disable, and remove forces change tag values update firmware perform all actions available through RSLogix 5000 software except unsecure a secured controller unsecure a secured controller Full Access And: And: Grant this action: View Project Go Online Maintain Project
Update Firmware
Secure a Project
18-19
Use the worksheet on page 18-19 to record the project actions that you will permit each user or group of users to perform.
Table 18.5 Project actions for projects that are in the New RSLogix 5000 Resources group and for individual projects For this project or group of projects: New RSLogix 5000 Resources New RSLogix 5000 Resources New RSLogix 5000 Resources New RSLogix 5000 Resources This user or group of users: Requires this access: View Project Go Online Maintain Project Full Access Unsecure Controller Update Firmware
18-20
Secure a Project
Add Users
43084
2. Type the information for the user and then choose OK.
43074
Secure a Project
18-21
3. Follow the steps for this task. Assign the actions that you recorded on Table 18.3 on page 18-16.
43076
18-22
Secure a Project
1. In the Configuration explorer, select the New RSLogix 5000 Resources group.
43075
3. Follow the steps for this task. Assign the actions that you recorded on Table 18.5 on page 18-19.
43076
Secure a Project
18-23
4. Select RSI Security Server. 5. Choose OK and then Yes. In the Security Server software, the project appears as a member of the New RSLogix 5000 Resources group. If Security Server software is already open, then from its View menu, choose Refresh.
18-24
Secure a Project
1. In the Configuration explorer, select the New RSLogix 5000 Resources group.
43075
3.
43079
3. In the Member items list, select the project and click the << button. 4. Choose Apply.
7. Follow the steps for this task. Assign the actions that you recorded on Table 18.5 on page 18-19.
43076
Secure a Project
18-25
18-26
Secure a Project
Notes:
Chapter
19
Use this chapter to get information about the memory of your Logix5000 controller.
To: Determine What Memory Information You Want Estimate Memory Information Offline View Run Time Memory Information Write Logic to Get Memory Information See page: 19-1 19-2 19-3 19-4
Depending on your type of controller, the memory of the controller may be divided into several areas:
Then it stores this: produced tags consumed tags communication via Message (MSG) instructions communication with workstations communication with polled (OPC/DDE) tags that use RSLinx software(1) tags other than I/O, produced, or consumed tags logic routines communication with polled (OPC/DDE) tags that use RSLinx software(1)
These controllers do not divide their memory. They store all elements in one common memory area.
To communicate with polled tags, the controller uses both I/O and data and logic memory. 1756-L55M16 controllers have an additional memory section for logic.
19-2
To estimate how much controller memory your project requires, use the Memory tab of the controller properties dialog box. For each of the memory areas of your controller, it lets you estimate number of bytes of: free (unused) memory used memory largest free contiguous block of memory
1. Click the controller properties button. 2. Click the Memory tab.
3. For controllers with different memory options, choose the memory size (e.g., M12). 4. View the memory information since the last estimate.
19-3
When online with a controller, the Memory tab shows the actual memory usage of the controller. While the controller is running, it uses additional memory for communication. The amount it needs varies depending on the state of the communication. The Memory tab of the controller includes a Max Used entry for each type of memory. The Max Used values show the peak of memory usage as communications occur.
19-4
To use logic to get memory information for the controller: Get Memory Information from the Controller Choose the Memory Information That You Want Convert INTs to a DINT
19-5
IMPORTANT
19-6
DINT tag in which to store the 32-bit value Copy the value to the DINT tag. Copy 1 times the number of bytes in the Destination data type. In this case, the instruction copies 4 bytes (32 bits), which combines the lower and upper 16 bits into one 32-bit value.
In the following example, the COP instruction produces the 32-bit value that represents the amount of free I/O memory, in 32-bit words. EXAMPLE Convert INTs to a DINT Elements 3 of INT_array is the lower 16 bits of the amount of free I/O memory. Element 4 is the upper 16 bits. Memory_IO_Free is a DINT tag (32 bits) in which to store the value for the amount of free I/O memory. To copy all 32 bits, specify a Length of 1. This tells the instruction to copy 1 times the size of the Destination (32 bits). This copies both element 3 (16 bits) and element 4 (16 bits) and places the 32-bit result in Memory_IO_Free.
Appendix
Purpose
This appendix describes how to use ladder logic to send groups of Message (MSG) instructions in sequence. This lets them enter and exit the message queue in an ordered fashion.
Use this appendix if you need to control the execution of a large number of MSGs. To be processed, each MSG instruction must enter the message queue. The queue holds 16 MSGs. If more than 16 MSGs are enabled at one time, there may not be room on the queue when a MSG is enabled. If this occurs, the MSG has to wait until there is room on the queue before the controller can process the MSG. On each subsequent scan of the MSG, it checks the queue to see if there is room. The message manager logic in this appendix lets you control the number of MSGs that are enabled at one time and enable subsequent MSGs in sequence. In this way, MSGs enter and exit the queue in an ordered fashion and do not have to wait for room on the queue to become available.
In this appendix, the message manager logic sends three groups of MSGs. To make the example easier to follow, each groups contains only 2 MSGs. In your project, use more MSGs in each group, such as 5. Use as many groups as needed to include all your MSGs. The Msg_Group tag controls the enabling of each MSG. The tag uses the DINT data type. Each bit of the tag corresponds to a group of MSGs. For example, Msg_Group.0 enables and disables the first group of MSGs (group 0).
A-2
If S:FS = 1 (first scan), then initialize the MSGs: Msg_Group = 0, which disables all the MSGs. Msg_Group.0 =1, which enables the first group of MSGs.
A-3
A-4
Appendix
Use the following procedure to program a single message instruction to communicate with multiple controllers. To reconfigure a MSG instruction during runtime, write new values to the members of the MESSAGE data type. IMPORTANT In the MESSAGE data type, the RemoteElement member stores the tag name or address of the data in the controller that receives the message.
If the message: reads data writes data Then the RemoteElement is the: Source Element Destination Element
Tag Name
+ message.Channel. + message.Rack.
A B
B-2
A. If you use an asterisk [*] to designate the element number of the array, the value in B provides the element number. B. The Index box is only available when you use an asterisk [*] in the Source Element or Destination Element. The instruction subustitutes the value of Index for the asterisk [*].
B-3
To send a message to multiple controllers: TIP Set Up the I/O Configuration Define Your Source and Destination Elements Create the MESSAGE_CONFIGURATION Data Type Create the Configuration Array Get the Size of the Local Array Load the Message Properties for a Controller Configure the Message Step to the Next Controller Restart the Sequence
To copy the above components from a sample project, open the \RSLogix 5000\Projects\Samples folder.
MSG_to_Multiple_Controllers.ACD
43055
peer_controller
I/O Configuration
B-4
2. Create the local_array tag, which stores the data in this controller.
Tag Name local_array Type data_type [length ] where: data_type is the data type of the data that the message sends or receives, such as DINT, REAL, or STRING. length is the number of elements in the local array.
B-5
To store the configuration variables for the message to each controller, create the following user-defined data type.
Data Type: MESSAGE_CONFIGURATION
Name Description Members Name Data Type STRING STRING Style Description MESSAGE_CONFIGURATION Configuration properties for a message to another controller
Data Types
User-Defined
+ Path + RemoteElement
B-6
message_config message_config[0] + message_config[0].Path + message_config[0].RemoteElement message_config[1] + message_config[1].Path + message_config[1].RemoteElement message + message.Path. + message.RemoteElement.
next execution of the message Message Properties first execution of the message
Steps:
1. To store the configuration properties for the message, create the following array:
Tag Name message_config Type MESSAGE_CONFIGURATION[number ] Scope any
B-7
2. Into the message_config array, enter the path to the first controller that receives the message.
Tag Name Value {} {}
Right-click and choose Go to Message Path Editor.
Type the path to the remote controller. or Browse to the remote controller.
3. Into the message_config array, enter the tag name or address of the data in the first controller to receive the message.
Tag Name Value {} {}
{}
Type the tag name or address of the data in the other controller.
B-8
4. Enter the path and remote element for each additional controller:
Tag Name Value {} {}
{}
1. 2. 3.
43051
1. The SIZE instruction counts the number of elements in local_array. 2. The SIZE instruction counts the number of elements in Dimension 0 of the array. In this case, that is the only dimension. 3. Local_array_length stores the size (number of elements) of local_array. This value tells a subsequent rung when the message has been sent to all the controllers and to start with the first controller again.
Tag Name local_array_length Type DINT
B-9
4. 5.
6.
43051
1. This XIO instruction conditions the rung to continuously send the message.
Tag Name message Type MESSAGE Scope controller
2. The COP instruction loads the path for the message. The value of index determines which element the instruction loads from message_config. See Figure B.1 on page B-6.
Tag Name index Type DINT Scope any
3. The instruction loads 1 element from message_config. 4. The COP instruction loads the tag name or address of the data in the controller that receives the message. The value of index determines which element the instruction loads from message_config. See Figure B.1 on page B-6. 5. The instruction loads 1 element from message_config. 6. MSG instruction
B-10
IMPORTANT
43054
If you want to: read (receive) data from the other controllers
For this item: Message Type Source Element Number Of Elements Destination Tag Index
Type or select: the read-type that corresponds to the other controllers tag or address that contains the data in the first controller 1 local_array[*] 0 the write-type that corresponds to other controllers local_array[*] 0 1 tag or address that contains the data in the first controller path to the first controller Clear the Cache Connection check box. Since this procedure continuously changes the path of the message, it is more efficient to clear this check box.
Communication
B-11
43051
1. After the MSG instruction sends the message 2. This ADD instruction increments index. This lets the logic load the configuration properties for the next controller into the MSG instruction. 3. This ADD instruction increments the LocalIndex member of the MSG instruction. This lets the logic load the value from the next controller into the next element of local_array..
43051
1. When index equal local_array_length, the controller has sent the message to all the other controllers. 2. This CLR instruction sets index equal to 0. This lets the logic load the configuration properties for the first controller into the MSG instruction and start the sequence of messages again. 3. This CLR instruction sets the LocalIndex member of the MSG instruction equal to 0. This lets the logic load the value from the first controller into the first element of local_array..
B-12
Appendix
IEC61131-3 Compliance
Introduction
The International Electrotechnical Commission (IEC) has developed a series of specifications for programmable controllers. These specifications are intended to promote international unification of equipment and programming languages for use in the controls industry. These standards provide the foundation for Logix5000 controllers and RSLogix 5000 programming software. The IEC programmable controller specification is broken down into five separate parts each focusing on a different aspect of the control system: Part Part Part Part Part 1: 2: 3: 4: 5: General Information Equipment and Requirements Test Programming Languages User Guidelines Messaging Service Specification
The controls industry as a whole has focused on part 3 (IEC61131-3), Programming Languages, because it provides the cornerstone for implementing the other standards and provides the most significant end user benefit by reducing training cost. Because of this, only IEC61131-3 is addressed here.
C-2
IEC61131-3 Compliance
The IEC61131-3 programming language specification addresses numerous aspects of programmable controller including the operating system execution, data definitions, programming languages, and instruction set. Components of the IEC61131-3 specification are categorized as required by the specification, optional or extensions. By so doing, the IEC61131-3 specification provides a minimum set of functionality that can be extended to meet end user application needs. The downside of this approach is that each programmable control system vendor may implement different components of the specification or provide different extensions.
Operating System
The preemptive, multitasking operating system (OS) of Logix5000 controllers complies with the IEC61131-3 definition. In IEC61131-3, the programmable controllers OS can contain zero or more tasks, that can execute one or more programs each containing one or more functions or routines. According to IEC61131-3, the number of each of these components is implementation dependent. Logix5000 controllers provide multiple tasks, each containing multiple programs and an unlimited number of functions or routines. IEC61131-3 provides an option for creating different task execution classifications. Tasks may be configured as continuous, periodic, or event based. A continuous task does not need to be scheduled in that it will utilize any left over processing time when other tasks are dormant. Periodic tasks are scheduled to operate based on a reoccurring time period. The IEC61131-3 specification does not specify a time base for periodic task configuration. An IEC61131-3 event based task is triggered upon detection of the rising edge of a configured input. Logix5000 controllers support both continuous and periodic tasks. Additionally, the period for a periodic task is configurable starting as low as 1 millisecond (ms).
Data Definitions
The IEC61131-3 specification provides access to memory through the creation of named variables. IEC61131-3 names for variables consist of a minimum of six characters (RSLogix5000 programming software supports a minimum of 1 character) starting with an underscore "_" or an alpha character (A-Z), followed by one or more characters consisting of an underscore "_", alpha character (A-Z) or a number (0-9). Optionally, lower case alpha characters (a-z) can be supported as long as they are case insensitive (A = a, B = b, C = c ). Logix5000 controllers provide full compliance with this definition, support the lower case option, and extend the name to support up to 40 character names.
IEC61131-3 Compliance
C-3
Data variables in IEC61131-3 may be defined such that they are accessible to all programs within a resource or controller, or limited access is provided only to the functions or routines within a single program. To pass data between multiple resources or controllers, access paths may be configured to define the location of the data within a system. Logix5000 controllers provide compliance by providing program scoped, controller scoped data and permits the configuration of access paths using produced/consumed data. The memory interpretation of a variable within IEC61131-3 is defined through the use of either an elementary data type or an optional derived data type that is created from a group of multiple data types. Logix5000 controllers support the use of the BOOL (1 bit), SINT (8 bit integer), INT (16 bit integer), DINT (32 bit integer) and REAL (IEEE floating point number) elementary data types. Additionally, the optional derived data types are supported through the creation of user defined structures and arrays.
Programming Languages
The IEC61131-3 specification defines five (5) different programming languages and a set of common elements. All languages are defined as optional but at least one must be supported in order to claim compliance with the specification. The IEC61131-3 programming language components are defined as follows: Common Language Elements Common Graphical Elements Instruction List (IL) Language Elements Structured Text Language (ST) Elements Ladder Diagram (LD) Language Elements Sequential Function Chart (SFC) Language Elements Function Block Diagram (FBD) Language Elements
Logix5000 controllers and RSLogix5000 provide support for the common language elements and the Structured Text, Ladder Diagram, Sequential Function Chart, and Function Block Diagram language options. Additionally, the environment utilizes an ASCII import/export format based on the Structured Text language. The instruction set and program file exchange features are discussed in detail in the sections that follow.
C-4
IEC61131-3 Compliance
Instruction Set
The instruction set specified by IEC61131-3 is entirely optional. The specification lists a limited set of instructions that if implemented must conform to the stated execution and visual representation. IEC61131-3 however, does not limit the instructions set to those listed within the specification. Each PLC vendor is free to implement additional functionality in the form of instructions over and above those listed by the specification. Examples of such extended instructions are those needed to perform diagnostics, PID loop control, motion control and data file manipulation. Because extended instructions are not defined by the IEC61131-3 specification, there is no guarantee that the implementation between different PLC vendors will be compatible. Thus utilization of these instructions may preclude the movement of logic between vendors. Logix5000 controllers and RSLogix5000 provide a suite of instructions that execute as defined by the IEC61131-3 specification. The physical representation of these instructions maintain their look and feel with existing systems so as to reduce the training cost associated with working with the environment. In addition to the IEC61131-3 compliant instructions, a full range of instructions from existing products have been brought forward into the environment so that no functionality is lost.
One of the goals of end-users creating programs in an IEC61131-3 compliant environment is the movement or portability of programs between controllers developed by different vendors. This area is a weakness of IEC61131-3 because no file exchange format is defined by the specification. This means that if any program created in one vendor's environment will require manipulation to move it to another vendor's system. In order to minimize the effort involved in performing cross-vendor portability, the RSLogix 5000 programming software for the controllers includes a full ASCII export and import utility. Additionally, the file format that is utilized by this tool is based on a hybrid of the IEC61131-3 Structured Text language definition. Controller operating system and data definitions follow the appropriate IEC61131-3 formats. Extensions were implemented in order to convert Ladder Diagram logic into ASCII text since this is not defined by IEC61131-3. For more information on the ASCII export and import utility of RSLogix 5000 programming software, see the Logix5000 Controllers Import/Export Reference Manual, publication 1756-RM084.
IEC61131-3 Compliance
C-5
Logix5000 controllers and RSLogix5000 comply with the requirements of IEC61131-3 for the following language features:
Feature Description: Lower case letters Number sign (#) Dollar sign ($) Subscript delimiters ([ ]) Identifiers using upper case and numbers Identifiers using upper case, numbers, and embedded underlines Identifiers using upper and lower case, numbers and embedded underlines Comments Integer literal Real literal Real literal with exponents Base 2 literal Base 8 literal Base 16 literal Boolean zero and one Empty String '' String of length one containing a character 'A' String of length one containing a space ' ' String of length one containing a single quote character '$'' String of length one containing a double quote character '"' String of length two containing CR and LF characters String of length one containing the LF character '$0A' String of length 5 which would print as "$1.00" using '$$1.00' Equivalent strings of length two 'AE', and '$C4$CB' String dollar sign '$$' String single quote '$'' String Line Feed '$L' or '$l' Extensions and Implementation Notes: none Used for immediate value data type designation Used for description and string control character Array subscripts Task, program, routine, structure and tag names Task, program, routine, structure and tag names Task, program, routine, structure and tag names ST Comments, also support /* Comment */, and // End of line comments. 12, 0, -12 12.5, -12.5 -1.34E-12, 1.234E6 2#0101_0101 8#377 16#FFE0 0, 1 Descriptions, and String Editor Descriptions, and String Editor Descriptions, and String Editor Descriptions, and String Editor Descriptions, and String Editor Descriptions, and String Editor Descriptions, and String Editor Descriptions, and String Editor Descriptions, and String Editor Descriptions, and String Editor Descriptions, and String Editor Descriptions, and String Editor
C-6
IEC61131-3 Compliance
Feature Number: 5 6 7 8 9 1 2 3 4 10 12 16 1 1 4 5 1 4 5 9 1 4 5 6 2a 1 2 3 4 1 1
Feature Description: String New-line '$N' or '$n' String From Feed (page) '$P' or '$p' String Carriage return '$R' or '$r' String Tab '$T' or '$t' String double quote $" BOOL Data Type SINT Data Type INT Data Type DINT Data Type REAL Data Type Time STRING data type Data type Hierarchy Direct Derivation from elementary types Array data types Structured Data types BOOL, SINT, INT, DINT initial value of 0 REAL, LREAL initial value of 0.0 Time initial value of T#0s Empty String '' Initialization of directly derived types Initialization of array data types Initialization of structured type elements Initialization of derived structured data types Textual invocation, non-formal Use of EN and ENO Usage without EN and ENO Usage with EN and without ENO Usage without EN and with ENO Overloaded functions ADD(INT, DINT) or ADD(DINT, REAL) _TO_ conversion function
Extensions and Implementation Notes: Descriptions, and String Editor Descriptions, and String Editor Descriptions, and String Editor Descriptions, and String Editor Descriptions, and String Editor Tag variable definition Tag variable definition Tag variable definition Tag variable definition Tag variable definition Tag variable definition, TIMER Structure 8 Bits none User Defined data type structures Tag variable definition User defined data type structures Tag variable definition Tag variable definition Tag variable definition, reset (RES) instruction Descriptions and Strings Import/export Import/export Import/export Import/export Available in ST Function present in LD but not labeled. Available in FBD. Available in FBD Available in FBD Available in FBD All overloaded types that are supported are documented with each instruction RAD, DEG instructions Radians to/from Decimal. String numeric conversion STOD, STOR, RTOS, DTOS. Others not needed because of instruction overloading TRN instruction in LD and TRUNC function in ST FRD instruction in LD
22 22
2 3
IEC61131-3 Compliance
C-7
Table Number:(1) 22 23 23 23 23 23 23 23 23 23 23 24 24 24 24 24 24 24 25 25 25 25 26 26 26 26 27 27 27
Feature Number: 4 1 2 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 1 2 3 4 5 6 7 8 1 2a 2b
Feature Description: INT to BCD Convert Absolute value Square root Natural log Log base 10 Sine in radians Cosine in radians Tangent in radians Principal arc sine Principal arc cosine Principal arc tangent Arithmetic add Arithmetic multiplication Arithmetic subtraction Arithmetic divide Modulo Exponentiation Value move Bit shift left Bit shift right Bit rotate left Bit rotate right AND OR XOR NOT SELECT Maximum select MAX Minimum select MIN
Extensions and Implementation Notes: TOD instruction in LD ABS instruction SQR instruction in LD and FBD and SQRT function in ST. LN instruction LOG instruction SIN instruction / function COS instruction / function TAN instruction / function ASN instruction in LD and FBD, and ASIN function in ST ACS instruction in LD and FBD, and ACOS function in ST ATN instruction in LD and FBD, and ATAN function in ST ADD instruction in LD and FBD, and + in ST. MUL instruction in LD and FBD, and * in ST. SUB instruction in LD and FBD, and - in ST. DIV instruction in LD and FBD, and / in ST. MOD instruction LD and ST XPY instruction in LD and FBD, and ** in ST. MOV instruction in LD, and := in ST. Functionality contained in BSL instruction in LD for shift of 1 Functionality contained in BSR instruction in LD for shift of 1 Functionality contained in BSL instruction in LD for shift of 1 Functionality contained in BSR instruction in LD for shift of 1 BAND instruction in FBD, and "&" operator in ST BOR instruction in FBD BXOR instruction in FBD BNOT instruction in FBD SEL instruction in FBD Functionality contained in ESEL instruction in FBD and ST Functionality contained in ESEL instruction in FBD and ST
C-8
IEC61131-3 Compliance
Table Number:(1) 27 27 28 28 28 28 28 28 29 29 29 29 29 29 32 32 32 32 34 34 35 35 36
Feature Number: 3 4 5 6 7 8 9 10 1 4 5 6 7 9 1 2 3 4 1 2 1 2 1b
Feature Description: High/Low limit LIMIT Multiplexer MUX Comparison greater-than Comparison greater-than or equal Comparison equal Comparison less-than Comparison less-than or equal Comparison not equal String length LEN Middle string MID String concatenation CONCAT String insert INSERT String delete DELETE Find string FIND Input read Input write Output read Output write Bistable set dominant Bistable reset dominant Rising edge detector Falling edge detector Up-counter
Extensions and Implementation Notes: HLL instruction in FBD and ST MUX instruction in FBD GRT instruction in LD and FBD, and > in ST. GRE instruction in LD and FBD, and >= in ST. EQU instruction in LD and FBD, and = in ST. LES instruction in LD and FBD, and < in ST. LEQ instruction in LD and FBD, and <= in ST. NEQ instruction in LD and FBD, and <> in ST. Contained as parameter of STRING data type MID instruction in LD and ST CONCAT instruction in LD and ST INSERT instruction in LD and ST DELETE instruction in LD and ST FIND instruction in LD and ST FBD and ST FBD and ST FBD and ST FBD and ST SETD instruction in FBD and ST RESD instruction in FBD and ST OSR instruction in LD and OSRI instruction in FBD and ST OSF instruction in LD and OSFI instruction in FBD and ST Functionality contained in CTU and RES instructions in LD and in CTUD instruction in FBD and ST Functionality contained in TON instruction in LD and TONR instruction in FBD and ST Functionality contained in TOF instruction in LD and TOFR instruction in FBD and ST Functionality contained in TON instruction in LD and TONR instruction in FBD and ST Functionality contained in TOF instruction in LD and TOFR instruction in FBD and ST
37 37 38 38 40 40 40
2a 3a 2 3 1a 1b 2a
On-delay timer Off-delay timer On-delay timing Off-delay timing SFC Step SFC initial Step SFC Step Textual
IEC61131-3 Compliance
C-9
Table Number:(1) 40
Feature Number: 2b
Extensions and Implementation Notes: Import/export, uses "InitialStep" parameter and step name is specified using the format "Operand := step_name" Step backing tag Step backing tag Import/export with different formatting Transition Backing Tag Transition Backing Tag Transition Backing Tag Transition Backing Tag Action Backing tag Import/export
40 40 41 41 41 41 41 41 42 42 43 43 43 43 44 44 44 44 44 44 45 45 45 45 45 45 45 45 45 45 45 45
3a 4 1 5 7 7a 7b 7d 1 3s 1 2 3 4 1 2 3 5 6 7 1 2 3 4 5 6 7 8 9 10 11 12
SFC Step Flag general form Step elapsed time general form Transition using ST Transition textual form Transition Name Transition Set by LD Transition Set by FBD Transition Set by ST Action Boolean Action textual representation Step Action association Step with Concatenated Actions Textual Step body Action Body Field Action Block Qualifier Action Block Name Action Indicator Tag Action using ST Action using LD Action using FBD Action Qualifier None Action Qualifier N - Non-stored Action Qualifier R - Reset Action Qualifier S - Set / Stored Action Qualifier L - Time Limited Action Qualifier D - Time Delayed Action Qualifier P - Pulse Action Qualifier SD - Stored and Time Delayed Action Qualifier DS - Delayed and Stored Action Qualifier SL - Stored and time limited Action Qualifier P1 - Pulse Rising Edge Action Qualifier P0 - Pulse Falling Edge
Extended this to support DINT, INT, SINT, or REAL in addition to BOOL Supports both embedded ST and JSR to ST routine Using JSR to LD routine Using JSR to FBD Routine Default is N when none is explicitly entered
C-10
IEC61131-3 Compliance
Feature Description: Action Control Action Control SFC Single Sequence SFC Divergence of sequence selection SFC Divergence of sequence selection with execution order. SFC Convergence of sequence selection SFC Simultaneous sequence divergence SFC Simultaneous sequence convergence SFC Sequence Skip SFC Sequence Loop SFC Loop directional arrows SFC Graphical representation SFC Graphical representation SFC Minimal Step Compliance Requirements SFC Minimal Transition Compliance Requirements SFC Minimal Action Compliance Requirements SFC Minimal Action Body Compliance Requirements SFC Minimal Action Qualifier Compliance Requirements SFC Minimal Branch Compliance Requirements SFC Minimal Block Connection Compliance Requirements ST Parenthesization (expression) ST Function Evaluation
Refer to notes on individual tables above. Refer to notes on individual tables above. Refer to notes on individual tables above. Refer to notes on individual tables above. Refer to notes on individual tables above. Refer to notes on individual tables above. Refer to notes on individual tables above.
Using non-formal form of invocation for built in functions. JSR used within ST language to call user developed code.
55 55 55 55 55 55 55 55 55
3 4 5 6 7 8 9 10 11
ST Exponentiation ** ST Negation ST Negation NOT ST Multiply * ST Divide / ST Modulo MOD ST Add + ST Subtract ST Comparison <, >, <=, >=
IEC61131-3 Compliance
C-11
Table Number:(1) 55 55 55 55 55 55 56 56 56 56 56 56 56 56 56 56 57 57 57 57 57 57 57 58 58 58 58 58 59 59 60 60 61 61 61 62
Feature Description: ST Equality = ST Inequality <> ST Boolean AND as & ST Boolean AND ST Boolean XOR ST Boolean OR ST Assignment := ST Function Block invocation ST RETURN ST IF / ELSIF / ELSE/ END_IF ST CASE OF / ELSE / END_CASE ST FOR / END_FOR ST WHILE DO / END_WHILE ST REPEATE / UNTIL / END_REPEAT ST EXIT ST Empty Statement ; Horizontal line Vertical line Horizontal / Vertical connection Line crossings without connection Connection and non-connection corners Blocks with connections Connectors Unconditional jump Jump target Conditional jump Conditional return Unconditional return Left hand power rail Right hand power rail Horizontal link Vertical link Normally open contact --| |-Normally close contact --| / |-Positive transition sensing contact -| P |Coil --( )--
LD editor, FBD editor LD editor, FBD editor LD editor, FBD editor FBD editor LD editor, FBD editor LD editor, FBD editor FBD editor JMP instruction in LD LBL instruction in LD JMP instruction in LD RET instruction in LD RET instruction in LD LD editor LD editor LD editor LD editor XIC instruction in LD XIO instruction in LD ONS instruction in LD OTE instruction in LD
C-12
IEC61131-3 Compliance
Table Number:(1) 62 62 62 62
(1)
Feature Number: 3 4 8 9
Feature Description: Set (latch) coil Reset (unlatch) coil Positive transition sensing coil Negative transition sensing coil
Extensions and Implementation Notes: Functionality contained in OTL instruction in LD Functionality contained in OTU instruction in LD OSR instruction in LD OSF instruction in LD
Table associated with languages other than structured text, sequential function chart, ladder diagram and function block diagram have been skipped.
Glossary
action In a sequential function chart (SFC), an action represents a functional division of a step. Several actions make up a step. Each action performs a specific function, such as controlling a motor, opening a valve, or placing a group of devices in a specific mode.
Step
Do this
Actions
MIX
and do this
Each action includes a qualifer. When a step is active (executing) the qualifier determines when the action starts and stops. See sequential function chart, step, qualifier. alias tag A tag that references another tag. An alias tag can refer to another alias tag or a base tag. An alias tag can also refer to a component of another tag by referencing a member of a structure, an array element, or a bit within a tag or member. See base tag. ASCII A 7-bit code (with an optional parity bit) that is used to represent alphanumerical characters, punctuation marks, and control-code characters. For a list of ASCII codes, see the back cover of this manual.
Glossary
asynchronous Actions that occur independent of each other and lack a regular pattern. In Logix5000 controllers, I/O values update asynchronous to the execution of logic.: Programs within a task access input and output data directly from controller-scoped memory. Logic within any task can modify controller-scoped data. Data and I/O values are asynchronous and can change during the course of a tasks execution. An input value referenced at the beginning of a tasks execution can be different when referenced later. ATTENTION Take care to ensure that data memory contains the appropriate values throughout a tasks execution. You can duplicate or buffer data at the beginning of the scan to provide reference values for your logic.
Glossary
array An array lets you group data (of the same data type) under a common name. An array is similar to a file. A subscript (s) identifies each individual element within the array. A subscript starts at 0 and extends to the number of elements minus 1 (zero based).
To expand an array and display its elements, click the + sign.
To collapse an array and hide its elements, click the sign. elements of timer_presets
This array contains six elements of the DINT data type. six DINTs
42367
An array tag occupies a contiguous block of memory in the controller, each element in sequence. You can use array and sequencer instructions to manipulate or index through the elements of an array An array can have as many as three dimensions. This gives you the flexibility to identify an element using one, two, or three subscripts (coordinates).
Glossary
In an array with two or three dimensions, the right-most dimension increments first in memory.
This array contains a two-dimensional grid of elements, six elements by six elements.
42367
When the right-most dimension starts over, the dimension to the left increments by one.
The right-most dimension increments to its maximum value then starts over.
Glossary
The total number of elements in an array is the product of each dimensions size, as depicted in the following examples:
This array: one dimension Stores data like: For example: Tag name: one_d_array Type DINT[7] Dimension 0 7 Dimension 1 -Dimension 2 --
total number of elements = 7 valid subscript range DINT[x] where x=06 two dimension Tag name: two_d_array Type DINT[4,5] Dimension 0 4 Dimension 1 5 Dimension 2 --
total number of elements = 4 5 = 20 valid subscript range DINT[x,y] where x=03; y=04 three dimension Tag name: three_d_array Type Dimension 0 Dimension 1 3 Dimension 2 4
DINT[2,3,4] 2
total number of elements = 2 3 4 = 24 valid subscript range DINT[x,y,z] where x=01; y=02, z=03
You can modify array dimensions when programming offline without loss of tag data. You cannot modify array dimensions when programming online. application The combination of routines, programs, tasks, and I/O configuration used to define the operation of a single controller. See project.
base tag A tag that actually defines the memory where a data element is stored. See alias tag.
Glossary
bidirectional connection A connection in which data flows in both directions: from the originator to the receiver and from the receiver to the originator. See connection, unidirectional connection. binary Integer values displayed and entered in base 2 (each digit represents a single bit). Prefixed with 2#. Padded out to the length of the boolean or integer (1, 8, 16, or 32 bits). When displayed, every group of four digits is separated by an underscore for legibility. See decimal, hexadecimal, octal. bit Binary digit. The smallest unit of memory. Represented by the digits 0 (cleared) and 1 (set). BOOL An data type that stores the state of a single bit, where: 0 equals off 1 equals on BOOL expression In structured text, an expression that produces either the BOOL value of 1 (true) or 0 (false). A bool expression uses bool tags, relational operators, and logical operators to compare values or check if conditions are true or false. For example, tag1>65. A simple bool expression can be a single BOOL tag. Typically, you use bool expressions to condition the execution of other logic.
Glossary
branch There is no limit to the number of parallel branch levels that you can enter. The following figure shows a parallel branch with five levels. The main rung is the first branch level, followed by four additional branches.
output instruction
input instruction
You can nest branches to as many as 6 levels. The following figure shows a nested branch. The bottom output instruction is on a nested branch that is three levels deep.
input instruction output instruction
Glossary
cache Depending on how you configure a MSG instruction, it may use a connection to send or receive data.
This type of message: CIP data table read or write PLC2, PLC3, PLC5, or SLC (all types) CIP CIP with Source ID DH+ CIP generic block-transfer read or write
(1)
You can connect CIP generic messages. But for most applications we recommend you leave CIP generic messages unconnected.
If a MSG instruction uses a connection, you have the option to leave the connection open (cache) or close the connection when the message is done transmitting.
If you: Cache the connection Then: The connection stays open after the MSG instruction is done. This optimizes execution time. Opening a connection each time the message executes increases execution time. The connection closes after the MSG instruction is done. This frees up that connection for other uses.
The controller has the following limits on the number of connections that you can cache:
If you have this software and firmware revision: 11.x or earlier 12.x or later Then you can cache: block transfer messages for up to 16 connections other types of messages for up to 16 connections up to 32 connections
Glossary
If several messages go to the same device, the messages may be able to share a connection.
If the MSG instructions are to: different devices same device enabled at the same time NOT enabled at the same time And they are: Then: Each MSG instruction uses 1 connection. Each MSG instruction uses 1 connection. The MSG instructions share the connection. (I.e., Together they count as 1 connection.)
EXAMPLE
Share a Connection If the controller alternates between sending a block-transfer read message and a block-transfer write message to the same module, then together both messages count as 1 connection. Caching both messages counts as 1 on the cache list.
See connection, uncached connection. change of state (COS) Any change in the status of a point or group of points on an I/O module. CIP See Control and Information Protocol. communication format Defines how an I/O module communicates with the controller. Choosing a communication format defines: what configuration tabs are available through the programming software the tag structure and configuration method compatible module An electronic keying protection mode that requires that the vendor, catalog number, and major revision attributes of the physical module and the module configured in the software match in order to establish a connection to the module. See disable keying, exact match.
Glossary
10
connection A communication link between two devices, such as between a controller and an I/O module, PanelView terminal, or another controller. Connections are allocations of resources that provide more reliable communications between devices than unconnected messages. The number of connections that a single controller can have is limited. You indirectly determine the number of connections the controller uses by configuring the controller to communicate with other devices in the system. consumed tag A tag that receives the data that is broadcast by a produced tag over a ControlNet network or ControlLogix backplane. A consumed tag must be: controller scope same data type (including any array dimensions) as the remote tag (produced tag) See produced tag. continuous task The task that runs continuously. The continuous task runs in the background. Any CPU time not allocated to other operations (such as motion, communications, and periodic tasks) is used to execute the programs within the continuous task. The continuous task restarts itself after the last of its programs finishes. A project does not require a continuous task. If used, there can be only one continuous task. All periodic tasks interrupt the continuous task. When you create a project, the default MainTask is the continuous task. You can leave this task as it is, or you can change its properties (name, type, etc.). See periodic task.
Glossary
11
Control and Information Protocol Messaging protocol used by Allen-Bradleys Logix5000 line of control equipment. Native communications protocol used on the ControlNet network. controller fault handler The controller fault handler is an optional task that executes when the: major fault is not an instruction-execution fault program fault routine: could not clear the major fault faulted does not exist You can create only one program for the controller fault handler. After you create that program, you must configure one routine as the main routine. The controller fault program does not execute a fault routine. If you specify a fault routine for the controller fault program, the controller never executes that routine. You can create additional routines and call them from the main routine. controller scope Data accessible anywhere in the controller. The controller contains a collection of tags that can be referenced by the routines and alias tags in any program, as well as other aliases in the controller scope. See program scope. Coordinated System Time (CST) A 64-bit value that represents the number of microseconds since the CST master controller started counting. The CST value is stored as a DINT[2] array, where: first element stores the lower 32 bits second element stores the upper 32 bits You can use the CST timestamp to compare the relative time between data samples.
Glossary
12
COUNTER Structure data type that contains status and control information for counter instructions
data type A definition of the memory size and layout that will be allocated when you create a tag of that data type. decimal Integer values displayed and entered in base 10. No prefix. Not padded to the length of the integer. See binary, hexadecimal, octal. description Optional text that you can use to further document your application. You can use any printable character, including carriage return, tab, and space. Descriptions do not download to the controller. They remain in the offline project file. Descriptions have these length limitations: For tags, you can use up to 120 characters. For other objects (tasks, programs, modules, etc.), you can use up to 128 characters. dimension Specification of the size of an array. Arrays can have as many as three dimensions. See array. DINT A data type that stores a 32-bit (4-byte) signed integer value (-2,147,483,648 to +2,147,483,647). In Logix5000 controllers, use DINTs for integers: Logix5000 controllers execute more efficiently and use less memory when working with 32-bit integers (DINTs) instead of 16-bit integers (INTs) or 8-bit integers (SINTs). Typically, instructions convert SINT or INT values to an optimal data type (usually a DINT or REAL value) during execution. Because this requires additional time and memory, minimize the use of the SINT and INT data types.
Glossary
13
direct connection A direct connection is a real-time, data transfer link between the controller and an I/O module. The controller maintains and monitors the connection with the I/O module. Any break in the connection, such as a module fault or the removal of a module while under power, sets fault bits in the data area associated with the module.
A direct connection is any connection that does not use the Rack Optimization Comm Format.
See rack-optimized connection. disable keying An electronic keying protection mode that requires no attributes of the physical module and the module configured in the software to match and still establishes a connection to the module. See compatible module, exact match. download The process of transferring the contents of a project on the workstation into the controller. See upload.
elapsed time The total time required for the execution of all operations configured within a single task. If the controller is configured to run multiple tasks, elapsed time includes any time used/shared by other tasks performing other operations. While online, you can use the Task Properties dialog box to view the maximum scan time and the last scan time in ms for the current task. These values are elapsed time, which includes any time spent waiting for higher-priority tasks.
Glossary
14
See execution time. electronic keying A feature of the 1756 I/O line where modules can be requested to perform an electronic check to insure that the physical module is consistent with what was configured by the software. Enables the user via the software to prevent incorrect modules or incorrect revisions of modules from being inadvertently used. See compatible module, disable keying, exact match. element An addressable unit of data that is a sub-unit of a larger unit of data. A single unit of an array. You specify an element in an array by its subscript(s):
For this array: one dimension two dimension three dimension Specify: array_name[subscript_0] array_name[subscript_0, subscript_1] array_name[subscript_0, subscript_1, subscript_2]
See array. exact match An electronic keying protection mode that requires that all attributes (vendor, catalog number, major revision, and minor revision) of the physical module and the module configured in the software match in order to establish a connection to the module. execution time The total time required for the execution of a single program. Execution time includes only the time used by that single program, and excludes any time shared/used by programs in other tasks performing other operations. When online, use the Program Properties dialog box to view the maximum scan time and the last scan time (in s) for the current program. These values are execution times for the program and do not include any time spent waiting for other programs or higher-priority tasks. See elapsed time.
Publication 1756-PM001G-EN-P - March 2004
Glossary
15
exponential Real values displayed and entered in scientific or exponential format. The number is always displayed with one digit to the left of the decimal point, followed by the decimal portion, and then by an exponent. See style.
faulted mode The controller generated a major fault, could not clear the fault, and has shut down. See major fault. float Real values displayed and entered in floating point format. The number of digits to the left of the decimal point varies according to the magnitude of the number. See style.
hexadecimal Integer values displayed and entered in base 16 (each digit represents four bits). Prefixed with 16#. Padded out to length of the boolean or integer (1, 8, 16, or 32 bits). When displayed, every group of four digits is separated by an underscore for legibility. See binary, decimal, octal.
immediate value An actual 32-bit signed real or integer value. Not a tag that stores a value. index A reference used to specify an element within an array.
Glossary
16
instruction The controller evaluates ladder instructions based on the rung condition preceding the instruction (rung-condition-in).
input instruction
output instruction
rung-condition-in
rung-condition-out
Only input instructions affect the rung-condition-in of subsequent instructions on the rung: If the rung-condition-in to an input instruction is true, the controller evaluates the instruction and sets the rung-condition-out to match the results of the evaluation. If the instruction evaluates to true, the rung-condition-out is true. If the instruction evaluates to false, the rung-condition-out is false. An output instruction does not change the rung-condition-out. If the rung-condition-in to an output instruction is true, the rung-condition-out is set to true. If the rung-condition-in to an output instruction is false, the rung-condition-out is set to false. In Logix5000 controllers, you can enter multiple output instructions per rung of logic. You can enter the output instructions: in sequence on the rung (serial) between input instructions, as long as the last instruction on the rung is an output instruction
Glossary
17
The following example uses more than one output on a rung. Place multiple outputs on a rung
EXAMPLE
When running_seconds.DN turns on, running_hours counts up by one and running_seconds resets.
running_seconds.DN Count Up Counter Preset Accum CTU running_hours 500 0 CU DN running_seconds RES
When machine_on turns on, turns on drill_1_on. When both machine_on and drill[1].part_advance are on, turns on conveyor_on.
machine_on drill_1_on drill[1].part_advance conveyor_on
42362
INT A data type that stores a 16-bit (2-byte) integer value (-32,768 to +32,767). Minimize your use of this data type: Typically, instructions convert SINT or INT values to an optimal data type (usually a DINT or REAL value) during execution. Because this requires additional time and memory, minimize the use of the SINT and INT data types. interface module (IFM) A pre-wired I/O field wiring arm.
listen-only connection An I/O connection where another controller owns/provides the configuration data for the I/O module. A controller using a listen-only connection does not write configuration data and can only maintain a connection to the I/O module when the owner controller is actively controlling the I/O module. See owner controller.
Glossary
18
load To copy a project from nonvolatile memory to the user memory (RAM) of the controller. This overwrites any project that is currently in the controller. See nonvolatile memory, store.
main routine The first routine to execute when a program executes. Use the main routine to call (execute) other routines (subroutines).
Glossary
19
major fault A fault condition that is severe enough for the controller to shut down, unless the condition is cleared. When a major fault occurs, the controller: 1. Sets a major fault bit 2. Runs user-supplied fault logic, if it exists 3. If the user-supplied fault logic cannot clear the fault, the controller goes to faulted mode 4. Sets outputs according to their output state during program mode 5. OK LED flashes red The controller supports two levels for handling major faults: program fault routine: Each program can have its own fault routine. The controller executes the programs fault routine when an instruction fault occurs. If the programs fault routine does not clear the fault or a program fault routine does not exist, the controller proceeds to execute the controller fault handler (if defined). controller fault handler: If the controller fault handler does not exist or cannot clear the major fault, the controller enters faulted mode and shuts down. At this point, the FAULTLOG is updated. (See the next page.) All non-instruction faults (I/O, task watchdog, etc.) execute the controller fault handler directly. (No program fault routine is called.) The fault that was not cleared, and up to two additional faults that have not been cleared, are logged in the controller fault log.
Glossary
20
yes
no
no continue logic execution controller logs major fault to controller fault handler PROGRAM MajorFaultRecord
no
execute controller
no continue logic execution enter faulted mode record FAULTLOG shut down
Glossary
21
See faulted state, minor fault. major revision The 1756 line of modules have major and minor revision indicators. The major revision is updated any time there is a functional change to the module. See electronic keying, minor revision. master (CST) Within a single chassis, one and only one, controller must be designated as the Coordinated System Time (CST) master. All other modules in the chassis synchronize their CST values to the CST master. member An element of a structure that has its own data type and name. Members can be structures as well, creating nested structure data types. Each member within a structure can be a different data type. To reference a member in a structure, use this format: tag_name.member_name For example:
This address: timer_1.pre input_load as data type load_info input_load.height References the: PRE value of the timer_1 structure. height member of the user-defined input_load structure
If the structure is embedded in another structure, use the tag name of the structure at the highest level followed by a substructure tag name and member name: tag_name.substructure_name.member_name For example:
This address: input_location as data type location input_location.load_info.height References the: height member of the load_info structure in the input_location structure.
Glossary
22
If the structure defines an array, use the array tag, followed by the position in the array and any substructure and member names. array_tag[position].member or array_tag[position].substructure_name.member _name For example:
This address: conveyor[10].source conveyor[10].info.height References the: source member of the 11th element in the conveyor array (array elements are zero based). height member of the info structure in the 11th element of the conveyor array (array elements are zero based).
See structure. memory Electronic storage media built into a controller, used to hold programs and data. minor fault A fault condition that is not severe enough for the controller to shut down:
If this occurs: problem with an instruction The controller: 1. sets S:MINOR 2. logs information about the fault to the PROGRAM object, MinorFaultRecord attribute 3. sets bit 4 of the FAULTLOG object, MinorFaultBits attribute sets bit 6 of the FAULTLOG object, MinorFaultBits attribute sets bit 9 of the FAULTLOG object, MinorFaultBits attribute sets bit 10 of the FAULTLOG object, MinorFaultBits attribute
periodic task overlap problem with the serial port low battery
Glossary
23
To clear minor faults: 1. In the controller organizer, right-click the Controller name_of_controller folder and select Properties. 2. Click the Minor Faults tab. 3. Use the information in the Recent Faults list to correct the cause of the fault. Refer to "Minor Fault Codes" on page 16-4. 4. Click the Clear Minors button. See major fault. minor revision The 1756 line of modules have major and minor revision indicators. The minor revision is updated any time there is a change to a module that does not affect its function or interface. See electronic keying, major revision. multicast A mechanism where a module can send data on a network that is simultaneously received by more that one listener. Describes the feature of the ControlLogix I/O line which supports multiple controllers receiving input data from the same I/O module at the same time. multiple owners A configuration setup where more than one controller has exactly the same configuration information to simultaneously own the same input module.
Glossary
24
name Names identify controllers, tasks, programs, tags, modules, etc. Names follow IEC-1131-3 identifier rules and: must begin with an alphabetic character (A-Z or a-z) or an underscore (_) can contain only alphabetic characters, numeric characters, and underscores can have as many as 40 characters must not have consecutive or trailing underscore characters (_) are not case sensitive download to the controller network update time (NUT) The repetitive time interval in which data can be sent on a ControlNet network. The network update time ranges from 2ms-100ms. nonvolatile memory Memory of the controller that retains its contents while the controller is without power or a battery. See load, store. numeric expression In structured text, an expression that calculates an integer or floating-point value. A numeric expression uses arithmetic operators, arithmetic functions, and bitwise operators. For example, tag1+5. Often, you nest a numeric expression within a bool expression. For example, (tag1+5)>65.
object A structure of data that stores status information. When you enter a GSV/SSV instruction, you specify the object and its attribute that you want to access. In some cases, there are more than one instance of the same type of object, so you might also have to specify the object name. For example, there can be several tasks in your application. Each task has its own TASK object that you access by the task name.
Glossary
25
octal Integer values displayed and entered in base 8 (each digit represents three bits). Prefixed with 8#. Padded out to the length of the boolean or integer (1, 8, 16, or 32 bits). When displayed, every group of three digits is separated by an underscore for legibility. See binary, decimal, hexadecimal. offline Viewing and editing a project that is on the hard disk of a workstation. See online. online Viewing and editing the project in a controller. See offline. optimal data type A data type that a Logix5000 instruction actually uses (typically the DINT and REAL data types). In the instruction set reference manuals, a bold data type indicates an optimal data type. Instructions execute faster and require less memory if all the operands of the instruction use: the same data type an optimal data type If you mix data types and use tags that are not the optimal data type, the controller converts the data according to these rules Are any of the operands a REAL value?
If: Yes No Then input operands (e.g., source, tag in an expression, limit) convert to: REALs DINTs
After instruction execution, the result (a DINT or REAL value) converts to the destination data type, if necessary.
Glossary
26
Because the conversion of data takes additional time and memory, you can increase the efficiency of your programs by: using the same data type throughout the instruction minimizing the use of the SINT or INT data types In other words, use all DINT tags or all REAL tags, along with immediate values, in your instructions. The following table summarizes how the controller converts data between data types:
Conversion: larger integer to smaller integer Result: The controller truncates the upper portion of the larger integer and generates an overflow. For example: Decimal DINT INT SINT SINT or INT to REAL DINT to REAL 65,665 129 -127 Binary 0000_0000_0000_0001_0000_0000_1000_0001 0000_0000_1000_0001 1000_0001
No data precision is lost Data precision could be lost. Both data types store data in 32 bits, but the REAL type uses some of its 32 bits to store the exponent value. If precision is lost, the controller takes it from the least-significant portion of the DINT. The controller rounds the fractional part and truncates the upper portion of the non-fractional part. If data is lost, the controller sets the overflow status flag. Numbers round as follows: Numbers other than x.5 round to the nearest number. X.5 rounds to the nearest even number. For example: REAL (source) -2.5 -1.6 -1.5 -1.4 1.4 1.5 1.6 2.5 DINT (result) -2 -2 -2 -1 1 2 2 2
REAL to integer
Glossary
27
overlap A condition where a task (perioidic or event) is triggered while the task is still executing from the preivious trigger. owner controller The controller that creates the primary configuration and communication connection to a module. The owner controller writes configuration data and can establish a connection to the module. See listen-only connection.
path The path describes the route that a message takes to get to the destination. If the I/O configuration of the controller contains the destination device, use the Browse button to select the device. This automatically defines the path.
peer_controller
I/O Configuration
peer_controller
Glossary
28
If the I/O configuration does not contain the destination device, then type the path to the destination using the following format: port,address,port,address
Where: port For this: backplane from any 1756 controller or module DF1 port from a Logix5000 controller ControlNet port from a 1756-CNB module Ethernet port from a 1756-ENBx or -ENET module DH+ port over channel A from a 1756-DHRIO module DH+ port over channel B from a 1756-DHRIO module address ControlLogix backplane DF1 network ControlNet network DH+ network 3 slot number station address (0-254) node number (1-99 decimal) 8# followed by the node number (1-77 octal) For example, to specify the octal node address of 37, type 8#37. You can specify a module on an EtherNet/IP network using any of these formats: IP address IP address:Port DNS name DNS name:Port (e.g., 130.130.130.5) (e.g., 130.130.130.5:24) (e.g., tanks) (e.g., tanks:24) Is: 1 2
EtherNet/IP network
See connection.
Glossary
29
periodic task A task that is triggered by the operating system at a repetitive period of time. Use a periodic task for functions that require accurate or deterministic execution. Whenever the time expires, the task is triggered and its programs are executed. Data and outputs established by the programs in the task retain their values until the next execution of the task or they are manipulated by another task. You can configure the time period from 1 ms to 2000 s. The default is 10 ms. ATTENTION Ensure that the time period is longer than the sum of the execution times of all the programs assigned to the task. If the controller detects that a periodic task trigger occurs for a task that is already operating, a minor fault occurs.
Periodic tasks always interrupt the continuous task. Depending on the priority level, a periodic task may interrupt other periodic tasks in the controller. See continuous task. periodic task overlap A condition that occurs when a task is executing and the same task is triggered again. The execution time of the task is greater than the periodic rate configured for the task. See periodic task. predefined structure A structure data type that stores related information for a specific instruction, such as the TIMER structure for timer instructions. Predefined structures are always available, regardless of the system hardware configuration. See product defined structure.
Glossary
30
prescan Prescan is an intermediate scan during the transition to Run mode. The controller performs prescan when you change from Program mode to Run mode. The prescan examines all programs and instructions and initializes data based on the results. Some instructions execute differently during prescan than they do during the normal scan. priority Specifies which task to execute first if two tasks are triggered at the same time. The task with the higher priority executes first. Priorities range from 1-15, with 1 being the highest priority. A higher priority task will interrupt any lower priority task. If two tasks with the same priority are triggered at the same time, the controller switches between the tasks every millisecond.
postscan A function of the controller where the logic within a program is examined before disabling the program in order to reset instructions and data. power-up handler An optional task that executes when the controller powers up in the Run mode. To use the Power-Up Handler, you must create a power-up program and associated main routine.
42195
Glossary
31
Did the controller power up in Run mode? Yes Does the Power-Up Handler contain a program? Yes Major fault, type 1, code 1, occurs.
No
No
Yes
produced tag A tag that a controller is making available for use by other controllers. Produced tags are always at controller scope. See consumed tag. product defined structure A structure data type that is automatically defined by the software and controller. By configuring an I/O module you add the product defined structure for that module.
Glossary
32
program A set of related routines and tags. Each program contains program tags, a main executable routine, other routines, and an optional fault routine. To execute the routines in a program, you assign (schedule) the program to a task: When a task is triggered, the scheduled programs within the task execute to completion from first to last. When a task executes a program, the main routine of the program executes first. The main routine can, in turn, execute subroutines using the JSR instruction. The Unscheduled Programs folder contains programs that arent assigned to a task. If the logic in the program produces a major fault, execution jumps to a configured fault routine for the program. The routines within a program can access the following tags: program tags of the program controller tags Routines cannot access the program tags of other programs. See routine, task. program scope Data accessible only within the current program. Each program contains a collection of tags that can only be referenced by the routines and alias tags in that program. See controller scope. project The file on your workstation (or server) that stores the logic, configuration, data, and documentation for a controller. The project file has an .ACD extension. When you create a project file, the file name is the name of the controller. The controller name is independent of the project file name. If you save a current project file as another name, the controller name is unchanged. If the name of the controller is different than the name of the project file, the title bar of the RSLogix 5000 software displays both names. See application.
Publication 1756-PM001G-EN-P - March 2004
Glossary
33
qualifier In the action of a sequential function chart (SFC), a qualifier defines when an action starts and stops. See action, sequential function chart, step.
rack-optimized connection For digital I/O modules, you can select rack-optimized communication. A rack-optimized connection consolidates connection usage between the controller and all the digital I/O modules in the chassis (or DIN rail). Rather than having individual, direct connections for each I/O module, there is one connection for the entire chassis (or DIN rail). See direct connection. rate For a periodic task, the rate at which the controller executes the task, from 1 ms to 2,000,000 ms (2000 seconds). The default is 10 ms. REAL A data type that stores a 32-bit (4-byte) IEEE floating-point value, with the following range: -3.40282347E38 to -1.17549435E-38 (negative values) 0 1.17549435E-38 to 3.40282347E38 (positive values) The REAL data type also stores infinity, NAN, and -IND, but the software display differs based on the display format.
Display Format: Real Equivalent: +infinite - infinite +NAN -NAN -indefinite +infinite - infinite +NAN -NAN -indefinite 1.$ -1.$ 1.#QNAN -1.#QNAN -1.#IND 1.#INF000e+000 -1.#INF000e+000 1.#QNAN00e+000 -1.#QNAN00e+000 -1.#IND0000e+000
Exponential
The software also stores and displays the IEEE subnormal range:
Glossary
34
-1.17549421E-38 to -1.40129846E-45 (negative values) 1.40129846E-45 to 1.17549421E-38 (positive values) removal and insertion under power (RIUP) A ControlLogix feature that allows a user to install or remove a module while chassis power is applied. requested packet interval (RPI) When communicating over a the network, this is the maximum amount of time between subsequent production of input data. Typically, this interval is configured in microseconds. The actual production of data is constrained to the largest multiple of the network update time that is smaller than the selected RPI. Use a power of two times the ControlNet network update time (NUT). For example, if the NUT is 5 ms, type a rate of 5, 10, 20, 40 ms, etc. See network update time (NUT). routine A set of logic instructions in a single programming language, such as a ladder diagram. Routines provide the executable code for the project in a controller (similar to a program file in a PLC or SLC controller). Each program has a main routine: When the controller triggers the associated task and executes the associated program, the main routine is the first routine to execute. To call another routine within the program, enter a JSR instruction in the main routine. You can also specify an optional program fault routine. If any of the routines in the associated program produce a major fault, the controller executes program fault routine See program, task.
Glossary
35
scan time See elapsed time, execution time. scope Defines where you can access a particular set of tags. When you create a tag, you assign (scope) it as either a controller tag or a program tag for a specific program, as depicted below.
tags that all routines and external devices (e.g., other controllers) can access
42195
You can have multiple tags with the same name: Each tag must have a different scope. For example, one of the tags can be a controller tag and the other tags can be program tags for different programs. Or, each tag can be a program tag for a different program. Within a program, you cannot reference a controller tag if a tag of the same name exists as a program tag for that program. See controller scope, program scope. sequential function chart A sequential function chart (SFC) is similar to a flowchart. It uses steps and transitions to control a machine or process. See action, step, transition.
Glossary
36
SINT A data type that stores an 8-bit (1-byte) signed integer value (-128 to +127). Minimize your use of this data type: Typically, instructions convert SINT or INT values to an optimal data type (usually a DINT or REAL value) during execution. Because this requires additional time and memory, minimize the use of the SINT and INT data types. source key A mechanism that limits who can view a routine. You assign a source key to one or more routines. Source keys follow the same rules for names as other RSLogix 5000 components, such as routines, tags, and modules. To assign a source key to a routine (protect the routine), use RSLogix 5000 software. (You have to first activate the tool.). A source key file (sk.dat) stores the source keys. The source key file is separate from the RSLogix 5000 project files (.acd). To view a routine that is protected by a source key, you must have the source key. Without the source key, you cannot open a routine. RSLogix 5000 software displays Source Not Available. Regardless of whether or not the source key is available, you can always download the project and execute all the routines. See name. step In a sequential function chart (SFC), a step represents a major function of a process. It contains the events that occur at a particular time, phase, or station.
Step
A step executes continuously until a logic condition tells the controller to go to the next step. Do this
Actions
MIX
and do this
A step is organized into one or more actions. Each action performs a specific function, such as controlling a motor, opening a valve, or placing a group of devices in a specific mode.
Glossary
37
See action, sequential function chart, transition. store To copy a project to the nonvolatile memory of the controller. This overwrites any project that is currently in the nonvolatile memory. See load, nonvolatile memory.
Glossary
38
42811
42812
You can use the default STRING data type. It stores up to 82 characters.
or
You can create a new string data type to store the number of characters that you define.
New string data types are useful in the following situations: If you have a large number of strings with a fixed size that is less than 82 characters, you can conserve memory by creating a new string data type. If you must handle strings that have more than 82 characters, you can create a new string data type to fit the required number of characters.
Glossary
39
IMPORTANT
Use caution when you create a new string data type. If you later decide to change the size of the string data type, you may lose data in any tags that currently use that data type.
If you: make a string data type smaller make a string data type larger Then: The data is truncated. The LEN is unchanged. The data and LEN is reset to zero.
The following example shows the STRING data type and a new string data type.
The user named the string data type STRING_24. The new string data type stores
Glossary
40
structure Some data types are a structure. A structure stores a group of data, each of which can be a different data type. Within a structure, each individual data type is called a member. Like tags, members have a name and data type. You create your own structures, called a user-defined data type, using any combination of individual tags and most other structures. To copy data to a structure, use the COP instruction. See the Logix5000 Controllers General Instruction Set Reference Manual, publication 1756-RM003. The COUNTER and TIMER data types are examples of commonly used structures.
COUNTER structure To collapse a structure and hide its members, click the sign. TIMER structure
members of running_seconds
42365
See member, user-defined data type. style The format that numeric values are displayed in. See ASCII, binary, decimal, exponential, float, hexadecimal, octal.
Glossary
41
system overhead time slice Specifies the percentage of controller time (excluding the time for periodic tasks) that is devoted to communication and background functions (system overhead): The controller performs system overhead functions for up to 1 ms at a time. If the controller completes the overhead functions in less than 1 ms, it resumes the continuous task. Communication and background functions include the following: communicate with programming and HMI devices (such as RSLogix 5000 software) respond to messages send messages, including block-transfers re-establish and monitor I/O connections (such as RIUP conditions); this does not include normal I/O communications that occur during program execution bridge communications from the serial port of the controller to other ControlLogix devices via the ControlLogix backplane If communications are not completing fast enough, increase the system overhead timeslice. The following table shows the ratio between the continuos task and the system overhead functions:
At this time slice: 10% 20% 33% 50% The continuous tasks runs for: 9 ms 4 ms 2 ms 1 ms And then overhead occurs for up to: 1 ms 1 ms 1 ms 1 ms
Glossary
42
At the default time slice of 10 %, system overhead interrupts the continuous task every 9 ms (of continuous task time).
Legend: Task executes. Task is interrupted (suspended).
1 ms
20
25
The interruption of a periodic task increases the elapsed time (clock time) between the execution of system overhead.
1 ms periodic task 1 ms system overhead 9 ms of continuous task time continuous task 5 elapsed time (ms) 10 15 20 25 9 ms of continuous task time 1 ms 1 ms 1 ms 1 ms
If you increase the time slice to 20 %, the system overhead interrupts the continuous task every 4 ms (of continuous task time).
1 ms system overhead 4 ms continuous task 5 elapsed time (ms) 10 15 20 25 4 ms 4 ms 4 ms 4 ms 1 ms 1 ms 1 ms 1 ms
Glossary
43
If you increase the time slice to 50 %, the system overhead interrupts the continuous task every 1 ms (of continuous task time).
1 ms system overhead 1 ms continuous task 5 elapsed time (ms) 10 15 20 25
If the controller only contains a periodic task (s), the system overhead timeslice value has no effect. System overhead runs whenever a periodic task is not running.
periodic task
To change the system overhead time slice: 1. Open the RSLogix 5000 project. 2. In the controller organizer, right-click the Controller name_of_controller folder and select Properties. 3. Click the Advanced tab. 4. In the System Overhead Time Slice text box, type or select the percentage of overhead time (10 -90%). 5. Click OK.
Glossary
44
tag A named area of the controllers memory where data is stored. Tags are the basic mechanism for allocating memory, referencing data from logic, and monitoring data. The minimum memory allocation for a tag is four bytes. When you create a tag that stores a BOOL, SINT, or INT (which are smaller than four bytes), the controller allocates four bytes, but the data only fills the part it needs. User-defined data types and arrays store data in contiguous memory and pack smaller data types into 32-bit words. The following examples show memory allocation for various tags: start, which uses the BOOL data type:
Memory allocation allocation Bits 31 not used 1 start 0
Glossary
45
temp_buffer[1] temp_buffer[3]
temp_buffer[0] temp_buffer[2]
See alias tag, base tag, consumed tag. task A scheduling mechanism for executing a program. By default, each new project file contains a pre-configured continuous task. You configure additional, periodic tasks, as needed. A task provides scheduling and priority information for a set of one or more programs that execute based on specific criteria. Once a task is triggered (activated), all the programs assigned (scheduled) to the task execute in the order in which they are displayed in the controller organizer. You can only assign a program to one task at a time. See continuous task, periodic task. timestamp A ControlLogix process that records a change in input data with a relative time reference of when that change occurred. transition In a sequential function chart (SFC), a transition is the true or false condition or conditions that determine when to go to the next step.
uncached connection With the MSG instruction, an uncached connection instructs the controller to close the connection upon completion of the mSG instruction. Clearing the connection leaves it available for other controller uses. See connection, cached connection.
Glossary
46
unidirectional connection A connection in which data flows in only one direction: from the originator to the receiver. See connection, bidirectional connection. upload The process of transferring the contents of the controller into a project file on the workstation. If you do not have the project file for a controller, you can upload from the controller and create a project file. However, not everything that is stored in a project file is available from the controller. If you upload from a controller, the new project file will not contain: rung comments descriptions for tags, tasks, programs, routines, modules, or user-defined structures chains of aliases (aliases pointing to other aliases) Alias chains are not completely reconstructed from the controller. If there are several possible names for a data item, the firmware and software choose a best-fit alias that may not reflect how the alias was specified in the original project. See download. user-defined data type You can also create your own structures, called a user-defined data type (also commonly referred to as a user-defined structure). A user-defined data type groups different types of data into a single named entity. Within a user-defined data type, you define the members. Like tags, members have a name and data type. You can include arrays and structures. Once you create a user-defined data type, you can create one or more tags using that data type. Minimize your use of the following data type because they typically increase the memory requirements and execution time of your logic: INT SINT
Glossary
47
For example, some system values use the SINT or INT data type. If you create a user-defined data type to store those values, then use the corresponding SINT or INT data type. If you include members that represent I/O devices, you must use ladder logic to copy the data between the members in the structure and the corresponding I/O tags. See "Buffer I/O" on page 2-8. When you use the BOOL, SINT, or INT data types, place members that use the same data type in sequence:
more efficient BOOL BOOL BOOL DINT DINT less efficient BOOL DINT BOOL DINT BOOL
You can use single dimension arrays. You can create, edit, and delete user-defined data types only when programming offline. If you modify a user-defined data type and change its size, the existing values of any tags that use the data type are set to zero (0). To copy data to a structure, use the COP instruction. See the Logix5000 Controllers General Instruction Set Reference Manual, publication 1756-RM003. See structure.
Glossary
48
watchdog Specifies how long a task can run before triggering a major fault. Each task has a watchdog timer that monitors the execution of the task. A watchdog time can range from 1 ms to 2,000,000 ms (2000 seconds). The default is 500 ms. The watchdog timer begins to time when the task is initiated and stops when all the programs within the task have executed. If the task takes longer than the watchdog time, a major fault occurs: (The time includes interruptions by other tasks.) A watchdog time-out fault (major fault) also occurs if a task triggered again while it is executing (periodic task overlap). This can happen if a lower-priority task is interrupted by a higher-priority task, delaying completion of the lower-priority task. You can use the controller fault handler to clear a watchdog fault. If the same watchdog fault occurs a second time during the same logic scan, the controller enters faulted mode, regardless of whether the controller fault handler clears the watchdog fault.
ATTENTION
If the watchdog timer reaches a configurable preset, a major fault occurs. Depending on the controller fault handler, the controller might shut down.
To change the watchdog time of a task: 1. Open the RSLogix 5000 project. 2. In the controller organizer, right-click name_of_task and select Properties. 3. Click the Configuration tab. 4. In the Watchdog text box, type a watchdog time. 5. Click OK.
Index
Numerics
1784-CF64 Industrial CompactFlash card format 17-4 stroage of firmware 17-6 use of CompactFlash reader 17-18 decode message 13-14 enter characters 12-21 extract characters 13-2 look up characters 13-4 manipulate characters 13-1 organize data 12-8 read characters 12-9 structured text assignment 7-4 write characters 12-14 assignment ASCII character 7-4 non-retentive 7-3 retentive 7-2 assume data available 9-8, 9-11, 9-12,
A
action 6-19 add 6-16 assign order 6-22 assign qualifier 6-17 boolean 5-20 choose between boolean and non-boolean 5-18 configure 6-17 data type 5-20 non-boolean 5-18 program 5-18, 6-19 qualifier 5-23 rename 6-16 reset 5-42 store 5-42 use expression 6-18 use of structured text 6-19 address assign indirect 3-27 tag 3-23 function block diagram 9-4 I/O module 2-7 ladder logic 8-8, 8-11 alarm sequential function chart 5-28, 6-12 alias create 3-26 show/hide 3-25 use of 3-24 arithmetic operators structured text 7-6 array calculate subscript 3-29 create 3-16 index through 3-27 organize 3-7 overview 3-13 produce large array 11-1 ASCII build string 13-18 compare characters 13-4, 13-10 configure serial port 12-3 configure user protocol 12-5 connect device 12-2 convert characters 13-12
9-21
automatic reset sequential function chart 5-38
B
bar code extract characters 13-2 search for a match 13-4 test characters 13-4, 13-10 bitwise operators structured text 7-10 block transfer guidelines 10-24 block. See array BOOL expression sequential function chart 5-26, 6-14 structured text 7-4 boolean action 5-20, 6-19 program 5-20 branch ladder logic 8-2 sequential function chart 5-12, 6-5,
6-6
buffer for unconnected message 10-23,
10-25
I/O 2-8
C
cache connection 10-22 CASE 7-16 change of state configure for I/O module 4-22 chassis size 1-3 clear major fault 1-17, 15-1
Publication 1756-PM001G-EN-P - March 2004
Index
minor fault 16-1 nonvolatile memory 17-15 codes major fault 15-15 minor fault 16-4 comments structured text 7-28 communicate other controllers 10-1 with multiple controllers B-1 communication execution 1-26 guidelines for unscheduled communication 4-8 I/O module 2-2 impact on execution 4-6 Message instruction 10-19 system overhead time slice 1-26 CompactFlach card use of reader 17-18 compare ASCII characters 13-4, 13-10 compliance tables C-5 configure action 6-17 alarm 6-12 controller 1-3 driver 1-13 electronic keying 2-6 execution of sequential function chart
reduce the number of 2-3 construct structured text 7-12 consume tag 10-9 consumed tag connection requirements 10-10 create 10-15 maintain data integrity 4-44 organize 10-12 overview 10-9 synchronize controllers 4-45 continuous task execution 1-18 overview 4-2 use of 4-2 controller change properties 1-3 download 1-14 memory information 19-1 mode 1-16 nonvolatile memory 17-1, 17-3 number of tasks 4-4 shut down 15-13 suspend 15-13 synchronize 4-45 tags 3-5 triggers supported 4-21 update firmware during load from nonvolatile memory
17-6
controller organizer navigate 1-4 open routine 1-11 controller tags use of 3-5 ControlNet bandwidth limits 10-13 configure driver 1-13 produce and consume data 10-9 convert ASCII characters 13-12 COS. See change of state create alias 3-26 consumed tag 10-15 driver 1-13 event task 4-53 periodic task 4-54 produced tag 10-14 program 1-20 project 1-1 routine 1-10
17-12
main routine 1-21 output processing for a task 4-13 project 1-3 serial port for ASCII 12-3 step 6-11 system overhead time slice 1-26 task 1-19 user protocol for ASCII 12-5 connection cache 10-22 direct 2-3 failure 10-5 I/O fault 10-5 inhibit 10-2 listen-only 2-4 monitor 10-6 overview 2-2 produced or consumed tag 10-10 rack-optimized 2-3
Publication 1756-PM001G-EN-P - March 2004
Index
string 13-18 string data type 12-8 tag 3-9, 8-11 function block diagram 9-22 tag using Excel 3-10 user-defined data type 3-19
D
data ASCII 12-8 block. See array definitions C-2 enter ASCII characters 12-21 force 14-6, 14-8 I/O 2-7 produce and consume 10-9 data table. See tag data type choose 3-3 convert data 10-28 overview 3-3 structure 3-3 data. See also tag description structured text 7-28 tag 3-21 user-defined data type 3-21 disable force 14-3, 14-13 document sequential function chart 6-23 structured text 7-28 tag 3-21 user-defined data type 3-21 documentation show or hide in sequential function chart
function block element 9-18 ICON 9-25 ladder logic 8-10 OCON 9-25 selection branch 6-6 sequential function chart 6-3 simultaneous branch 6-5 EOT instruction 5-27 Ethernet configure driver 1-13 produce and consume tags 10-9 event task axis registration trigger 4-34 axis watch trigger 4-38 checklist for consumed tag event 4-46,
4-47
checklist for input event 4-26 checklist for motion group event 4-33 checklist for registration event 4-35 checklist for watch position event 4-39 choose trigger 4-20 consumed tag trigger 4-42 create 4-53 estimate throughput 4-28 EVENT trigger 4-50 input data trigger 4-22 motion group trigger 4-32 overview 4-2 timeout 4-55 use of 4-2 execute event task 4-20 execution sequential function chart 5-51, 6-28 task 1-18 execution order function block diagram 9-5 export ladder logic 8-14 expression BOOL expression sequential function chart 5-26,
6-26
don"t scan sequential function chart 5-34 download 1-14 driver configure 1-13
6-14
structured text 7-4 calculate array subscript 3-29 numeric expression sequential function chart 6-12,
E
electronic keying 2-6 enable force 14-2 enter action 6-16 address 8-11 ASCII characters 12-21
6-18
structured text 7-4 order of execution structured text 7-10 structured text arithmetic operators 7-6
Publication 1756-PM001G-EN-P - March 2004
Index
bitwise operators 7-10 functions 7-6 logical operators 7-9 overview 7-4 relational operators 7-7 extract ASCII characters 13-2
F
fault clear 1-17, 15-1 communication loss 10-5 create user-defined 15-13 develop routine to clear fault 15-1 during load from nonvolatile memory
organize sheets 9-2 rename a block 9-23 resolve a loop 9-8 resolve data flow between blocks 9-11 resolve loop 9-21 show a pin 9-20 function blockdiagram applications for 1-8 functions structured text 7-6
G
global data. See scope
17-4
during prescan 15-8 I/O connection 10-5 indirect address 15-8 major fault codes 15-15 minor fault codes 16-4 monitor minor 16-1 test a fault routine 15-12 feedback loop function block diagram 9-8 file. See array firmware update during load from nonvolatile memory 17-6 first scan bit 1-22 FORDO 7-19 force disable 14-3, 14-13 enable 14-2 LED 14-4 monitor 14-4 options 14-6 remove 14-3, 14-13 safety precautions 14-2 sequential function chart 14-9, 14-12 tag 14-6, 14-8 function block diagram add an element 9-18 add sheet 9-18 assign immediate value 9-24 choose elements 9-3 connect elements 9-21 create a scan delay 9-12 force a value 14-1 hide a pin 9-20 latching data 9-5 order of execution 9-5
Publication 1756-PM001G-EN-P - March 2004
I
I/O buffer 2-8 document. See alias impact on execution 4-6 output processing 4-13 synchronize with logic 2-8 throughput for event task 4-28 update period 2-2 I/O module choose for event task 4-25 communication format 2-3 communication loss 10-5 configure 2-1 configure change of state 4-22 connection fault 10-5 electronic keying 2-6 inhibit 10-2 ownership 2-4 tag address 2-7 trigger event task 4-22 update period 2-2 ICON add 9-25 choosing 9-3 enter 9-18 IEC61131-3 compliance data definitions C-2 instruction set C-4 introduction C-1 operating system C-2 program portability C-4 programming language C-3 tables C-5 IF...THEN 7-13 immediate value function block diagram 9-24
Index
ladder logic 8-13 import ladder logic 8-14 index. See indirect address indirect address 3-27 clear a major fault 15-8 format 3-23 use of expression 3-29 inhibit connetion 10-2 I/O module 10-2 task 4-17 instruction set C-4 IREF choosing 9-3 enter 9-18 latching data 9-5 to assign immediate value 9-24
load a project 17-12 local data. See scope logical operators structured text 7-9 look up a bar code 13-4
M
main routine use of sequential function chart 5-6 major fault codes 15-15 create user-defined 15-13 develop fault routine 15-1 manipulate string 13-1 mark as boolean 6-19 math operators structured text 7-6 memory allocation for tags 3-3 determine amount of free 19-1 types 19-1 message cache connecton 10-22 convert between 16 and 32-bit data
J
jump sequential function chart 5-17
K
keying electronic 2-6
10-28
decode string 13-14 guidelines 10-24 limits 10-21 manage multiple messages A-1 processing 10-20 queue 10-21 to a single controller 10-19 to multiple controllers B-1 unconnected buffer 10-23, 10-25 Microsoft Excel export/import tags 3-10 minor fault clear 16-1 codes 16-4 logic 16-1 mode controller 1-16 monitor forces 14-4 I/O connection 10-6 task 4-10 motion planner impact on execution 4-6 trigger event task 4-32
L
ladder logic applications for 1-8 arrange input instructions 8-6 arrange output instructions 8-7 assign immediate value 8-13 branch 8-2 develop 8-5 enter 8-10 export 8-14 force a value 14-1 import 8-14 manage messages A-1 override a value 14-1 rung condition 8-4 last scan sequential function chart 5-32 latching data function block diagram 9-5 LED force 14-4 library of logic create and use 8-14
N
Publication 1756-PM001G-EN-P - March 2004
Index
name guidelines for tag 3-7 reuse of tag name 3-5 tag name 8-8, 9-4 nonvolatile memory check for a load 17-14 clear 17-15 fault during load 17-4 load a project 17-12 load image options 17-7 overview 17-1 store a project 17-9 supported controllers 17-3 numeric expression 6-12, 6-18, 7-4
O
OCON add 9-25 choosing 9-3 enter 9-18 open routine 1-11 operating system C-2 operators order of execution structured text 7-10 order of execution function block diagram 9-5 structured text expression 7-10 OREF choosing 9-3 enter 9-18 organize 1-7 strings 12-8 output processing manually configure 4-15 overview 4-13 programmatically configure 4-16 overlap manually check for 4-10 overview 4-9 programmaticlly check for 4-11 overrun. See overlap ownership I/O module 2-4
P
pass-through description 3-21 pause an SFC 5-51 period
define for a task 1-19 periodic task application for 5-5 create 4-54 execution 1-18 overview 4-2 use of 4-2 PLC-5C share data 10-17 postscan sequential function chart 5-32 structured text 7-3 prescan clear a major fault 15-8 prgoram tags use of 3-5 priority assign 4-5 selection branch 6-8 produce large array 11-1 tag 10-9 produced tag connection requirements 10-10 create 10-14 organize 10-12 overview 10-9 program action 5-18, 6-19 boolean action 5-20 configure 1-21 create 1-20 main routine 1-21 overview 1-4 portability C-4 scan time 1-29 tags 3-5 transition 6-14 program mode 1-16 program/operator control overview 9-14 programmatic reset option 5-35 programming language choose 1-8 IEC61131-3 compliance C-3 RSLogix 5000 software 1-7 project components 1-4 configure 1-3 controller organizer 1-4 create 1-1 download 1-14
Index
17-12
nonvolatile memory 17-1 number of tasks 4-4 organize routines 1-7 organize tasks 4-2 protect 18-1, 18-13 restrict access 18-13 store in nonvolatile memory 17-9 upload 1-12 verify 1-12 protect project 18-1, 18-13 routine 18-1
organize 1-7 overview 1-4 protect 18-1 restrict access 18-1 verify 6-29, 8-17, 9-26 routine source protection 18-1 RPI. See requested packet interval RSI Security Server software 18-13 RSLinx configure 1-13 RSLogix 5000 Source Protection tool
18-1
run mode 1-16 rung condition 8-4
Q
qualifier assign 6-17 choose 5-23
S
save 1-12 see also store a project save as 1-12 scan delay function block diagram 9-12 scan time 1-29 scope guidelines 3-7 tag 3-5 security protect a project 18-13 protect a routine 18-1 Security Server software 18-13 selection branch assign priorities 6-8 create 6-6 overview 5-15 send ASCII characters 12-14 sequential function chart action assign order 6-22 call a subroutine 6-21 configure 6-17 enter 6-16 overview 5-18 program 6-19 rename 6-16 use of boolean action 5-20 applications for 1-8 automatic reset option 5-38 boolean action 5-20 call a subroutine 6-21 configure execution 6-28 define tasks 5-5
R
read ASCII characters 12-9 registration trigger event task 4-34 relational operators structured text 7-7 remove force 14-3, 14-13 rename action 6-16 functin block 9-23 step 6-11 transition 6-14 REPEATUNTIL 7-25 requested packet interval 2-2 reset action 5-42 SFC 5-46 reset an SFC 5-49, 5-51 restart sequential function chart 5-46 routine as transition 5-27 choose programming language 1-8 configure as main routine 1-21 create 1-10 import ladder logic 8-14 nest within sequential function chart
5-49
open 1-11
Index
document 6-23 don"t scan option 5-34 enter a new element 6-3 execution configure 5-50 diagrams 5-51 pause 5-51 force element 14-1, 14-9, 14-12 last scan 5-32 nest 5-49 numeric expression 6-12, 6-18 organize a project 5-6 organize steps 5-12 pause an SFC 5-51 programmatic reset option 5-35 qualifier 5-23 reset data 5-32 SFC 5-46, 5-49, 5-51 restart 5-46 return to previous step 6-9 selection branch assign priorities 6-8 create 6-6 overview 5-15 sequence 5-14 show or hide documentation 6-26 simultaneous branch create 6-5 overview 5-16 step configure 6-11 define 5-6 organize 5-12 overview 5-6 rename 6-11 step through simultaneous branch 14-9 transition 14-9 step through simultaneous branch 14-9 step through transition 14-9 stop 5-45 text box 6-25 transition overview 5-24 program 6-14 rename 6-14 wire 5-17 serial cable wiring 12-2 configure port for ASCII 12-3 connect an ASCII device 12-2 SFC_ACTION structure 5-20
SFC_STEP structure 5-8 SFC_STOP structure 5-47 SFP instruction 5-51 SFR instruction 5-46, 5-49, 5-51 sheet add 9-18 connect 9-25 function block diagram 9-2 shut down the controller 15-13 simultaneous branch 5-16 enter 6-5 force 14-9, 14-12 step through 14-9 slot number 1-3 source key 18-1 status force 14-4 memory 19-1 monitor 1-22, 1-23 status flags 1-22 step add action 6-16 alarm 5-28 assign preset time 6-11 configure 6-11 configure alarm 6-12 data type 5-8 define 5-6 organize in sequential function chart
5-12
rename 6-11 selection branch 5-15 sequence 5-14 simultaneous branch 5-16 timer 5-28 step through simultaneous branch 14-9 transition 14-9 stop data type 5-47 sequential function chart 5-45 store action 5-42 project 17-9 string compare characters 13-4, 13-10 convert characters 13-12 create 13-18 data type 12-8 enter characters 12-21 evaluation in structured text 7-8 extract characters 13-2
Index
manipulate 13-1 organize data 12-8 read characters 12-9 search an array of characters 13-4 write characters 12-14 string data type create 12-8 structure create 3-19 organize 3-7 overview 3-3 SFC_ACTION 5-20 SFC_STEP 5-8 SFC_STOP 5-47 user-defined 3-17 structured text applications for 1-8 arithmetic operators 7-6 assign ASCII character 7-4 assignment 7-2 bitwise operators 7-10 CASE 7-16 comments 6-23, 7-28 components 7-1 contructs 7-12 evaluation of strings 7-8 expression 7-4 FORDO 7-19 force a value 14-1 functions 7-6 IF...THEN 7-13 in action 6-19 logical operators 7-9 non-retentive assignment 7-3 numeric expression 7-4 relational operators 7-7 REPEATUNTIL 7-25 WHILEDO 7-22 subroutine 1-7 overview 1-4 suspend controller 15-13 symbol. See alias. synchronize controllers 4-45 system data access 1-23 system overhead time slice 1-26 guidelines for multiple tasks 4-8 impact on executon 4-6
tag address 3-23 alias 3-24 array 3-13 assign 8-11 function block diagram 9-22 assign dimensions 3-16 choose name 8-8, 9-4 consume 10-15 create 3-9, 8-11 create alias 3-26 create using Excel 3-10 data type 3-3 description 3-21 enter 8-11 force 14-6, 14-8 guidelines 3-7 guidelines for messages 10-24 I/O 2-7 memory allocation 3-3 name 3-5 organize 3-7 organize for message 10-19 organize produced and consumed tags
10-12
overview 3-1 produce 10-14 produce and consume 10-9 produce large array 11-1 reuse of name 3-5 scope 3-5 string 12-8 trigger event task 4-42 type 3-2 task assign priority 4-5 avoid overlap 4-9 choose event trigger 4-20 choose type 4-2 configure 1-19 create event 4-53 create periodic 4-54 define 5-5 define timeout 4-55 execution 1-18 impact of multiple tasks on communication 4-8 inhibit 4-17 manually check for overlap 4-10 manually configure output processing
4-15
monitor 4-10, 4-11 number supported 4-4
10
Index
output processing 4-13 overlap 4-9 overview 1-4 priority 4-5 programmatically check for overlap 4-11 programmatically configure output processing 4-16 scan time 1-29 trigger via EVENT instruction 4-50 watchdog time 1-31 test a fault routine 15-12 test mode 1-16 text box sequential function chart 6-25 show or hide in sequential function chart
EVENT instruction 4-50 module input data 4-22 motion group 4-32 supported by controller 4-21
U
unresolved loop function block diagram 9-8 upload 1-12 user protocol configure for ASCII 12-5 user-defined data type create 3-19 guidelines 3-19 overview 3-17
6-26
throughput estimate for event task 4-28 timeout define for event task 4-55 transition BOOL expression 5-26 call subroution 6-15 choose program method 5-26 define 5-24 EOT instruction 5-27 force 14-9, 14-12 program 6-14 rename 6-14 step through 14-9 use of a subroutine 5-27 trigger axis registration 4-34 axis watch 4-38 choose for event task 4-20 consumed tag 4-42
V
verify project 1-12 routine 6-29, 8-17, 9-26
W
watch point trigger event task 4-38 watchdog time 1-31 weight convert 13-12 WHILEDO 7-22 wire function block diagram 9-5, 9-8, 9-20 sequential function chart 5-17, 6-9 write ASCII characters 12-14
vr
Pub. No.
1756-PM001G-EN-P
Part No.
957867-41
Please complete the sections below. Where applicable, rank the feature (1=needs improvement, 2=satisfactory, and 3=outstanding).
Overall Usefulness 1 2 3 How can we make this publication more useful for you?
Can we add more information to help you? procedure/step example explanation illustration guideline definition feature other
Other Comments
Location/Phone Would you like us to contact you regarding your comments? ___No, there is no need to contact me ___Yes, please call me ___Yes, please email me at __________________________ ___Yes, please contact me via ________________________
Allen-Bradley Marketing Communications, 1 Allen-Bradley Dr., Mayfield Hts., OH 44124-9705 Phone: 440-646-3176 Fax: 440-646-3525 Email: [email protected]
PN 955107-82
Other Comments
PLEASE REMOVE
[ctrl-@] NUL 0
Rockwell Automation provides technical information on the web to assist you in using our products. At http://support.rockwellautomation.com, you can find technical manuals, a knowledge base of FAQs, technical and application notes, sample code and links to software service packs, and a MySupport feature that you can customize to make the best use of these tools. For an additional level of technical phone support for installation, configuration and troubleshooting, we offer TechConnect Support programs. For more information, contact your local distributor or Rockwell Automation representative, or visit http://support.rockwellautomation.com.
Installation Assistance
If you experience a problem with a hardware module within the first 24 hours of installation, please review the information that's contained in this manual. You can also contact a special Customer Support number for initial help in getting your module up and running: United States Outside United States 1.440.646.3223 Monday Friday, 8am 5pm EST Please contact your local Rockwell Automation representative for any technical support issues.
ControlNet is a trademark of ControlNet International, Ltd. DeviceNet is a trademark of the Open DeviceNet Vendor Association.
PN 957867-41
Copyright 2004 Rockwell Automation, Inc. All rights reserved. Printed in the U.S.A.
Programming Manual