Studio 5000 Application Code Manager Project Execution and Library Management Lab
Studio 5000 Application Code Manager Project Execution and Library Management Lab
The variety of uses for the hardware, software and firmware (hereinafter “Products”) described in this Documentation, mandates
that those responsible for the application and use of those Products must satisfy themselves that all necessary steps have been
taken to ensure that each application and actual use meets all performance and safety requirements, including any applicable
laws, regulations, codes and standards in addition to any applicable technical documents.
In no event will Rockwell Automation, Inc., or any of its affiliate or subsidiary companies (hereinafter “Rockwell Automation”) be
responsible or liable for any indirect or consequential damages resulting from the use or application of the Products described in
this Documentation. Rockwell Automation does not assume responsibility or liability for damages of any kind based on the
alleged use of, or reliance on, this Documentation.
No patent liability is assumed by Rockwell Automation with respect to use of information, circuits, equipment, or software
described in the Documentation.
Except as specifically agreed in writing as part of a maintenance or support contract, equipment users are responsible for:
• properly using, calibrating, operating, monitoring, and maintaining all Products consistent with all Rockwell Automation
or third-party provided instructions, warnings, recommendations, and documentation.
• ensuring that only properly trained personnel use, always operate and maintain the Products.
• staying informed of all Product updates and alerts and implementing all updates and fixes; and
• all other factors affecting the Products that are outside of the direct control of Rockwell Automation.
Reproduction of the contents of the Documentation, in whole or in part, without written permission of Rockwell Automation is
prohibited.
Throughout this manual we use the following notes to make you aware of safety considerations:
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
Labels may be located on or inside the drive to alert people that dangerous voltage may be present.
Labels may be located on or inside the drive to alert people that surfaces may be dangerous temperatures.
Studio 5000® Application Code Manager
Project Execution and Library Management: Lab
Contents
Project Execution ........................................................................................................................................ 5
Lab 5 – Create a Motion Project and explore different types of libraries using the Machine Builder
Libraries .................................................................................................................................................... 76
Lab 7 – Update and Merge Library Content with an Existing ACD File. .................................................. 102
Lab 9 – ACM v4 Studio 5000 Library Import Wizard Plug-in ................................................................... 126
Lab 11 – Create a Library Object: Valve Control Code with I/O References ........................................... 143
Lab 12 – Create a Library Object: Kinetix 5500 I/O Drive ....................................................................... 232
Lab 16 - How to add FactoryTalk Alarms and Events Content to an Existing Object .............................. 370
3 of 431
Before you begin
Software
▪ Studio 5000 Application Code Manager (ACM) V4
▪ Logix Designer V32 and V33
▪ Logix Emulate V33
▪ FactoryTalk View V11
Hardware
▪ No Logix hardware is required for this lab
Lab Files
▪ The files required for this lab have been placed on the desktop of the ACM image.
▪ ACM Libraries
▪ (RA-LIB) Machine V14, (RA-LIB) ICT, (RA-LIB) Process 3.5 Library, (RA-LIB) Process 4.0 Library, (RA-LIB) Device,
myAdd-On libraries
▪ ACM Projects
▪ Project_myPS1, Project_Lab_RetrieveAttachment, Project_Lab_RevisionInfo, Project_Lab_UpdateMerge
▪ FTViewSE Project
▪ Local Station “Template_ProcessLib_40_ACM”
▪ Logix Designer Project (v33)
▪ myValve.ACD, K5500Example.ACD , COP.ACD
▪ Logix Designer Project (v33)
▪ DocTemplate_Get_ValveParameters.txt, DocTemplate_Get_Objects.txt
4 of 431
Project Execution
Lab 1 – Explore a Sample ACM Project
This section will review how to quickly build your automation projects using reusable code stored in libraries. See how
configuration, not programming, is used by selecting library objects (control modules, equipment modules, etc.) and providing
configuration data, such as object name and descriptions, equipment set points, control interlocks, etc., required for your project.
Once all the configuration, not programming, is provided the project will be built (ACD file) which can be downloaded to a
controller.
5 of 431
The following window appears.
By default, it opens the last opened project, which in this case is myPS1.
Expand the project content in the Class View so that you can see the various components.
Library Object
(Class) with
Version
Specific instances of
the Class library
object
Controller Preview shows what content will be generated in the final ACD from the configured Class View
library objects.
Class View shows all the configured library objects as well as all the instances. Looking at the Valve in the
Class View shows five (5) instances of the valve object.
6 of 431
Click on the myCLX library object in the Class View to see the associated parameters in the middle window.
Click in the size selection box “17” to show the dropdown button. Use the dropdown to see the possible selections.
Do the same with the Software Revision to see available revisions. Keep the selection set to “v31”.
7 of 431
Notice that the shortcut paths for View SE and View ME are specified. This is required when ACM generates
the HMI content since the shortcut path is required as part of the HMI addresses.
Example:
The historian needs the shortcut too, but also needs RSLinx Enterprise and the application. This is the fully
qualified path.
8 of 431
Click on XV100 in the Class View to see Parameter details of this instance.
9 of 431
Notice when XV100 is highlighted. In the controller preview there are boxes around the
Task_D_500
Task_D_MainProgram
MainRoutine
Valves
This indicates that there is content coming from the XV100 library object. You will need to expand the trees
to see all the items.
Looking further down the project tree you can also see the associated Add-On Instructions and Data Types.
This is a nice feature …..
10 of 431
Turning our attention to the Parameters window, we can see the configuration details for this instance of the
object.
All of these parameters are have been specified by the creator of this library object, or commonly referred to
as the “Librarian”. The Librarian dictates all aspects of the library object such as parameters, Logix content
to include routine language used (Rung Ladder Logic, Structure Text, Sequential Function Charts, Function
Blocks and Sequence Manager), Visualization content, etc..
Examples . . .
Options: - There are options associated with limit switches (LS), Interlocks (Intlk), Permissives (Perm) and
statistics (Stats). It appears that XV100 does not have limit switches, interlocks or permissives, but the
project does have HaveStatsObj to see the statistics related to this valve.
Alarms: - Specifies if there are interlocks, open or close time failures, etc.
Historian Configuration: - There are Historian points associated with this valve and they have been
selected. Sts - stands for status, meaning is the valve opened or closed. The second historian point keeps
track of faulted status.
HMI Configuration: - There are both View SE and View ME displays associated with this object. We will
concentrate on the View SE displays. We set it up so the orientation is up, this is the P_ValveSO option. The
naming is based on the View GlobalObject.
P_ValveSO=up, P_Valve_SO1=down, P_Valve_SO2= right and P_Valve_SO3=left.
The correct orientation can then be selected and placed on any appropriate P&ID display for the operator.
11 of 431
Click on LT100 and examine the parameters associated with it.
12 of 431
Click on the Linked Libraries tab.
Linked Libraries allows the Librarian to manage dependencies between library objects. In this case linked libraries consists of a
set of control modules linked (or referenced) to the Process Object library which are required by the COP object.
If we were going to make a change we would click and use the pull-down to see what options we have.
Click on the first row and using the pull-down, select Link to Existing Instance.
13 of 431
It will then show you all the existing valves that you can choose from.
Again use the drop-down, but this time select the Create New Instance option.
14 of 431
Now the Object Configuration Wizard appears.
15 of 431
We can set the parameters as needed. In this case, the only parameter we are going to change from the
defaults is SEAssocDisplay located under HMI Configuration.
Click the row for SEAssoc Display and then click on ellipsis .
Select FTViewSE Server in the middle window. Click the Displays tab on the right pane, select Valves.
Click the Finish button. The window should look like this.
16 of 431
The COP Linked Libraries window should look like this.
17 of 431
As a reminder, if you select an object in the Class View all associated objects in the Controller Preview are
identified.
It also works the other way around. If you select something from the Controller Preview it will identify the
associated objects in the Class View.
Click on P_Alarm under Controller Preview to see what class objects are associated with P_Alarm into our controller.
Let’s generate the ACD file for our controller. Right click on CLX and select Generate Controller.
Click on the Generate button. Note that we will save this to the Logix Folder on the desktop.
18 of 431
It will take a short period to generate the ACD file.
Notice the ACM Project Data box. It is checked by default for V27 and greater. The checked box indicates
that the library information will be stored as part of the ACD file.
TIP: Under Tool > Setting, you can change the default selections
19 of 431
Go to the desktop folder “Logix” and open the myCLX project.
Compare the generated project with the Controller Preview in ACM. They should be roughly the same.
NOTE: Logix Designer organizes the routines alphabetically A-Z, however, ACM organizes by the Jump-to-
Subroutine (JSR) order. This is useful in cases where you need to ensure a certain order execution in your
logic.
ACM display order = Logix Designer JSR Order
20 of 431
Open up each of the MainRoutines.
ACM can generate content for any Routine types (Ladder Logic, Function Block, Structure Text and
Sequential Function Charts.
SequenceManager is also available if using v30 Logix or higher
21 of 431
Open COP01 to see the logic.
All the appropriate transmitters and valves are included and addressed correctly in the logic as shown.
22 of 431
Next, let’s get ready to download and run the application.
23 of 431
Launch Studio 5000 Logix Emulator (located on the desktop)
Next, using Studio 5000 Logix Designer, go ahead and download the project to the Emulate controller.
24 of 431
Put the controller into RUN mode if it isn’t already running.
25 of 431
Minimize Logix Designer and close the Logix folder.
In the System View, expand the HMI folder as shown and select FTViewSE Server.
26 of 431
Select the Displays tab.
Right click on FTViewSE_Server and select Generate Displays > All Displays.
27 of 431
Select the folder called FTView and click OK.
Notice that four display xml files were created. Also note that a BatchImport file was created. The
BatchImport file will allow us to bring in the displays all at once instead of having to bring them in individually.
Open FTView Studio by clicking the Factory Talk View Studio Icon in the Start Menu or Desktop.
28 of 431
Select View Site Edition (Local Station) and Continue.
Note: ACM generated the displays for FTView, and these will need to be imported into the FTView SE
project.
29 of 431
Select Import graphic information into display and click Next.
30 of 431
Click on the ellipsis button to select the batch import file.
Click Finish.
31 of 431
Expand the Displays folder in FTView Studio and double click on AIs to open this display.
The faceplate were created for both LT100 and TT100. The Engineer would then select the graphic they
want and copy it onto an operator display.
32 of 431
Open the COP01 display.
Right click on the Water Supply XV200 (Water Supply) valve and select Global Object Parameter Values.
33 of 431
The values are configured to the appropriate tag and path.
Launch the client by clicking the Client button and then clicking Run.
34 of 431
The client is setup to open the COP display. Note that all the objects are communicating to the appropriate
tags in the controller.
35 of 431
Click on LT100 to bring up its faceplate.
Open the faceplates for the pump and any of the valves.
36 of 431
Click on the Simulation Disabled button to start a simulation so it turns green as shown.
37 of 431
Go to the LT100 faceplate.
38 of 431
Click on the trend button and confirm that we are see live data in the controller changing.
Feel free to explore any of the faceplates. When you are done exploring, close the client and move on to the
next section. The point of this section is to show how easy it is to generate and use content from libraries.
39 of 431
Close out of FTView and navigate back to ACM.
Expand Historian all the way. Right click FTHistorianSE_Server and select Generate Historian -> All Controllers
These are all of the tags that can be directly imported into FactoryTalk Historian. We will not be using
Historian in this lab, but we can see that tags that are available to it.
40 of 431
Lab 2 – ACM Export and Import using MS Excel
This section will review how to add content easily to an ACM project using its Export and Import Capabilities via MS Excel.
41 of 431
Let’s export the entire controller.
42 of 431
Excel Opens up
Let’s say we wanted to create some additional spare valves, we can do this right in Excel.
Select the entire row for XV104 by clicking on the number “9” of the valves worksheet
NOTE: If you did the exercise in Lab 1 you will have an XV200 in row 10 – thats OK, still use XV104 as shown below.
With row 9 selected, hold down the Shift Key and select row 12
43 of 431
Use CTRL-D funtion in Excel to perform a copy of the first row to the selected rows
This time drag the + from the lower right hand corner of cell A9 down to row 12, this will automatcially increment the
valve numbers
44 of 431
Next, scroll over the the Addresses, select cell ED9
Lets do the same thing we did above, drag the + from the lower right hand corner of cell ED9 down to row 12, this will
automatcially increment the address numbers
45 of 431
Save the file and close Excel
Lets go ahead and select the import tab in ACM, and fill in as shown.
46 of 431
Verify that the valves now exist in ACM and that they contain the configuration we gave them in Excel.
47 of 431
Lab 3 – Create a Project Using Linked Libraries
When working within the Application Code Manager (ACM) application, it is often necessary to link to multiple objects together to
create a functional unit. With the release of version 3.0 of ACM, the library object can be configure so that users can
automatically create the required linked objects with a single button click. In this section of the lab, you will automatically create
content using linked libraries.
This will be demonstrated when creating the initial project and when creating a Clean-Out-Place (COP) system within the project.
Double-click the Application Code Manager shortcut on the desktop of your image:
In the top ribbon menu, expand File, New, and select Project:
In the Object Configuration Wizard, expand Project, select the myAdd-On (RA-LIB) Process 4.0 project Solution, and click
the Next button:
The “myAdd-On (RA-LIB) Process 4.0 library > Basic_Project” contains linked content to a ControlLogix Controller, FTViewSE
48 of 431
and FTHistorianSE system, which will work well for this particular application.
Type ‘COP_Project’ for the Name:
With the 4.0 release of the Library of Process Objects, we are able to choose languages other than Function Block Diagram for
our logic.
In the Misc section of the Parameters, change the Lgc_Lng_Valves parameter value to Ladder Logic (LD):
49 of 431
Upon choosing the Ladder Logic language, we are also provided the option of creating the logic in a single routine, or breaking
the logic into multiple routines. In this example, we will simply choose the default single routine
For the Project_Selection parameter value, maintain the default Create Single Routine option and click the Next button:
At this point, we need to link to supporting objects. Prior to version 3.0 of the ACM application, this would have been done on an
individual basis. For example, in this case we need to link to three objects. So, we would have had to work through the linking
process three times. With the release of version 3.0, we now have the option of automatically generating all of the necessary
linked objects with a single button click.
50 of 431
In the Auto Create Linked Objects window that appears, we are able to modify the object names as desired.
Modify the Object Name for each of the linked objects as shown below and click the OK button:
Verify that the new linked objects are applied and click the Finish button:
In this example, the Auto Create button has saved us an enormous amount of time by creating all three linked objects with a
single button click.
51 of 431
Once the new project is created, go to the Class View pane and expand Program and Task.
Notice that, with the Library of Process Objects version 4.0, our project contains preconfigured tasks and main programs:
Furthermore, the preconfigured tasks and programs will be instantiated in the controller as shown under the Controllers Preview.
Go to the Controller Preview pane and expand Tasks, Task_D_500ms, and Task_D_MainProgram:
52 of 431
Let’s go ahead and add the Clean-Out-Place (COP) object to this task.
Within the Controller Preview pane, right-click Task_D_MainProgram and select Add New… :
In the Object Configuration Wizard, scroll down, expand the Specialty category, select the COP object for version 4.0, and
click the Next button:
53 of 431
Maintain the default Parameters configuration and click the Next button:
We are again confronted with the task of linking to other objects, eight in this example. Let’s use the Auto Create button to once
again save some time in our project creation.
54 of 431
We are presented with a list of several valve objects, a motor object, and a couple of analog input objects that are required by
the COP object. If desired, we can now modify object names, as well as where the objects reside (i.e., within which task and
which program). For this example, we will maintain the default selections.
Verify that the linked objects are applied and click the Finish button:
55 of 431
Notice the new objects that have been added to our project with just a few mouse clicks:
We will also require an HMI display to go along with our new objects, so let’s add that now.
From the System View pane, expand HMI and Displays, and select FTViewSE_Server:
56 of 431
Within the central configuration pane, go to the Displays tab, right-click in the white space, and select
Add New:
For this example, we will provide a descriptive name for the display and maintain the default
configuration.
Change the Name to COP_Display, click away from that cell, and click the Apply Changes… button:
Now that the display has been created, we need to associate it with the COP object.
57 of 431
Within the Controller Preview pane, select the COP01 routine:
Within the central configuration pane, select the field next to SEAssocDisplay and click the ellipsis
button:
In the right pane of the Select a Reference window, go to the Displays tab, select the new
COP_Display, and click the Finish button:
58 of 431
Now that the display has been associated with the object, click the Apply Changes… button:
If we wanted separate displays for our linked objects such as the valves in the exact same manner, we could
also create those too. We only want to show the COP for this lab, so we will not create separate valve
displays for this example. For now, let’s generate everything and see how it runs.
Since we have a V31 controller set up in Emulate, we need to set this project to match.
Change the Controller “SoftwareRevision” to V33 and set the controller to 1756-L75
And Apply Changes….
59 of 431
Right click on the controller and choose the Generate Controller option
60 of 431
Verify that we have various routines as shown
Bring up the Who Active screen in Studio 5000 Logix Designer and download the project to the Emulate controller.
Click Change Type when prompted and say Yes to confirm and click download again.
61 of 431
Go ahead and put the controller into run mode.
62 of 431
Let’s open FTView SE
Select Local
63 of 431
Select Multiple displays and Next
Select the BatchImport.xml file we just created as shown, and click Finish.
Close Notepad.
64 of 431
If there is already a COP01 display from Lab 1, go ahead and delete it.
Since the SE client is configured to use the display “COP01”, let’s rename the COP_Display to COP01
65 of 431
Go ahead and click the Launch SE Client button
Go ahead click around on the screen to your satisfaction that the screen and code are up and running.
We can now see the power of ACM! In just a few clicks, we have created a working project, working code,
and have an operating HMI screen with very little effort.
Just think how much time this can save you on your projects!!!.
66 of 431
Lab 4 – Create a Project Using the ACM Command Line
In this section you are going to experiment with the Command Line interface to ACM. Leveraging the command line console you
will export an existing ACM project to Excel. Once exported, using Excel you will make a small change and then save. Next,
again using the command line console you will then import the Excel project into ACM creating a new ACM project from the
updated Excel file.
67 of 431
Type help, then hit enter to get a list of all commands.
Take a quick look at the various commands that are available by scrolling through the window.
For more information about any specific command type Help and the name of the command. If you only
know that first part of a command, the tab key can be used to find the rest.
68 of 431
Type help export <tab key>
69 of 431
Go to the C:\Documents and double click on the file myps1.xlsx.
70 of 431
Let’s create a new project. First change the two names to myPS2.
71 of 431
Goto to the “Motor(2.0)” tab.
Select Rows 5 to 9
Note, using the Excel method of click dragging the entire row to create more rows may auto-increment other
columns ending with numbers which may not be desired.
72 of 431
Next click on the first P100 cell and place the cursor over the lower right dot.
Notice the tabs at the bottom. These are the various objects that exist in the project. We would be able to edit
any of them if desired. For now, we will not, but feel free to look through them.
Since there was only one import choice, it is auto filled with help importproject
73 of 431
Hit Enter to see the help.
This will create Existing_COP2 project, the name that we had specified in the excel file.
74 of 431
Bring up ACM and open the myPS2 project that should now exist.
Feel free to look around and explore the changes you made.
75 of 431
Lab 5 – Create a Motion Project and explore different types of libraries using the Machine Builder
Libraries
Open ACM
In the top ribbon menu, Select File > New > Project.
76 of 431
The Object Configuration Wizard opens.
Click Next.
77 of 431
In the Class View or Controller Preview, right click on Controllers and select Add New.
Click Next.
78 of 431
Now the Object Configuration Wizard appears for the selected object.
Make the following changes:
Name = ‘MBL_CLX’
Slot =3
Software Revision = 32
Processor Type =1756- L85E
AreaPath = ::[MBL]
Motion Configuration = True
Motion Group Name = MotionGroup
79 of 431
Note the Task naming convention for the predefined tasks:
ms = millisecond periodic task rate. The defaults are 08, 16, 48, 64, 128, and 256 milliseconds.
p = priority. The defaults are 08, 09, 10, 12, 14, and 15.
In System View under HMI, right click on Displays and select Add
Select FTViewME under the ACM 2.00 solution and click Next
80 of 431
Open the Display tab. Right click and select Add New.
Enter the Name of the new display as MBL_Display. Click Finish to complete the wizard.
The Controller and Display have been added, let us start adding application content.
Right click on ms0016p10 Task in the Controller Preview and select Add New Program
81 of 431
Change the Name to MotionPgm and click Finish to complete the instantiation.
1. Application and Device Object Integration: Add a Conveyor CIP Drive Object to understand how a common
control interface gives flexibility to connect to multiple Device Objects to a single Application object.
82 of 431
Use the Filter field to narrow down the library search. Enter Conveyor and see that only libraries with conveyor in name appears.
Select raM_LD_Conveyor_CD library and click Next
83 of 431
In the MEAssocDisplay parameter, click the browse button to select from existing ME displays
Select FTViewME_Panel and then MBL_Display from the existing Displays and click Finish
84 of 431
Click Next to move to Linked Library tab
Now we will choose which drive module to connect to the conveyor object. Select Create New Instance in the DeviceObject
entry field.
Notice the different Motion class Device Objects in the list available to integrate with Conveyor CIP Drive Object. One of the
advantages of having separate application and device objects is for user code to remain constant for different architectures.
Select the raC_LD_Dvc_K5500 library from the available list of Motion Class Device objects and Click Next
85 of 431
Enter the following
Name = ConveyorDrive
Task = ms0016p10
Program = MotionPgm
RoutineName = Product_Conveyor (so Conveyor object and Device object inserted into same routine)
CreatePhysicalAxis = True
Click Auto Create and OK to create the Asset definition objects for the Device Object.
86 of 431
Click Finish to complete the Object Configuration Wizard of the Device Object. Notice the ConveyorDrive now showing in the
DeviceObject field.
Click Auto Create and OK to create the Asset definition objects for the Conveyor object. Notice the remaining Linked Libraries
have been created. Click Finish to complete the Object Configuration Wizard of the raM_LD_Conveyor_CD.
The Product_Conveyor routine is now added inside the MotionPgm program. Let us understand the content that has been added
by the libraries. In the Class View, select ConveyorDrive and observe the highlighted content as MainRoutine, Product_Conveyor
routine, MotionGroup and Axis_ConveyorDrive
87 of 431
Select Product_Conveyor in Class View and observe that only MainRoutine and Product_Conveyor routine are highlighted. This
shows that Product_Conveyor is only the application part and ConveyorDrive is the device part.
As illustrated above through the AutoCreate function, raM_Dvc_Conveyor_CD library contains only the Add-On Instructions and
Data types. These are labeled as Asset-Control. The raM_LD_Conveyor_CD library used have only the implementation code of
the Add-On Instruction. The LD in object name indicates that implementation code will be inserted in Ladder Diagram. Continue
to the next section to understand further.
Consider a scenario where a user only wants to utilize the Add-On Instruction and its dependencies of a library but does not want
any additional implementation code to be generated. Nearly all Machine Builder Library objects are split into two parts: Asset-
Control and Implement. If the user wants to add only Add-On instructions and dependencies, then instantiate only the Asset-
Control library associated with that function. If the user wants to take advantage of configured code, then instantiate the
implement type object with Asset-Control object as a linked library. In following steps, the lab shows how to instantiate the Asset-
Control object of a Valve instruction.
88 of 431
Enter Valve in the Filter and select raM_Dvc_Valve. Notice the Library Type as Asset-Control. This means this is only the asset
part, containing Add-On Instructions and Data Types. Select the library and click Next.
An Asset-Control type library is only necessary to be added once per project and the name should be left as default. Click Finish
to complete wizard.
Notice that there are no routines or implement code added, but only the Add-On Instruction and Data Types.
89 of 431
In the previous section, we added the ConveyorDrive device object. raC_Dvc_K5500 is an Asset-Control type library and
raC_LD_Dvc_K5500 is an Implement type. Select the raC_Dvc_K5500 in the Class View. Observe the Add-On Instruction and
Data Types highlighted.
Similarly, raM_Dvc_Conveyor_CD is the Asset-Control type library for the raM_LD_Conveyor_CD Implement
(“Product_Conveyor” is the instance of this implement).
90 of 431
Select raM_Opr_Recipe and observe the ContentType is defined as Program. This means the content is in the form of Program.
Click Next.
Name = RecipeManagement
RecipeMemorySize = 25
91 of 431
In the MEAssocDisplay parameter, click the browse button to select the display where the Navigation button for the Recipe
faceplate will be placed.
Select FTViewME Panel and in Displays tab select MBL_Display. Click Finish to complete the selection.
92 of 431
Note the library inserted a program and multiple routines.
Project Generation
The first step is to generate HMI Displays. Right click on FTViewME_Panel and select Generate Displays> All Displays.
Open the Folder and observe the MBL_Display is available for import in FTView Studio in xml format along with a batch import
file for user convenience.
93 of 431
The second step is to generate the Logix code.
Change the Save As name and options as desired, then click Generate to start generating the Logix ACD file.
94 of 431
Click Open Folder.
95 of 431
In the Controller Organizer, observe the content added by libraries
Open the Product_Conveyor Routine and note raM_Dvc_Conveyor_CD and raC_Dvc_K5500 instances added in same routine.
Observe the 3 tags names ending with _CtrlSet, _CtrlCmd, and _CtrlSts. These are called Control Interface which allows an
application-based object to connect to a device-based object.
The only step pending is to add the Module_ConveyorDrive module in the IO Configuration and then code is ready to run.
96 of 431
Lab 6 – Retrieving Attachments
One of the features of Application Code Manager is to retrieve attachments stored in the libraries. These attachments are added
while decorating a library. The ACM database can be used as single repository for all types of files associated with a library. For
example, a few of attachments that are included with Machine Builder Libraries are reference manuals, FTView ME & SE display
and global object files, View Studio Images, and View Designer files.
Attachments can be retrieved in two ways:
1. Project: Extract all the attachments of the libraries used in a particular project
2. Registered Libraries: Extract individually from each library in the registered libraries
In the top ribbon menu, select File > Open > Lab_RetrieveAttachment
97 of 431
This project has few objects added already
1. Conveyor CIP Drive
2. RecipeManagement
3. Valve
To extract attachments related to the objects used in this project, right click on the MBL_CLX controller in the Class View and
select Extract Attached Files
98 of 431
Open the folder location and explore the files added. A folder with project name has been created
Open Documentation folder and observe that the reference manuals for Conveyor CIP Drive, Valve and Recipe Management are
included.
99 of 431
2. Retrieve from Registered Libraries
Expand the (RA-LIB) Machine solution in Registered Libraries. Drill down thru Asset-Control > TemperatureControl and select
raM_Tec_SealerTemp. Let’s first see what attachments are available with the raM_Tec_SealerTemp library. The Attachments
Tab gives information on each attachment Name, Description, File Name, Revision Description.
To extract the attachments, right click on the library and select Extract Attached Files.
100 of 431
Select the folder as Desktop\Logix and click OK.
Observe the files ME & SE Faceplate, ME & SE Global Objects, Image.zip and reference manual. Also observe that the
attachments are placed in a flat file structure, whereas when extracted from a project controller, the files are segregated into
folders.
101 of 431
Lab 7 – Update and Merge Library Content with an Existing ACD File.
This lab will demonstrate using the Update from ACD/L5X & Merge Controller options in Studio 5000® Application Code
Manager. To utilize these options just right click on the controller name.
A common scenario for any user is the need to add libraries to an existing ACD file using ACM. We will go through the following
steps in this lab
1. Generate ACD from an existing ACM Project
2. Modify the generated ACD in Studio5000 to simulate user adding application specific code
3. Add the ACD file back into ACM and add new library instances to demonstrate user adding additional content
4. Merge the project output with existing ACD
In the top ribbon menu, select File > Open > Lab_UpdateMerge
102 of 431
Observe the library objects added under CLX_UpdateMerge controller. This application contains the following:
1. SuctionPump – raM_LD_Motor_VSD
2. SuctionPump_Drive – raM_LD_Dvc_PF525
3. Inlet_Valve – raM_LD_Valve_Fdbk
103 of 431
When you click Generate Controller, the following window will appear. Ensure that ACM project data is selected and then press
the Generate option.
When generation is completed, click Open Folder button to ensure that ACD is generated.
2. Modify the generated ACD in Studio5000 to simulate user adding application specific code
When the Open Folder button was clicked, the system navigated to the folder where the ACD file is saved.
104 of 431
Open CLX_UpdateMerge.ACD and then open SuctionPump_Drive routine.
Observe that Rung 0 is in error as the I/O Configuration is missing Module_SuctionPump_Drive (Powerflex 525).
Let us add Powerflex525 drive to I/O Configuration. Right click on Ethernet and select New Module.
Enter PowerFlex 525 in the Filter field. Select PowerFlex 525-EENET and click Create.
105 of 431
106 of 431
The Device Definition window opens. Enter the following parameters and click OK.
Name: Module_SuctionPump_Drive
Ethernet Address: 192.168.1.1
107 of 431
Click Create to complete the New Module wizard.
108 of 431
Observe the Powerflex 525-EENET is added in the I/O Configuration and the error in Rung 1 of the SuctionPump routine is
cleared.
Let us add another instance of raM_Dvc_Valve_Fdbk in the Inlet_Valve routine. Open the Inlet_Valve routine.
109 of 431
Copy and paste Rung 0. Type _OutletValve in place of _Inlet_Valve and _Outlet_Valve_OE
In place of _Inlet_Valve_OE.
Right click on _Outlet_Valve and select New “_Outlet_Valve” to create new instance.
110 of 431
Repeat the same process to create a new tag for _Outlet_Valve_OE.
3. Add the ACD file back into ACM to simulate user adding few libraries
Switch back to ACM. Right click on the CLX_UpdateMerge controller and select Update from ACD/L5X.
111 of 431
The Import From ACD Wizard will open. Note the information that says that “Instances that do not already
exists in the target controller in ACM may either by added or excluded. The assumed default is to add them.
Instances that already exist in the target controller in ACM may either be updated or excluded. The assumed
default is to exclude them”. Since all the instances are already available in the ACM project they are
excluded. Consider a scenario where user updates the ACD into an empty ACM project, then all the library
instances will be included.
Select Auto Continue to automate the steps and only stop when seeing a warning or error.
Click Next to continue.
112 of 431
Import Completed. Click Finish to continue.
113 of 431
Observe the Logix icon appearing next to CLX_UpdateMerge controller. This denotes that the project is now attached to ACD
file.
Now, since the ACD file is attached to the ACM Project, let’s add a new library instance.
To add a library instance, right click on PgmSuctionPump and select Add New
In the filter field enter “permissive” and select the raM_LD_PermissiveInterlock object. Click Next
114 of 431
Change the Name to PumpInterlocks and click Next
In the linked library tab, click Auto Create to create the linked library.
Once Auto Create is completed, click OK to close the Auto Create dialogue. Click Finish to complete the wizard
115 of 431
Observe the routine PumpInterlocks that was added in the PgmSuctionPump program.
If you see a Browse for Logix Compare Tool window, browse to C:\Program Files (x86)\Rockwell Software\
and open RSLCompare Application
116 of 431
The Logix Designer Merge Tool will open. If the tool finds no conflicts after completing the merge operation, then the Save As
window appears. In case of any conflicts, the tool will indicate the conflicts and ask user to choose resolution. Leave the default
name as MergeResult.ACD and click Save.
The Merge Tool can do most of the selections and merge. But if you would like to understand further then there are few options.
First understand the 3 windows in merge tool
1. Left Side – Existing ACD file which is considered the base project
2. Right Side – Library objects updated from ACM
3. Centre – Library objects as part of original ACD File
117 of 431
An easy way to understand is to go thru the result content and see what content is picked from which side
To understand the differences and what content got picked from which side, click on to the Differences buttons
118 of 431
The tool highlights the differences one by one and gives the user the choice of how to resolve the discrepancy. Showing one of
the differences below, you can see that the _Outlet_Valve and _Outlet_Valve_OE were added in ACD file so they will be
considered from base project. The _PumpInterlocks is added in ACM and will be considered from the Updated Library objects
side.
Close the merge tool and open the MergeResult.ACD from Desktop\Logix folder. Observe the PumpInterlocks routine added into
the program while retaining other content as original.
119 of 431
Lab 8 – Finding and Reviewing Object Revision Information
In the top ribbon menu, select File > Open > Lab_RevisionInfo.
In the Class View, expand CMX to see the list of objects that are used in this project.
120 of 431
Selecting the object will show the Revision History. Select object raM_Dvc_AnalogChannel. In Revision History, we can see
versions, publisher, modified date, major and minor revision, and description at the time the library was published.
The same information can be found in the Registered Libraries tree without having to add an object to the project. Expand
Registered Libraries → (RA-LIB) Machine → Asset-Control → IO-Channel. Click on raM_Dvc_AnalogChannel to check the
revision history.
121 of 431
2. Printing the information of all libraries in repository
Right Click on Registered Libraries and select View. You will be able to see two options Pending Libraries and Library Usage.
Pending Libraries : Generate a list of pending objects in the tree. These are the objects which are not finalized.
Library Usage : Generate the list of objects that are in the tree and how many times they have been used.
Selecting Library Usage will take you to below mentioned image. Details like Solution, Library Type, Category, Catalog Number,
Major Rev, Minor Rev and Usage Count will be displayed. Usage Count will give the information regarding whether the objecthas
been used in any of the projects or not. Print button can be used to make a portable copy.
122 of 431
This report can be generated at a Solution, Library Type, Category, or Library Object level, depending on where in the tree the
process is initiated.
In the System View, right click Used Libraries under Project - Lab_RevisionInfo, select View and select Library Usage.
123 of 431
The following window will appear. This window gives the details regarding libraries used for the current project.
124 of 431
By manually expanding Used Libraries in the project, the details regarding which libraries are used can be displayed without
generating a report.
125 of 431
Lab 9 – ACM v4 Studio 5000 Library Import Wizard Plug-in
With Application Code Manager Version 4 and later, it is possible to add library content directly in Studio 5000 Logix Designer
without the need to open ACM. One of the advantages of this feature is minimizing time involved to add content to an existing
application.
Select Project Type as Logix. Select controller as 1756-L85E and enter the name as ACMv4Plugin. Click Next.
126 of 431
Click Finish.
Since this is a new project, there is no user content. To add libraries, right click on the Controller at the top of the Controller
Organizer and select Import Library Objects under Plug-ins.
127 of 431
The Library Object Import Wizard is opened.
To add a library, select the library from the Registered library pane. Double Click on raM_LD_SMTPLogix from (RA-LIB)
Machine\Technology.
128 of 431
Notice the raM_LD_SMTPLogix is included in the Library Objects list, but with an error symbol. This means that the object
configuration is incomplete.
Enter the following
Name = SMTPLogix
Task = MainTask
Program = MainProgram
Click on the Linked Libraries tab. Click on Auto Create to create the linked library.
Note the error sign in Library Object is changed to green tick mark. Since we also added a linked library, two libraries are
displayed in the list.
129 of 431
If you wish to add more libraries, select a library and complete its configuration until you see the green tick mark next to its name.
Sometimes you may only want the Add-On Instruction and data types of a library and not the implement code. In such cases,
add the Asset-Control type library. Let us select raM_Dvc_Contactor from (RA-LIB) Machine\Asset-Control.
Double click on raM_Dvc_Contactor to open Object Configuration wizard. Note that the green tick mark is already shown. The
reason being that there is no further configuration necessary. Asset-Control type libraries are one time only additions as this will
add the Add-On Instruction and associated Data types only.
130 of 431
Since we are done adding the libraries. Click Next in the bottom of the Library Object Import Wizard to complete the merging
process.
131 of 431
The Merge Actions shows the content to be added into the existing Logix code. Click Next to continue.
132 of 431
You can preview how the newly added content will be included and adjust as desired. Click Next to continue.
133 of 431
Upon successful import message, click Finish to close the wizard.
134 of 431
Note all the new content that was added into your Logix code. Note that we added only the Asset-Control of raM_Dvc_Contactor,
thus only the Add-On Instruction is added and no implement code. For SMTPLogix we added Implement library and its Asset-
Control (thru a linked library) so we got both an implement routine and the Add-On Instruction.
The Library Import Wizard is a welcome addition to the functionality of Logix Designer and creates a closer
integration between Logix Designer and Application Code Manager.
Because the Library Import Wizard only functions within the Logix Designer environment, it does not support
all the functions that the standalone ACM supports. The Library Import Wizard is very useful for quickly
adding content to a project. While large amounts of libraries could be added in this method, it is
recommended to utilize the standalone version for this type of work. Additionally, none of the ancillary
functions of ACM are supported via the Library Import Wizard, such HMI display, Alarm, and Historian
generation.
With these items in mind, use the Library Import Wizard to its fullest and enjoy the functionality it provides for
creating content.
135 of 431
Lab 10 – Replicating Library Objects to the Local Database
In this lab, we will see how to pull in Library Objects into a local database. Accessing the local database may be much faster than
accessing a remote database, and so it may improve performance to store objects locally.
Open ACM.
Make sure that Library Repositories is selected and that the Library Repository area is visible.
We don’t have a remote database to connect to, but we can create a second local database and pretend that the ACM one is a
remote database, the steps are identical. Let’s create a new database.
Select Database Manager.
136 of 431
Notice that we are connected to the local data server in the Server Name field.
Go ahead and check the box for use default password and click Connect.
137 of 431
Once the database is created, click OK and Close.
ACM is now connected to a new database which has no projects or library objects in it.
Notice that the active database is listed in the title bar.
Let’s go ahead and connect to a “remote” database to see how to pull in local copies of objects.
Right click on Library Repository and select Add
138 of 431
We could connect to a remote database here if we had one, but for this lab, we are just going to use our local “ACM” database.
Select the ACM database as shown and click OK.
Feel free to browse through the library and import objects or folders. Below shows example of selecting the last four folders of
objects and replicating them to the local database. Select any library objects and folders as desired. It is recommended for this
lab to not select too many objects as it can take a while to replicate.
139 of 431
Select some objects in the repository, right click, and select Replicate to Active Database.
Here we have a chance to change our minds and deselect any items we do not want replicated.
140 of 431
Now that we know how to add objects. Let’s go ahead and change back to our original database so we can continue with other
labs.
141 of 431
That completes this lab. We can see that it is easy to import objects from other databases into our local
database. This may make is easier to find commonly used library objects, or to speed development in cases
where remote database access is may be slow.
142 of 431
Library Management
Lab 11 – Create a Library Object: Valve Control Code with I/O References
The slide above shows the design and publishing portions of ACM.
For this section, we will focus on steps 2 and 3 using material from step one that has already been created
for us (learning Logix code development is not the aim of this lab).
Step 1: Create Content to be Libraried
We will use the Logix content that has already been prepared upfront.
Step 2: Group and Parameterize Library Content
In this part of the lab we will parameterize the provided Logix project content to turn it into a configurable
ACM library object.
Step 3: Publish
This lab part will exercise publishing the library to the ACM database, so it can be instantiated in projects.
143 of 431
Step 1: Create content to be Libraried
The rungs 0 to 4 of the Valves routine represent the content that we are going to transform into our Library
Object. It is basically P_ValveSO AOI from the Rockwell Automation Library of Process Objects
It has a tagname of myValve and a description of myDescription. In order to make the exercise as simple as
possible, the logic covers mapping of only 3 input/output tags: myValve.Inp_OpenLS, myValve.Inp_ClosedLS
and myValve.Out. While all three are tied to physical inputs/outputs in our source file, we will change these
to be selectable in the final object.
For this exercise, we want our library object to include the routines with the rungs providing the I/O mapping
and AOI execution, necessary Add-On instructions, Data Types, and tags.
144 of 431
The following is what we want to achieve:
1. All the logic for all the valve instances to be placed in a single ladder logic routine.
2. Have “myValve” be replaced with the name of our choice (i.e. XV100 – Water Valve)
3. Have Limit Switch feedback input rungs included as or exclude as desired, if included, have the inputs
for those rungs tied to user selected inputs
4. Have the output rung tied to a selected output as configured by the user.
145 of 431
Step 2: Group and Parameterize Library Content
Launch the Library Designer by right clicking on the Controller myExample and selecting Plug-Ins -> Library Designer.
Take some time and explore the Selected Objects area (expand / browse the containers to verify that it reflects the Logix project
we started with)
146 of 431
Configure Inclusions and Dependencies
We will start with configuration of Inclusions. Inclusions control what by default is included when an object is
created.
Add Children: This means that all sub-folders and sub items are included when an object is selected. In
this case if we select myValve the Parameters and Local Tags, MainRoutine and Valves routine will all be
included.
Add Dependencies: This means that all associated items such as Add-On Instructions, Data Types, and
Controller Tags are automatically included.
Allow Shared Ownership: This means ACM will allow Logix content (such as Add-On Instructions and Data
Types) to be shared among different library object definitions. If not checked, ACM will prevent AOIs and
UDTs sharing, which would mean that content items may be added to one library object only. If any of these
items is selected and added to another library object, the Library Designer plug-in does not allow the
association to take place and displays a warning.
Container Mode: This means that all Logix content will automaticlaly be added to the container type.
Container types are Task, Program and Rouitnes.
For this lab we do want all the Inclusions. Check them all to be on.
147 of 431
Define the basic properties of the library object
Expand the Tasks / Main Task containers in the Selected Objects pane. Drag the myValve Program folder from the Selected
Objects pane and drop it on the Libraries folder of the Library Objects pane.
148 of 431
Let’s start by giving it a Catalog Number and Description as shown:
The Catalog Number is the name that will be shown in the ACM library database.
We will continue with definition of the remaining configurable attributes (explanations later on the next page):
Solution: This is user defined, this is the highest organizational level in the ACM library database..
Type in “Examples”.
Library Type: This can be user defined (can be typed in). As we are creating a control module (to control a single device), pick
ControlModule.
Category: This can be user defined (can be typed in). We will stick to the existing Categories. Use the dropdown to select the
most meaningful category for the object. Select Valve.
149 of 431
The combination of Solution / Library Type / Category defines the library object placement in the ACM
database hierarchy. So in our example, the final placement (once the library is published, will look like this:
Examples / ControlModule / Valve / myValve:
Content Type: This allows to define a granularity of the library object. As we want our library object to be defined on the routine
level only, select Routine for our example. (This implies that the Task / Program will have to be added elsewhere outside of this
object),
The Instantiation section allows you to give a default name and description for the object when it is dropped
into a project. This makes sense when you are only going to create a few instances. But if you are going to
create many instances, then having a default name just means you have many name/description changes to
make. We will leave these fields blank.
150 of 431
Do not change anything in the Substitutions section for now.
Substitutions: This is where you define the Search and Replace capabilities of the object. We will leave it as
shown, as we want to change the text “myValve” to the objects instantiated name. NOTE: additional
substitutions can be applied later using the “Substitution” Tab
151 of 431
Click OK to the Warning notice (the warning is in compliance with what we defined earlier as a Content Type: Routine)
Expand the Libraries folder and the myValve folder to see the content.
Since we defined this library object Content Type as Routine (above), observe that, just as the Warning told
us, there are only routines. Any task and program folders have been removed from the object.
152 of 431
Expand the Controller Tags and click on the tag myValve to see the details for the tag.
Notice the name “{ObjectName}”. This represents that the tag name will be changed to the object name.
The braces indicate a substitution operation, and the text shows what will be substituted. We’ll see more on
this later.
This has already been set up due to the Substitution settings that we defined during object creation (see
previous page)
153 of 431
The Add-On Instructions, Data Types, and Controller tags were included because we selected Add
Dependencies earlier using the Inclusions option,
We have created our library object and configured its basic properties. Now we will add parameters and
define additional substitutions to add desired configurability (description, I/O connections, etc).
154 of 431
First, let’s review which substitutions have already been defined. Click on the myValve library object at the top of the list and then
go to the Substitutions tab.
This indicates that every “myValve” occurence will be replaced by the {ObjectName}. So any Controller Tags
that contain “myValve” will be created specific to the object name used.
Let’s review once again the myValve tag. Click on the Controller Tag myValve.
Notice that the Name has already been setup for substitution (that was done when we were defining the
library attributes), but not the Description.
155 of 431
Substitution of Object Description
Let’s define the substation for Description. Click on the myValve library object and go back to the Substitutions tab and click on
the “+” to add a new substitution.
The Substitution Builder will come up. Type in myDescription into the Original field.
In the Replacement field click on the ellipsis to bring up the Member Selector.
Substitutions can be defined for different scopes. Here we start with the easiest and the most common one:
The entire library object. It does not provide low level granularity but ensures that every occurrence of the
search text within the library is replaced – resulting in a valid generated code once instantiated.
156 of 431
Click on the Predefined tab and scroll down to find ObjectDescription.
Select the Local ObjectDescription and click OK to close the Member Selector and get back to the Substitution Builder.
Now we see that the Substitution Builder is set for replacing myDescription.
157 of 431
The list in the Substitutions tab now shows both ObjectName and ObjectDescription with scope being the
whole myValve library object, which was the aim.
Let’s review the effect of the substitutions that we have defined so far:
In the Library Objects, click on Controller Tag myValve.
Notice that the Description of the object is now as a substituted value {ObjectDescription}.
158 of 431
Let’s also review how the substitution affects the ladder logic.
Click on the Valves routine.
Notice that the substitution of the object name has been incorporated into the logic too.
We also want a mapping of the I/O points. We will define additional substitutions and create parameters to
make the I/O mapping configurable.
159 of 431
Substitution using a parameter – Output I/O point
Let’s start the I/O mapping configuration by defining substitution for the output mapping.
Right click the Local:2:O.Data.0 tag name on last rung of the logic and select Substitutions. This will bring up the Substitution
Builder
Once in the Substitution Builder, click on the Local:2:O.Data.0 value in the Selected Element field to get the value copied into
the Search for: field.
Change the Scope from Rung to Library
160 of 431
We have just selected the output channel address ( Local:2:O.Data.0 ) to be the search string, which the
substitution will search for. We are also telling the search to operate on the entire library. Although we can
scope a substitution to a specific rung, we should use that option sparingly, as the original object code should
be designed with object level substitution in mind to ease maintenance and object updates.
If we keep substitution at the rung level, we must remember that other rungs and tags will not be affected by
those substitutions. This could pose a higher demand on the librarian, as substitution of any potential new
occurrence (e.g. a code update to the source library object) of the given text needs to be handled
individually. This could result in non-valid code being generated if not all single occurrences of the given text
are covered, causing the librarian to need to make addition library changes.
161 of 431
The Member Selector window will open.
We want to be able to assign an I/O point for the digital output to the instance of the library object. In order to
do that, the I/O point needs to be defined as a parameter. We will create a parameter named DO_Address
for this purpose (the choice of name is up to the designer of the library).
We need to add a new parameter, so click on the “+” sign. The Add new Parameter dialog pops up.
Type DO_Address in the Name field (and then click on the ellipsis for the Reference Type).
162 of 431
If the Reference Type was left as Immediate, the user would need to type in the DO address manually,
whereas the Reference selection will provide an interface to choose an I/O channel to populate the
parameter value.
Let’s change the Reference Type to Reference, which will allow the user to select the I/O channel.
In order to offer only the relevant references, it will be useful to limit the I/O channel selection to digital
outputs for this object. We will use the Filter option to achieve the limitation.
163 of 431
Scroll down to the SubObject.Type and double click on DO.
164 of 431
Note that the expression now shows SubObject.Type= ‘DO’.
165 of 431
The Filter is now defined.
NOTE: It is possible to add an explanation into the Parameter Help field as shown in the screenshot above
(not necessary).
166 of 431
Select the newly created DO_Address parameter in the Member Selector window and click OK.
The Substitution Builder now reflects the changes we have made. Click the OK button to accept the changes.
167 of 431
Substitution using a parameter – Input I/O points
Now it is time for you to try what you have just learned – create two new parameters:
• DI_Address_OpenLS
• DI_Address_CosedLS
And use them for substitution of the XIC instruction arguments on rungs 1 and 2 of the object’s logic. Refer to the previous
section of this lab manual (Substitution using a parameter – Output I/O point) if in doubt on how to proceed.
The final logic (Valves routine) and configuration of one of the parameters are shown below:
168 of 431
Set tag values by parameters – Cfg_Has**LS
The P_ValveSO Add-On Instruction that we are using in this example contains multiple configuration tags
that are available for every instance of the AOI. We will now pick two of these to configure for this lab:
• Cfg_HasOpenLS
• Cfg_HasClosedLS
We will create parameters that will allow us to set initial values of these tags for every AOI instance.
169 of 431
Configure the new parameter as shown below:
170 of 431
Click OK to confirm. The HasOpenLS appears below.
So we have created two additional parameters, but at this time they have no functionality. Now we need to
define the function we want them to serve – setting the values of Cfg_HasOpenLS and Cfg_HasClosedLS,
as explained at the beginning of this section.
We’ll do this next.
171 of 431
Click on the Controller Tag myValve, then click into the Tags pane and scroll down to find the tag element Cfg_HasOpenLS as
shown below:
172 of 431
The Expression Builder window appears.
173 of 431
Click on the Validate button to make sure the expression is good.
174 of 431
If we discover a typo and want to change the name of a parameter, here’s how we can correct a parameter
name. Let’s say we had accidentally typed HasCloseLS but really wanted HasClosedLS:
Click OK.
175 of 431
Set tag values by predefined parameters – Cfg_Tag, Cfg_Label, Cfg_Desc
There are a couple of more tag elements of the P_ValveSO Add-On Instruction that we want to add as an
expression.
The following three elements that contain tag name and description to be displayed on the HMI
• Cfg_Tag
• Cfg_Label
• Cfg_Desc
Setting the values of these three tags by using the predefined {ObjectName} and {ObjectDescription} will
significantly speed up the configuration of the instances.
Scroll down almost to the end of the list to Cfg_Tag and right click to Add/Edit Expression.
176 of 431
We want to set the value of Cfg_Tag STRING to be the object name during the instantiation, so go to the Predefined tab and
select ObjectName. As usual, double click to add it to the Expression window. Click Validate.
You should already know the procedure, so go ahead and make the next two changes to accomplish the configuration as shown
below:
The three expressions that we have just defined will ensure that the name of the object instance and the
description of the object instance will be written as string values into the respective tag elements of the
instance.
As we defined the “HasClosedLS” and “HasOpenLS” parameters, we will use their values to set visibility of
the “DI_Address_ClosedLS” and “DI_Address_OpenLS” parameter fields in the ACM user interface. This will
ease the project configuration, as it does not make sense to have I/O configuration field available for a limit
switch that does not exist.
177 of 431
Click on the myValve object in the Library Objects tree once again, then go to the Parameters pane, right click on
DI_Address_OpenLS and select Edit
178 of 431
The Expression Builder window comes up.
Delete the “True” statement from the expression.
Double click on the HasOpenLS parameter, so the parameter name gets copied to the Expression window.
Validate the Expression.
Click the OK button to accept the expression and close the Expression Builder.
179 of 431
Instantiation rules – Usage – Include Once vs Once Per Object
You might have already noticed earlier (when we were defining substitutions in logic) that routines and rungs
have Instantiation Rules. This allows the library creator to define how the logic will be structured in the
controller.
First we will focus on Usage. The options are Include Once and One per object and depending on the
choice of element, these settings can be applied to any routine and/or individual rungs.
• Include Once – the selected element will only be added once – an example for such usage can be
program’s Main Routine
• One per object – every instance of the generated library will add one instance of the selected element –
an example could be calls of AOI’s for the individual library instances
We will see the usage in the following section
180 of 431
Click on the MainRoutine and then click on Rung 0
Notice Rung 0 will be created “One per Object”, meaning if we create 100 valves, we would get this JSR 100
times, however we only want a single JSR to the Valves Routine, hence set the Usage to “Include Once”.
This way we get this JSR to the Valves routine only once as shown below.
TIP: The instantiation rules can be set independently for the entire routine and individual rungs. Be careful
which context you apply the rules to.
Click Apply.
181 of 431
NOTE:
It would be appropriate to also set Usage of the MainRoutine and Valves routine (if you review the settings,
both are set to “One per Object” – which is not what we intent.
But due to the fact that both of these two routines have a fixed name (there is no substitution), they will be
really only generated once (like if the setting was “Include Once”), as ACM will not be able to create multiple
instances of the element with the same names.
The Name setting will “override” the Usage setting.
The Instantiation Rules can also be used to conditionally include parts of the code (Tasks / Programs /
Routines / Rungs) in the generated project. It is achieved by using the Condition field.
We will use this setting to include rungs for mapping of valve’s Closed and/or Open limit switches only under
the condition that the valve really has these switches (we will use the parameters “HasClosedLS” and
“HasOpenLS” that we created earlier).
182 of 431
Click on the Valves routine and then click on Rung 1
Click the ellipsis button next to the Condition field. This opens the Expression Builder.
Double click on the HasOpenLS parameter, so the parameter name gets copied to the Expression window.
Validate the Expression.
Click the OK button to accept the expression and close the Expression Builder.
183 of 431
Rung 1 is now configured to be included based on condition defined by the HasOpenLS.
Perform similar steps in order to define condition for rung 2 as shown below (the condition will be “HasClosedLS”):
Click Apply.
184 of 431
What steps have we taken so far to create a new library object?
• Opened the ACD file which contained the logic for our object
• Open Library Designer to build the new object
• Dragged the code from the ACD into the Library Designer
• Added the following parameters to the object
o Substitution for name and description
o Selectable DO and DI addresses
o Configurability for having an open or closed limit switch
o Substitution for tag, label and description
• Configured instantiation rules:
o Limited the object to one JSR per routine
o Conditionally include rungs for limit switches mappings based on the instance configuration
185 of 431
Step 3: Publish
Publishing means storing the library object in the ACM database, so it becomes available for instantiation in
projects.
186 of 431
We are still evaluating this object and haven’t really tested it. If we publish it and then need to make a
change we would have to change the revision.
If we publish it as pending then we don’t have to change the revision for any future testing edits.
187 of 431
Change this object to Pending Status and click Apply.
188 of 431
Exploring the ACM Library Objects Database
Open ACM and*- see that the new object is there. In case the object does not show up (if ACM was already open), right click
Registered Libraries and click Refresh.
Click on myValve.
You can see information about the valve we created by clicking on the different tabs. Go ahead and feel free
to explore
189 of 431
Test the Library Object in a New Project
The Object Configuration Wizard window will open. Expand the Project by clicking on the “+”.
Notice that ACM is library-centric. Even the project structure is defined as a library object.
190 of 431
Add a controller
The first step is to add a controller to the project. There are several libraries available, the main difference
among those being the Tasks / Programs structure.
Controllers from the “default” (RA-LIB) ACM 2.00 solution do not contain any pre-defined Tasks.
Controllers that are part of the (RA-LIB) MachineBuilder and (RA-LIB) Process solutions bring to the project
the Task / Program hieararchy and configuration.
Select ControlLogix -> (RA-LIB) ACM 2.0 ControlLogix Controller and click Next.
191 of 431
Configure the controller as shown below:
Click Finish.
Due to the fact that we are using controller library object from the “default” (RA-LIB) ACM 2.00 solution, there
are no pre-defined Tasks and Programs. Let’s create our Task and Program manually.
Expand the controller myValve_Test and right click on Tasks and select Add New Task.
192 of 431
Accept the default settings for Task and click Finish.
193 of 431
Accept the default settings for the new program and click Finish.
194 of 431
Expand Valve and select myValve as shown and click Next.
Note: We are not selecting any of the limit switch options at this time. Also, we are not assigning a DO
address yet because our project doesn’t have any I/O yet.
195 of 431
Add I/O Modules
To be able to map the inputs and outputs of our valve module, we will need to have I/O modules defined in
the project.
Let’s add some I/O, we will start with digital outputs.
Expand the I/O Configuration and right click on the backplane and select Add New.
196 of 431
Accept the defaults and click Finish.
In the Class View, click on V100 and then click in the DO_Address box and the ellipsis.
197 of 431
Select the module, I/O channel and SubObject Reference as shown below.
Click Finish.
198 of 431
Notice that the “DI_Address_OpenLS” appears, as shown below.
Configure the DI_Address_OpenLS to be linked to a channel of the digital input module in slot 5.
199 of 431
Select V100, right click and select Export.
200 of 431
Click Save to accept the default of saving it to the desktop.
201 of 431
Select the entire row for V100 by clicking on the number “5”.
Grab the small square just under the “V”. You will get a plus sign. Drag it down through line 11.
The Excel auto-increment feature increments most text ending in values for each column. Note that the valve
name and DO Address were incremented by Excel.
However, the Description stayed the same for all copies.
We can now fixup the columns as desired.
202 of 431
Change each of the descriptions just for the sake of clarity.
And Let’s leverage the configurability of the object. Change V101 to have both opened and closed limit switches. Also add
addresses to V101 and delete P_DI_Address_OpenLS values from valves V102 to V106, as shown below”
203 of 431
Click on the ellipsis and select the file we created which is on the desktop and click Open.
204 of 431
Click Next.
Click Finish.
205 of 431
Click OK in the dialog that appears.
Remember that we only published our library object as “Pending” – That’s why we receive the above
mentioned warning message.
Let’s review the results of our bulk generation of the myValve object instances.
206 of 431
Click 1756-OA16 -> Local_04 -> DO to see the references.
Now when we are done with the project configuration, let’s generate a Logix project file.
Right click on MyValve_Test and click Generate Controller to create an updated ACD file.
207 of 431
Click Generate.
Double click on myValve_Test.ACD to open the project in Logix Designer. It may take a minute to open the project.
208 of 431
When the project opens, explore the project to see what was added.
Scroll through the Valves Routine to see that all the valves were added.
209 of 431
You will notice that some valves do have rungs for limit switches I/O mapping, as we defined in the ACM project.
Also confirm the configuration of the Cfg_HasOpenLS and Cfg_HasClosedLS: Open the configuration dialog of V100.
Scroll down to see that this instance does have Open limit switches configured and no Closed limit switch.
Check the other valves, which we changed in the Excel spreadsheet, to see that the settings match with our configuration.
Go ahead and Close the myValve_Test.ACD and folder. (Keep the myValve ACD that we first used open)
210 of 431
What steps have we taken after creating the new library object?
• Published it to the Examples library so we could use it in a project
• Created a new project titled Valve_Test
• Created a controller with the new project
• Added one instance of the myValve object to the controller
• Added I/O to the controller and tied myValve to the I/O
• Used Export, Excel and Import to create multiple valves, leveraged their configuration options, automatically tied the
valve to I/O
• Generated the ACD file and confirmed that all logic was created for all valves as expected
211 of 431
Extra Credit Bonus Material
This section is optional.
Calculated Parameters
Recall back in ACM that when we were assigning I/O points we had to select not only the data channel, but
also the Data (or Fault) tag as well. If we had been using both the data and fault channels we would have
had to select each channel individually.
Let’s change it so we only need to select the channel to assign both tags. We are now going to create an
additional parameter to pick the data (and/or fault) tag automatically for the selected channel.
212 of 431
Return to the Library designer of myValve.ACD.
213 of 431
Add the name DO_Channel of type Reference…as shown below:
214 of 431
Next, set the filter to DO as shown. Click OK twice.
215 of 431
We now have a new parameter that can point to a channel.
Now we want to have the channel parameters address propagated to the address tag.
216 of 431
Change the reference type to Calculated.
217 of 431
Using the pulldown, change the linked parameter to myValve.DO_Channel.
Use the pulldown in the reference field and select Browse to library…
Our ACD file does not contain info about I/O-specific reference fields (used to select the correct parameter
values during project configuration), so we have to get these from the ACM database.
218 of 431
Click on the Connect to Database button.
Select “Use Windows Authentication” radio button and click Test Connection
Click OK to close the Test results pop-up and then OK again to connect to the ACM database.
219 of 431
The following window appears.
Use the filter to find the 1756-OA module. Click on the 1756-OA16 module.
Click on the External References tab. Click on the Address and then click OK
220 of 431
Review the setup.
We should remove the filter since this parameter is being auto populated by the Channel parameter.
Then click OK
221 of 431
Click Apply.
Let’s add the channel fault as well just as we did the other one.
222 of 431
Fill in the fault parameter as shown using the same previous steps
Click OK.
223 of 431
Parameter User Interface - re-ordening and grouping
The parameters can also be reordered to better organize them by using the up and down arrows or by right clicking on
them.
or
Re-order as follows:
The parameters can also be grouped together to provide more intuitive configuration dialogues. The grouping
does not affect code generation, but only the way the configuration is displayed.
224 of 431
Double click on HasOpenLS to open its properties
Click OK.
225 of 431
Repeat this for HasClosedLS
Now the two limit switch options are grouped together as shown.
There is also a group column that indicates what group the options are in.
226 of 431
The groups are shown alphabetically. If a specific order is desired, it is common to precede the group name
by a number. I.E., instead of “Options”, use “1 IO”, “2 Options”, “3 More Options” as example group names
and they will be listed in alphanumeric order. Feel free to play with the grouping.
Click Apply.
Publish to Library
Right click on myValve and select Publish Library.
227 of 431
Click OK to Library Destination.
Let’s imagine that we have done all the necessary testing of the module and we are going to publish it not
without the Pending status.
Setting the library object as Published will automatically increase the revision number and will also require
us to fill in the Revision Description to help track the library object changes.
228 of 431
Change the status to Published and enter a Revision Description in the Library Import Configuration.
Note: You can see the automatically assigned revision number when you scroll down in the Library Import
Configuration window.
Click Apply.
229 of 431
Go back to ACM and click on the valve V100 and it should look something like the following
Note: Since we modified the Address to be a “Calculated” parameter, we do not go down to SubObject
References anymore, but rather select the DO Channel only
Click Finish.
230 of 431
Notice that the DO_Address and DO_ChFault auto populate when you do this.
We could now go back and add logic to make use of the channel fault.
We could also add additional fields for more complex modules that have additional fields.
We could also export this to excel to finish populating the remaining valves.
At this time we will not make any further changes as the main point of populating multiple fields has been
demonstrated.
231 of 431
Lab 12 – Create a Library Object: Kinetix 5500 I/O Drive
In this section you are going use ACM Library Designer to create a reusable Kinetix 5500
drive object.
You will publish this object to ACM, and then instantiate the drive using ACM. This will
include the axis for the drive as well.
Notice that this ACD contains an existing K5500 drive an associated Axis.
232 of 431
To begin the creation of a Library Designer Object with a unique Axis name, Drive name and associated
parameters, right click on the Controller folder and Drill Down to the Library Designer Plug-In.
In the far-left Pane Expand the I/O Configuration folder. Then Drag and Drop the 2198-H003-ERS
myKinetixDrive on to the word Libraries in the middle Pane. This will bring up the Assign to/Create New
Library window.
233 of 431
Fill in the window as shown below.
Remove the name that is there and fill in the name under instantiation as myKinetixDrive
Select OK.
234 of 431
Double Click on the ChassisName parameter to bring up the Edit Parameter window.
Change the Parameter Help to: Please enter a unique Chassis Name.
Change the Default Value to: Chassis_Drive
Select OK.
Since a drive is not located in another chassis, we need to make changes so that it can
be stand alone. We remove the reference to the parent chassis and just use a unique
name since ACM requires a “ChassisName” for I/O modules. We’ll manage this later on
when adding more drives by using Excel autoincrement.
235 of 431
Let’s go ahead and make the IP address configurable by adding a parameter for it.
Right click on the Value Expression field of Address as shown below. Click Add as Parameter.
236 of 431
The IP field should show as follows.
Next we will add the associated axis to this drive. To do this we will drag and drop the axis from the
project to the Kinetix 5500 drive object.
Expand the Motion Groups folder in the far left.
Drag and Drop the myCIPAxis axis onto our newly created drive object 2198-H003-ERS.
Select Yes when you see the Do you want to parameterize the AxisID on tag myCIPAxis? prompt.
237 of 431
Expand the myCIPAxis Parameters at the bottom of the window.
Right Click on the MotionModule Parameter and Select Add/Edit Expression.
238 of 431
{ObjectName}:Ch1 should now show as the expression. Click OK.
239 of 431
Let’s also parameterize the name of the axis. Click on the configure button right of the name.
Click on the “Selected Element” entry to populate the search for field.
Click on the ellipsis for the replace with field.
240 of 431
Click on the + to add a new parameter
Add the parameter “Axis_Name” with a description and default value of “myCIPAxis”
241 of 431
Go ahead and select the Axis_Name entry.
Go ahead and OK the window and the Axis should now look like the following
242 of 431
Lastly, we need to configure the parent module for the drive as follows.
243 of 431
Click on the selected element to populate myEN3TR into the Search for field.
Set to the replace with field to {ParentName] and click ok.
We will not be using the RPI parameter for this drive as it does not need one. But we will
enter a valid value for it since the minimum is defined as 2ms.
244 of 431
Now the drive should look like this. Double check all fields.
245 of 431
The Axis should look like this.
246 of 431
Let’s go ahead and publish our object as pending.
Make sure to fill in the Upstream Keys as shown. It must be filled in with
commstype=’ethernet’ exactly as shown. This tells ACM that the module can be put on
Ethernet. Make sure to use single quotes around the word ethernet.
247 of 431
Select Apply
Say OK to the Library Designer windows, close and save the Logix Designer project.
TIP - If you select Pending you allow future changes of this object to not cause object
revision changes. If you select Publish, the object will create a new revision every time
you make a change to the object
248 of 431
TIP - By entering CommsType=’Ethernet’ in the Upstream Keys box you are informing
the object that it is an Ethernet I/O object. This step is necessary to be able to add the
object on Ethernet. Without this step, the object will not show up as available to add.
Select OK to the Library Publication prompt that indicates the object is published.
Bonus material - As an exercise, go ahead and use ACM to create a new project and add
the Kintetix drive we just created.
249 of 431
Lab 13 – Create a Library Object using Linked Libraries
Often, when we are creating new library objects for use in the Application Code Manager (ACM) application, we need to link the
object to other libraries that are related to the object. In this section of the lab, you will create a new Clean Out of Place (COP)
object that contains linking to other libraries.
This project contains logic for a COP application that contains new logic specific to the application, as well as several related
objects from the Library of Process Objects. We would like to create an object in the ACM application for this COP logic so that
we may reuse it in future projects. The steps taken in this logic are summarized below, and a piping and instrumentation sketch
shows the overall process:
As we can see, there are many elements related to the process that we would like to link to the COP object itself. For example,
there are five valves, two analog inputs, and a pump (motor) that may all be handled by standard objects found within the Library
of Process Objects. Thus, when we instantiate a COP object, we want the ability to link to existing objects (assuming they have
already been added to the ACM project), or link to newly created objects. This is where linked libraries come into play.
250 of 431
Whenever we create new objects for use in ACM, we should consider using a naming convention that allows for substitution
when we instantiate the object. In this example, the routine and the controller tags all have specific names that we should
generalize to enable substitution.
Within the Tasks folder of the Controller Organizer, expand Task_D_500ms and Task_D_MainProgram.
The COP01 routine contains the logic that we want to create as a library object.
251 of 431
Change the Routine Name to COPx, and click the OK button:
252 of 431
In the search window, set Find What to COP01, Replace With to COPx, Find Where to Current Tags and Controller Tags,
and click the Replace All button:
In the Search Results, you should see seven instances wherein COP01 was replaced with COPx:
Now that we have our naming prepared for the desired substitution behavior, we may begin creating our object.
Right-click the Controller COP folder, expand Plug-Ins, and select Library Designer… :
253 of 431
When the plug in opens, using the INCLUSIONS dropdown, check all four of the options:
254 of 431
Drag the COPx routine from the Selected Objects pane and drop it into the Libraries found within the Library Objects pane:
In the Assign to/Create New window, type ‘COP_Example’ for the Catalog Number:
For the Library Type, select Design Pattern, and for the Solution, select Examples:
255 of 431
Select Specialty for the Category:
256 of 431
When the COP_Example has been added to the Libraries, select it:
Let’s begin by adding parameters that will allow the user to configure the object during instantiation.
We want the user to have the ability to configure the temperature settings, so let’s add object parameters for that. We will want
the user to configure the engineering units, the maximum value in engineering units, and the failure high limit.
257 of 431
Configure the New Parameter as shown below and click the OK button (use Alt + 0176 to get the degree symbol).
Right-click COP [Temperature Configuration] group and select Add New Parameter:
258 of 431
Configure the New Parameter as shown below and click the OK button:
Right-click COP [Temperature Configuration] group and select Add New Parameter:
259 of 431
Configure the New Parameter as shown below and click the OK button:
Now that we have added the required object parameters, let’s move on to adding linked libraries.
Here we are able to specify to which libraries the user should be able to link the object upon instantiation. We know that we need
links to five valve objects, two analog input objects, and one motor object, so let’s add them now.
260 of 431
Right-click in the link table and select Add New Link:
We are going to use objects that currently exist in our database, so let’s connect to the database so that we may browse to the
desired object.
In the Add New Linked Library dialog, click the Connect to Database button:
261 of 431
Select the Use Windows Authentication radio button and click the OK button:
Once you are connected to the database, type ‘Valve’ in the Filter box and then select the (RA-LIB) Process 4.0 Valve object:
262 of 431
Configure the linked library as shown below and click the OK button:
263 of 431
Type ‘Valve’ in the Filter box and then select the (RA-LIB) Process 4.0 Valve object:
Configure the linked library as shown below and click the OK button:
264 of 431
Right-click in the link table and select Add New Link:
Type ‘Valve’ in the Filter box and then select the (RA-LIB) Process 4.0 Valve object:
265 of 431
Configure the linked library as shown below and click the OK button:
266 of 431
Right-click in the link table and select Add New Link:
Type ‘Valve’ in the Filter box and then select the (RA-LIB) Process 4.0 Valve object:
267 of 431
Configure the linked library as shown below and click the OK button:
268 of 431
Right-click in the link table and select Add New Link:
Type ‘Valve’ in the Filter box and then select the (RA-LIB) Process 4.0 Valve object:
269 of 431
Configure the linked library as shown below and click the OK button:
270 of 431
Right-click in the link table and select Add New Link:
Type ‘Motor’ in the Filter box and then select the (RA-LIB) Process 4.0 Motor object:
271 of 431
Configure the linked library as shown below and click the OK button:
272 of 431
Right-click in the link table and select Add New Link:
Type ‘AIn’ in the Filter box and then select the (RA-LIB) Process 4.0 AIn object:
273 of 431
Configure the linked library as shown below and click the OK button:
274 of 431
Right-click in the link table and select Add New Link:
Type ‘AIn’ in the Filter box and then select the (RA-LIB) Process 4.0 AIn object:
275 of 431
Configure the linked library as shown below and click the OK button:
For this last link, we want to pass our object temperature parameters into the linked object. We configure these in the table
below.
276 of 431
Verify that the Temperature AIn is selected:
Within the Parameter browser, select the Temperature_EU Parameter and click the OK button:
Click the ellipsis button in the Parameters in the linked library cell:
277 of 431
Click the ellipsis button next to the Library Catalog Number:
278 of 431
In the FindPartial box, type ‘cfg’, then select the Cfg_EU Parameter and click the OK button:
279 of 431
Within the Parameter browser, select the Temperature_PVEUMax Parameter and click the OK button:
Click the ellipsis button in the Parameters in the linked library cell:
280 of 431
Click the ellipsis button next to the Library Catalog Number:
281 of 431
In the FindPartial box, type ‘cfg’, then select the Cfg_PVEUMax Parameter and click the OK button:
282 of 431
Within the Parameter browser, select the Temperature_FailHiLimit Parameter and click the OK button:
Click the ellipsis button in the Parameters in the linked library cell:
283 of 431
Click the ellipsis button next to the Library Catalog Number:
284 of 431
In the FindPartial box, type ‘cfg’, then select the Cfg_FailHiLimit Parameter and click the OK button:
We now have all of the required linked libraries. Now these linked libraries need to be populated in the Substitution tab.
285 of 431
In the Original box, type ‘XV100’ and then click the ellipsis button next to the Replacement cell:
Go to the Linked Libraries tab, select the Water_Valve, and click the OK button:
286 of 431
Continue adding substitutions in a similar manner until your table appears as follows:
287 of 431
Within the Library Objects pane, right-click the COP_Example library and select Publish Library:
Verify that the LOM Repository radio button is selected and click the OK button:
288 of 431
Change the Status to Pending – this will allow you to make a modification if required after testing and not be required to
increment the major or minor version number.
Type a Description of ‘Clean Out of Place System’, and click the Apply button:
Our new object is now available for instantiation, and, when it is instantiated, the user will be able to link to the appropriate
content.
289 of 431
Test Newly Created COP Linked Library Object
Double-click the Application Code Manager shortcut on the desktop of your image:
In the top ribbon menu, expand File, New, and select Project:
In the Object Configuration Wizard, expand Project, select the myAdd-On (RA-LIB) Process 4.0 project Solution, and click
the Next button:
290 of 431
Type ‘COP_Test_Project’ for the Name:
Click Next
Click the Auto Create button:
291 of 431
Go to the Controller Preview pane and expand Tasks, Task_D_500ms, and Task_D_MainProgram:
Let’s go ahead and add the Clean-Out-Place (COP) object to this task.
Within the Controller Preview pane, right-click Task_D_MainProgram and select Add New… :
292 of 431
In the Object Configuration Wizard, scroll down, expand the Examples category, select the COP object, and click the Next
button:
Maintain the default Parameters configuration and click the Next button:
293 of 431
We are again confronted with the task of linking to other objects, eight in this example. Let’s use the Auto Create button to once
again save some time in our project creation.
We are presented with a list of several valve objects, a motor object, and a couple of analog input objects that are required by
the COP object. If desired, we can now modify object names, as well as where the objects reside (i.e., within which task and
which program). For this example, we will maintain the default selections.
294 of 431
Verify that the linked objects are applied and click the Finish button:
Notice the new objects that have been added to our project with just a few mouse clicks:
295 of 431
Lab 14 – Creating an Object with External References
This lab will explain creating external references. External references expose object data to other objects.
For example, this can be used to create IO modules that have their points I/O data points accessible to
other objects.
Open myValve.ACD from the Lab Files. Following window will appear.
Right Click Controller myExample select Plug-Ins and click Library Designer…
296 of 431
Following window will be opened.
We will add each of the IO modules as object. For this Expand I/O Configuration → 1756 BackPlane.
Drag and drop the IB32 modules to Library. Following window will be displayed.
297 of 431
Catalog Number will be populated with the part number of the module. Library Type will be Module.
Solution will be Examples, Family will be 1756 and Category will be Digital modules. Name will be
prepopulated with the standard naming convention, but we can later it when desired. The module name
will be automatically put into the Substitution Name field
298 of 431
Once done click OK.
299 of 431
You can see that this automatically exposes the Slot, RPI and ChassisName. In SubObject it will ask to
define digital input and output tag format. For this module we are having 32 digital input. Enter 32 in Qty of DI
and 0 in Qty of DO since there are no digital outputs. Select Apply of DI. Address Format and ChFault
Format matches with current module, so we don’t need to change that. Other modules like safety modules
that use a different format will need to have these fields modified to match formats. Once done you will have
the below mentioned details.
300 of 431
We can see module is going to go by object name. We can change it if we want. In our exercise we will use
the object name.
301 of 431
If you want to change the name of module name, then click on Substitution. If we want to do any other
substitution, then we could. For this module there is no whole lot of substitute.
Double click on IB32 will take you to Substitution Builder. You can change the {ObjectName} in
Replacement, in case if you want to change the name of the module. In our exercise we will use the default
name. Click OK once done.
302 of 431
Click on External References. External reference are how other objects are going to access these
points.
Click on Linked Libraries. If we want to have these objects linked to other objects, we can have it here.
In our exercise we are not going to use. So, we will keep it blank.
Click on Functions. Below window be displayed. Predefined function will calculate what the slot number
and tag name should be.
303 of 431
That completes the configuration of standard 1756-IB32 module. So, using standard 1756-IB32 module ACM
library designer will automatically make the input points available.
Repeat the above step for 1756-OB32 module. Drag and drop 1756-OB32 module to Libraries. Following
window will be opened.
304 of 431
Fill the details as per the below mentioned image.
If we have standalone modules like a drive then we can delete {Fn_SlotPad} from the Instantiation
Name In our case this is inside chassis so we will keep as it is. Click OK once done. Below mentioned
window will be opened.
305 of 431
This module has input feedback to tell us what the state of the output is. So, we are going to give 32
inputs and 32 outputs and select Apply for both. Once done you will have values as per the below
mentioned window. Click OK.
306 of 431
Click on 1756-OB32.
307 of 431
Here you can see that channel fault tag is present for output also. This is not actually present in Logix
5000. So, we can delete this.
Once done we will have the below mentioned configuration. We have updated external references to
match the module.
308 of 431
Click on Functions. Function here calculate the RPI, and pad the slot and point numbers with a 0 if it is a
single digit to match tag formatting.
Double click on Fn_ChannelPad_DI. Below mentioned window will open. You can see that if channel
number <=9 then it will pad ‘0’ to left of the channel. If the channel is > 9 then it will keep the channel as
same. For example, channel ‘10’ will be kept as ‘10’ and 9 will be formatted as ‘09’.
309 of 431
Click OK once done.
310 of 431
Click on Parameters. We could add additional parameters to the object here if we wanted to. In our
exercise we are going to keep as it is.
Click Apply and OK. This complete the configuration of standard 1756-OB32 module. Now we need to
publish the same.
311 of 431
Following window will be opened.
312 of 431
You can verify all the details here. Upstream Keys and Downstream Keys are not required for in
chassis modules. We can change the Major Revision and Minor Revision if we wanted to. We have noi
reason to change it, so it as it is. Click Apply once done. Below pop-up will be displayed. Click Yes.
313 of 431
Below mentioned confirmation window will appear.
We can also publish both at one. Let’s publish both at the same time to see how this is done.
For Publishing the both library objects at the same time, you shift select the object and right click to select
Publish Library.
314 of 431
This will allow you to select and configure both objects separately. This will allow you to update library
objects to 1.1 Revision. Click on Apply. Below mentioned pop-up will be opened for confirmation.
315 of 431
Click Yes.
Below mentioned confirmatioon window will appear. Click OK. Thus we have publised both libraries.
316 of 431
Save and close myValve.ACD file.
The following window appears. This winodw will have a project open already, we will use the same for our exercise.
317 of 431
Expand Controllers → myCLX → I/O Configuration → Backplane. Existing project has of some of IO
modules added. We will add couple of modules more.
318 of 431
The following window will be opened.
Expand Digital. We need to add the modules that we have created under examples. select 1756-IB32/B
from examples. and click Next.
319 of 431
Check for the slot which is free. In our case we have slot 1 free. So, change the slot to ‘1’. This will
change the Name to Local_01. Click Finish once done.
320 of 431
Expand Digital. Select 1756-OB32 from examples. and click Next.
Change the slot to ‘2’. This will change the Name to Local_02 as mentioned in the below image. Click
Finish once done.
Now we have added two modules and that will be visible in Backplane of I/O Configuration.
321 of 431
Using the Libraries in project.
In Classic View expand Controllers→ myCLX. Right click on Valve and select Add New Instance.
322 of 431
Message will be displayed, If the name is invalid or already used. Since the name is already used, we will
change the same to XV200. We will also change the Task to ‘Task_E_1s’ and Program to
‘Task_E_MainProgram’ and also, we will configure the Input/Open limit switch to True. We can also
configure the Closed limit switch, if needed. In our project we are not going to use it. So, we will leave as
false. Once done it will have the parameter as mentioned in the below image.
323 of 431
Now we need to configure the input limit switch. Scroll down and move to 03 -IO Configuration. This
module doesn’t have fault. So, we will keep it as blank.
324 of 431
Below mentioned window will be opened.
First thing that we need to do is to get module selected as per the image below. Here we need to select
Local_01.
Once the module is selected, we need to assign the input. We can select any input from the module that
is free. Here we are selecting input 0. Final selection for the input will be as mentioned in the module.
Once done click Finish.
325 of 431
Now we need to assign channel fault. Click on the right side of Inp_OpenLS_Channel_Fault as
mentioned in the image below.
Assign the channel fault as per the below mentioned image. Once done click Finish.
Make the selection as per the image below and click Finish once done.
326 of 431
Now we need to assign channel fault. Click on the right side of Out_OpenLS_Channel_Fault as
mentioned in the image below.
Make the selection as per the image below. Click Finish once done.
Final IO Configuration will be as per the below mentioned image. Click Finish once done.
327 of 431
Highlight XV200. You will able to see appropriate formatting of address in IO Configuration.
328 of 431
Now we can go head and generated the ACD file. Right click on Controllers and select Generate
Controllers as per the image below.
Message as mentioned below will be display once successfully generated the file. Once done click Open
Folder.
329 of 431
Double click and open myCLX.ACD file and go to Task_E_1s and cross check the details. You will see
the below. Notice how all the I/O addresses have been properly filled into the instructions.
330 of 431
Lab 15 – How to add FTViewSE Content to an Existing Object
This section will cover how to add FTView content to an existing library object that contains Logix content in
ACM. You will create an FTView display leveraging global objects, address those objects using ACM
parameters, save then export the display. Once the display is exported, using the Library Object Manager
you will associate and publish the FTView objects to an existing ValveSO library object. To verify proper
configuration you will then test your newly added FTView configuration.
331 of 431
The first step is to create a display. We’ll use a global object to populate the display.
Expand the Global Objects folder and open the (RA-BAS) Process Graphics Library.
332 of 431
Hold down Ctrl key and left click with the mouse to select each of the four orientations for the valve.
Next do a Ctrl-C to copy all four selected valves.
Note: Right mouse click will only work for a single object. Ctrl-C must be used for multiple objects.
333 of 431
Use Ctrl-v to paste, or just right click and select paste.
The valve object in four different orientations should now be on your display.
NOTE: you may need to move the 4 values closer to the upper left of the display to look like below.
334 of 431
Right click on one of the objects and select Global Object Parameter Values.
This is the typical window for settings parameters for the process objects.
335 of 431
Type in the parameters for tag and path EXACTLY as shown and fill in parameter 5 with a value of 0,
Now, click and drag over all the cells in the Value column and type Ctrl-c. This will copy all the cells at once.
Click OK.
336 of 431
Open another object the same way and right click on the first cell and select paste.
337 of 431
From the top tool bar, select Objects > Drawing > Text. Left click and draw a text box above the objects.
338 of 431
This will populate a valve on a display with the name of the object as ACM will replace {ObjectName}.
Close the display and when prompted Save the display as (RA-LIB) ValveSO
339 of 431
Scroll down through the list of displays and confirm it is there.
Now we must export it, right click on Displays and select Import and Export.
340 of 431
Clear all, then select (RA-LIB) ValveSO. Click Next.
341 of 431
You should get a confirmation that the export was successful.
342 of 431
If it is not connected to the database, it will look like the below.
Right click on the Repositories and select Add Repository > ACM.
343 of 431
It should be successful. Click OK.
344 of 431
Expand the myAdd-On Examples library and select ValveSO.
345 of 431
This is our Logix object with which we want to add FTViewSE content.
Under Library Content right click on ValveSO and select Add Section > FT View
346 of 431
The Symbol Builder window appears.
Click on the ellipsis to browse to the desktop and select the file ValveSO file as shown below.
Click Open.
347 of 431
The four valve objects and the text box are added.
348 of 431
Click OK. The Properties window opens.
Note that the controller name and object name are automatically included.
349 of 431
Confirm the library status.
Click Apply.
350 of 431
Test updated ValveSO Object
Open ACM. We want to create a new project to test it.
Double-click the Application Code Manager shortcut on the desktop of your image:
In the top ribbon menu, expand File, New, and select Project:
In the Object Configuration Wizard, expand Project, select the myAdd-On (RA-LIB) ACM 2.00 project Solution, and click the
Next button:
351 of 431
Type ‘Test_ValveSO’ for the Name:
The myAdd-On (RA-LIB) ACM 2.00 library is a template project that contains a ControlLogix Controller, FTViewSE, and
FTHistorianSE, which will work well for this particular application.
352 of 431
For our test application let’s rename the ControlLogix Controller to “ValveSO”
Click Ok
In this example, the Auto Create button has saved us an enormous amount of time by creating all three linked objects with a
single button click.
353 of 431
Once the new project is created, go to the Controller Preview pane and select myTestCLX.
Configure the controller as shown below.
Go to the Controller Preview pane and expand Tasks, MainTask and MainProgram
354 of 431
Let’s go ahead and add the ValveSO object to the MainProgram
Within the Controller Preview pane, right-click MainProgram and select Add New… :
355 of 431
Name it V100. We won’t assign a display because we still need to create one.
Click Finish
356 of 431
Under Class View, click on V100 to verify our options.
Click on FTViewSE_Server under the HMI > Displays via the System View
357 of 431
Go to the Displays tab, right click in the open area and select Add New.
Click Finish.
358 of 431
Now assign a display to V100.
Select V100 in the Class View and click in the SEAssocDisplay field. Click on the ellipsis.
359 of 431
Let’s make at least 5 to show the arrangement.
I’m sure you have become familiar with the procedure, but we will give you a few screenshots as reminders.
Click Save.
360 of 431
The spreadsheet opens. (It may be minimized at the bottom of your screen.)
Use the select and drag lets create V101 – V104. Give them descriptions as shown below.
361 of 431
Click on the Import tab. (If you closed the Import Export manager window, right click on V100 and choose Import.)
Click on the ellipsis button, select our newly modified file and click Open.
362 of 431
There should not be any errors.
Click Next.
363 of 431
Click OK to the pending library message.
We could generate a controller ACD, etc., but let’s just create and verify the displays.
Right click on FTViewServer and select Generate Displays > All Displays.
364 of 431
We will just put them on the desktop this time. Click OK.
Click OK.
Goto FTViewSE studio, Template_Process.lib project and right-click on displays and select Import and Export.
365 of 431
Select Import and click Next.
366 of 431
Use the ellipse to browse to our file.
Select our newly generated batch import file and click Open.
367 of 431
Click Finish.
Open the ValveSO display. It should have each of our valves, with the four different orientations for each valve.
368 of 431
Right click on any of the valves, select Global Object Parameter Values. Confirm that the parameters are correct.
We don’t need to create an ACD since this lab focused on the FTViewSE
What have you done in this lab after adding the ViewSE content to the ValveSO object?
▪ Opened ACM and created a new project
▪ Added an instance of ValveSO titled V100
▪ Added a display to the project
▪ Added valve symbols to the display
▪ Leveraged Export, Excel and Import to create 5 instances of the valve
▪ Generated a display with valve symbols for each of the 5 valves
▪ Imported the display into a ViewSE project and confirmed that all global object paramters were correct
369 of 431
Lab 16 - How to add FactoryTalk Alarms and Events Content to an Existing Object
This Document will explain creating FactoryTalk® Alarm & Event Server (FTAE Server) by using Studio
5000® Application Code Manager (ACM).
First step to create FactoryTalk® Alarm & Event (FTAE) is open Library Object Manager.
Here we will add alarm & configuration to device and then it will be imported to FactoryTalk® View Site
Edition.
370 of 431
Next step is to select the device to which we want to configure an alarm, we will use the ValveSO shown
below.
In above window if we look at Library Content column there is no FTAE folder available, so we need to
add it manually.
371 of 431
After addition of FTAE area it will displayed in library content column as shown below.
In this section we will add an alarm (i.e. digital alarm). Right click and add a digital alarm as shown.
372 of 431
When you pressed ‘Add’ button (refer above image) following window will appear.
373 of 431
In the above pop up window displayed, we will add the alarm trigger tag for which we want to alarm. In
our case it is Alarm IO fault so we will select “Alm_IOFault” from available trigger tags.
374 of 431
In above window press OK following window will appear.
In the properties, under the name section default name i.e. “{ControllerName}
{ObjectName} Alm_IOFault” tag is available. Below the name include condition option available in which
default text is “Always” which can be modified by using browse button according to our requirement.
Following windows shows the default condition.
We can modify this “Always” option available simply by browsing button available at right corner. Once
you click browse option following window will appear. In this window we can write expression for alarms
by using functions like less than, greater than or equal to etc. Here we will keep Always condition as it is.
375 of 431
In the input tag filled “{AreaPath}{ObjectName}.Alm_IOFault” default tag is available keep as it is and
insert alarm message in message tab available.
Alarm group I.e. “{AG_Alm_IOFault}” will be automatically populated to the alarm group tab. All other
settings we can do as per our requirement like severity, alarm class, Associated tags etc.
376 of 431
“AG_Alm_IOFault” group is available under the FTAE configuration folder, this folder is created
automatically.
Now we will check the properties of “AG_Alm_IOFault”. Here library type, category and sub object are
defined as below.
Library.LibraryType='HMI' And Library.Category='FTAE' And SubObject.Type='AlarmGroups'
377 of 431
After checking properties click apply button, following window will appear.
378 of 431
Click apply button to update the object.
following window displaying all the changes made to object i.e. ValveSO.
379 of 431
Now close the Library Object Manager.
380 of 431
Next step we will add FTAE server to project by expanding HMI option available in the system view of the
project, under that Alarms option is there just right click to the alarms and add new FTAE server.
381 of 431
In the above window select Alarm & Event server and press the Next button, once you press next button
it will populate another window as below (next page).
We can modify server name under the name tab but in our case, we will keep default name i.e.
“FTAlarmEvent_Server” as it is.
382 of 431
Now we will click to the Alarm Group tab under which we will add the alarm group. Default it is blank just
right click in the window and choose to add new option.
383 of 431
After clicking Add New option alarm group will be inserted with default name. we can modify the alarm
group name according to our requirement.
384 of 431
In our case we will modify default name to “MyAalrmGroup” and pressed apply changes button.
Modified data will be available in below image.
385 of 431
Now press Finish button, in this way our FTAE server will be added to the project as mentioned in below
image.
386 of 431
Now we will click the class view of the project and expend the “MyCLX” controller below which different
tasks, programs, devices are available. We will expand valves option from list as earlier we have selected
valve object to generate the alarm.
387 of 431
As we have number of valves available under the valve tab, we will just select any one of them & will
check type of valve by catalogue number.
388 of 431
Above window displaying that catalogue number is not available for valve which we have configured i.e.
“ValveSO”, so we need add it manually. Let’s have a look in below mentioned window how we add
“ValveSO” object to our project. Right click to the controller and select add new option which will navigate
to object configuration wizard and we will select ‘ValveSo’ object available under valves section.
Click Next button following window will display in which we need to assign valve name, task & program
location & other data also.
389 of 431
Now we will fill valve name, task & program in the object configuration wizard window. For more details
use below screenshot.
390 of 431
Recently above we have inserted valve name, task & program now we will assign “DO” to particular valve
object as mentioned in below.
Here we have selected channel number 5 i.e. Local_05, After finalizing the channel number click finish
button following window will appears. DO_Address & DO_ChFault will be populated automatically.
391 of 431
Next step we will focus on FTAE configuration part i.e. we need to assign alarm group to
“MyValveSO” object. Now to associate alarm group we will click on browse button associated
with AG_Alm_IOFault option as mentioned below.
392 of 431
When you click associated button with “AG_Alm_IOFault” option following window will displayed in which
FTAE server is highlighted in blue color we also need to insert alarm group.
Click ‘Alarm_Group’ tab it will display default alarm group populated automatically or you can select alarm
group manually as per requirement.
393 of 431
After monitoring alarm group just click finish button following window will displayed.
In this way we have configured all the required data in the object configuration wizard if you find
everything is correct just click finish button.
Again, you can cross verify all the data by clicking “MyValveSo” object.
394 of 431
Let’s see how we can export the FTAE from our project. For achieving this we must use generate alarm
option and need to select our project. First expand Alarms & then right click to FTAE server name & then
select project name, in our case it is “myCLX”. Please go through below window.
395 of 431
Later once generation of alarm is done, we must save FTAE server database. Browse path for folder
where we have to save the database so click save button.
396 of 431
When FTAE alarm generation is complete you will receive alert regarding generation is complete with pop
up window, Press OK to finish the task.
Now we will open a folder where we have saved FTAE alarms, also we can open alarms available with
notepad to check whether alarms are generated or not.
397 of 431
Let’s open alarm file with notepad.
Now we will check alarm added by valve in notepad file as mentioned below.
398 of 431
Also, most important feature we can easily import alarm generated (FTAE) file to FTView SE project.
399 of 431
Lab 17 - How to add FTHistorian Content to an Existing Object
This section we will cover how to add FTHistorianSE content to an existing library object that contains Logix content in ACM.
You will add Historian configuration using the Library Object Manager to the ValveSO object from Lab 7. Once the configuration
is added you will publish the updated library object in ACM. To verify proper configuration you will then test your newly added
historian configuration.
Click on the ValveSO object. In the Library Content pane you can see that there is FTView content but no Historian content.
400 of 431
Right click on ValveSO and select Add Section > FT Historian.
401 of 431
The Tag browser window opens.
402 of 431
The Val_Sts tag is now created.
403 of 431
Add the object description (ellipsis, Predefined as earlier) and change the point type and typical value as shown.
404 of 431
This time select Val_Fault. Click OK.
405 of 431
Check the Historian Configuration Parameters. These were automatically generated.
Click Apply.
406 of 431
Confirm that the status is Pending. Click Apply.
407 of 431
Open ACM.
Just to make sure the libraries are current, right click on Registered Libraries and select Refresh.
408 of 431
Select ValveSO. Click Next.
409 of 431
Give it a name V200 and click Finish.
The FTHistorianSE Server has a parameters template and a listing of point types.
410 of 431
Click on the point type tab to see all the pre-configured point types.
Scroll to the right to see the remainder of the point definition columns.
411 of 431
Now click on V200 and then the ellipsis to select the correct tag for SC_Val_Sts.
Select the Point Type tab and correct tag, P_Valve_Val_Sts, and click Finish.
We now have the valve status definition for the historian completed.
412 of 431
Complete the configuration for the valve fault historian point.
The historian configuration is complete. Next we will generated the Historian Tags.
Right click on FTHistroianSE Server and select Generate Historian > All Controllers.
413 of 431
Save the csv file to the Desktop. Click Save.
414 of 431
Click OK to the notice.
415 of 431
Extra Credit Bonus Material
We have defined the historian points, but at present they have to be selected for each valve. For one valve
this is not an issue, but if we are creating 100 valves we will need a more automated process.
Go back to the LOM and select ValveSO. Then select the Historian Configuration -> SC_Val_Sts.
416 of 431
Paste the description into the Default Value.
Click Apply.
417 of 431
Click Apply again.
418 of 431
Back in ACM, let’s add a new instance to confirm that the historian points are added automatically.
Then select ValveSO, right click and select Add New Instance.
419 of 431
Lab 18 – Recreate Library Object from ACM to Edit
In this section you will “Reconstitute” a Library Object out of the ACM registered library database. This is useful in cases where
you need to edit the Library Object however you don’t have the original Logix Designer project that was used to create the object.
In our case we are going to reconstitute the “DIn” library object.
Expand the Process 3.5 library and select DIn. Right click on Din and select Reconstitute ACD.
420 of 431
The window opens. Click Next.
421 of 431
Expand the folders to see what will be generated.
Notice the content that will be reconstituted from the library such as tags, Add-On Instructions, Routines, etc.
Click Next, then navigate to the Logix folder on the desktop and click Save.
422 of 431
Either click on Din_1_3.ACD to open the project, or click on open folder and open the project from there.
423 of 431
Open Library Designer
All the parts needed for DIn are available back in Library Designer. We can now modify this object if desired.
With ACM 2.x and forward, we can pull the object back out of ACM with ease.
424 of 431
Close the Logix Designer.
425 of 431
Lab 19 –Adding attachments
Let’s add the COP.ACD file to the COP object so the ACD file can be used for reference later. We need to find the COP object.
For that expand myAdd-On (RA-LIB) Process 4.0(5) → DesignPattern → Specialty and select COP 1.0
In Library Content, Expand Attachments → COP Files. Name of the object, file name of the attachment and information
regarding the user who has attached the file will be displayed in the properties.
426 of 431
Right Click Attachment and select Add
The following window appears. Here we have a window showing the current attachements in the available library objects.
427 of 431
Click the ellipsis on the File field and select the COP.ACD file in the Lab Files folder
The file should show as follows..
Go ahead and add a Description and Revision Description information as you like and click OK.
428 of 431
Filter on COP.
Make sure the file is selected the file and press OK.
Click on Apply.
Below mentioned window will appears. Check the Minor Revision in 03 Library Details. You can see that Major Revision is 1 and
Minor Revision will be 1.
Add Revision Description under as “This revision added a second attachment” 02 Revision History.
429 of 431
Now you can see the second version of COP object in the folder mentioned in the below image.
430 of 431
Launch Application Code Manager.
As we have seen, it is easy to attache and retrieve file attachment with ACM objects!
431 of 431