<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ray King, Author at DMC, Inc.</title>
	<atom:link href="https://static.dmcinfo.com/blog/author/rayk/feed/index.xml" rel="self" type="application/rss+xml" />
	<link></link>
	<description></description>
	<lastBuildDate>Wed, 19 Aug 2026 20:03:29 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.2</generator>

<image>
	<url>https://static.dmcinfo.com/wp-content/uploads/2025/04/site-icon-150x150.png</url>
	<title>Ray King, Author at DMC, Inc.</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>How to Create a Configurable Routine Using Application Code Manager</title>
		<link>https://static.dmcinfo.com/blog/42127/how-to-create-a-configurable-routine-using-application-code-manager/</link>
		
		<dc:creator><![CDATA[Ray King]]></dc:creator>
		<pubDate>Tue, 17 Mar 2026 13:00:00 +0000</pubDate>
				<category><![CDATA[Allen Bradley PLC]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Rockwell Automation]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=42127</guid>

					<description><![CDATA[<p>This article will&#160;demonstrate how to&#160;build&#160;a library object for Application Code Manager&#160;(ACM).&#160;We will&#160;touch on&#160;instantiating&#160;AOIs&#160;using a library object&#160;in addition to&#160;adding&#160;optional&#160;logic to the code based on the&#160;object’s configuration.&#160;&#160; Utilizing ACM and configurable library objects&#160;allow you to&#160;streamline development&#160;by deterministically generating&#160;the code you need based on&#160;easy to&#160;modify&#160;configurations.&#160;This saves time, reduces mistakes, and&#160;enforces approved coding standards. While this blog illustrates&#160;the use [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/42127/how-to-create-a-configurable-routine-using-application-code-manager/">How to Create a Configurable Routine Using Application Code Manager</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">This article will&nbsp;demonstrate how to&nbsp;build&nbsp;a library object for Application Code Manager&nbsp;(ACM).&nbsp;We will&nbsp;touch on&nbsp;instantiating&nbsp;AOIs&nbsp;using a library object&nbsp;in addition to&nbsp;adding&nbsp;optional&nbsp;logic to the code based on the&nbsp;object’s configuration.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">Utilizing ACM and configurable library objects&nbsp;allow you to&nbsp;streamline development&nbsp;by deterministically generating&nbsp;the code you need based on&nbsp;easy to&nbsp;modify&nbsp;configurations.&nbsp;This saves time, reduces mistakes, and&nbsp;enforces approved coding standards. While this blog illustrates&nbsp;the use of a few specific AOIs,&nbsp;the concept can be extended to any objects in your development library.&nbsp;</p>



<h2 id="h-planning-the-routines-nbsp-and-programs" class="wp-block-heading">Planning the Routines&nbsp;and Programs</h2>



<p class="wp-block-paragraph">The first step is to&nbsp;define the routines&nbsp;and programs&nbsp;within the library&nbsp;to&nbsp;organize the&nbsp;logic&nbsp;being generated.&nbsp;For this example, the alarm logic is organized&nbsp;in routines&nbsp;within the&nbsp;MainLogic&nbsp;program, which is dedicated to alarms and other control logic such as sequences.&nbsp;The&nbsp;MainProgram&nbsp;is used to organize&nbsp;and generate AOIs for&nbsp;devices, such as transmitters, into related routines.&nbsp;Both program names are intended to be placeholders and will be&nbsp;modified&nbsp;via parameter substitution in ACM.&nbsp;</p>



<p class="wp-block-paragraph">In this example, Analog Objects are configured with&nbsp;LoLo,&nbsp;Lo,&nbsp;Hi, and&nbsp;HiHi&nbsp;status thresholds. The&nbsp;Lo&nbsp;and&nbsp;Hi&nbsp;thresholds generate alarms, while&nbsp;LoLo&nbsp;and&nbsp;HiHi&nbsp;generate shutdown conditions. Alarm handling is contained within a dedicated&nbsp;Alarm&nbsp;routine, and shutdown handling is contained within a dedicated&nbsp;Shutdown&nbsp;routine, as illustrated in the figure below.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="276" height="128" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-1.png" alt="ACM display" class="wp-image-42149"/></figure>



<p class="wp-block-paragraph">Next,&nbsp;we’ll&nbsp;need to define the&nbsp;routine&nbsp;for&nbsp;our devices.&nbsp;For demonstration purposes, this routine will house the AOIs for&nbsp;processing and scaling the input data&nbsp;from either in-chassis IO or from a Turck IO block.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="244" height="72" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-2.png" alt="ACM display" class="wp-image-42150"/></figure>



<p class="wp-block-paragraph">For this example,&nbsp;we will use&nbsp;the name&nbsp;“myRoutine”&nbsp;so that we can&nbsp;later&nbsp;modify&nbsp;it&nbsp;via&nbsp;parameter substitution in ACM.&nbsp;&nbsp;</p>



<h2 id="h-programming-nbsp-the-routines" class="wp-block-heading">Programming&nbsp;the Routines</h2>



<p class="wp-block-paragraph">We will create an&nbsp;analog input routine&nbsp;consisting&nbsp;of two AOIs, AOI_TurckAnalogInputProcessing&nbsp;and&nbsp;AOI_AnalogInput.&nbsp;&nbsp;</p>



<h3 id="h-analog-input-routine" class="wp-block-heading">Analog Input Routine</h3>



<p class="wp-block-paragraph">The Analog Input routine will be structured&nbsp;to be fully configurable&nbsp;and&nbsp;allow the use with Turck I/O or without. This will be handled with configurable ACM parameters that will be explained later in the article. </p>



<p class="wp-block-paragraph">The Turck Analog Input Processing AOI is intended to be used with a BLCEN-8M12LT-4AI-VI-4A-VI. This AOI will combine the two Bytes which make up the analog input raw value, which will then be passed into&nbsp;<strong>iInRaw</strong>&nbsp;tag of the AOI&nbsp;AOI_AnalogInput&nbsp;via configurable ACM parameters. If Turck I/O was not being&nbsp;used&nbsp;ACM will not generate the Turck logic and will insert the user’s preferred I/O tag into&nbsp;<strong>iInRaw</strong>&nbsp;of the&nbsp;AOI_AnalogInput&nbsp;AOI.&nbsp;</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="624" height="272" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-3.png" alt="ACM display" class="wp-image-42151" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-3.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-3-300x131.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<h3 id="h-alarms-routine-nbsp" class="wp-block-heading">Alarms Routine&nbsp;</h3>



<p class="wp-block-paragraph">The Alarms routine will be used to configure&nbsp;alarm&nbsp;logic automatically if the&nbsp;AnalogInput&nbsp;is configured to have the corresponding Alarm(s). What does this mean?&nbsp;We will only generate&nbsp;Hi or Lo alarm logic if the input is configured to use them in ACM.&nbsp;In this example, we will&nbsp;use simple alarm bits with a global reset.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="158" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-4.png" alt="ACM display" class="wp-image-42152" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-4.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-4-300x76.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p class="wp-block-paragraph">Notice that the naming convention “C0000_myAnalog” matches the generic name of the&nbsp;AOI_AnalogInput&nbsp;that was&nbsp;added&nbsp;in&nbsp;the Analog Input Routine. This is done so we can use the&nbsp;parameter&nbsp;substitution feature&nbsp;in ACM&nbsp;to replace this text&nbsp;when generating code.&nbsp;</p>



<h3 id="h-shutdowns-routine-nbsp" class="wp-block-heading">Shutdowns Routine&nbsp;</h3>



<p class="wp-block-paragraph">Similar to&nbsp;the Alarms routine,&nbsp;HiHi&nbsp;and LoLo shutdowns will be added to the Shutdowns routine if&nbsp;the analog input is configured to use them.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="224" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-5.png" alt="ACM display" class="wp-image-42154" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-5.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-5-300x108.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<h2 id="h-building-the-library-object-with-library-designer" class="wp-block-heading">Building the Library Object with Library Designer</h2>



<p class="wp-block-paragraph">From here,&nbsp;we’ll&nbsp;work within Rockwell’s Library&nbsp;Designer&nbsp;Plugin&nbsp;and configure the required&nbsp;text substitutions, parameters, and deterministic logic creation.&nbsp;</p>



<p class="wp-block-paragraph">Access the Library Designer plugin by right clicking the top of your controller organizer tree.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="468" height="174" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-6.png" alt="ACM display" class="wp-image-42155" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-6.png 468w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-6-300x112.png 300w" sizes="(max-width: 468px) 100vw, 468px" /></figure>



<p class="wp-block-paragraph">Once in Library Designer,&nbsp;navigate to “myRoutine” to get ready to apply conditional expressions that will handle logic creation.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="172" height="216" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-7.png" alt="ACM display" class="wp-image-42156"/></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="328" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-8.png" alt="ACM display" class="wp-image-42157" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-8.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-8-300x158.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p class="wp-block-paragraph">In Library&nbsp;Designer,&nbsp;you can&nbsp;set up&nbsp;instantiation rules per rung, per ladder branch,&nbsp;and&nbsp;even down to logic components like contacts and coiles. Here,&nbsp;we will be applying a rule for&nbsp;a&nbsp;rung&nbsp;containing&nbsp;the Turck AOI. Select the rung by&nbsp;clicking&nbsp;it. A green box will appear&nbsp;indicating&nbsp;that&nbsp;the&nbsp;rung has been selected.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="124" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-9.png" alt="ACM display" class="wp-image-42158" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-9.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-9-300x60.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p class="wp-block-paragraph">Update the condition to control the creation of the logic. By default,&nbsp;the library will have the field filled in with “Always.”</p>



<figure class="wp-block-image size-full"><img decoding="async" width="570" height="108" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-10.png" alt="ACM display" class="wp-image-42159" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-10.png 570w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-10-300x57.png 300w" sizes="(max-width: 570px) 100vw, 570px" /></figure>



<p class="wp-block-paragraph">This means that no matter what,&nbsp;this logic will always be created during the code generation process. For our&nbsp;example,&nbsp;we will&nbsp;only instantiate this logic&nbsp;if the configured IO&nbsp;is coming from a Turck IO device, which will be set using the parameter “<em>bTurckIO.</em>”&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="556" height="104" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-11.png" alt="ACM display" class="wp-image-42160" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-11.png 556w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-11-300x56.png 300w" sizes="(max-width: 556px) 100vw, 556px" /></figure>



<p class="wp-block-paragraph">This&nbsp;new&nbsp;parameter&nbsp;is&nbsp;added to the&nbsp;parameters section of our library object.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="104" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-12.png" alt="ACM display" class="wp-image-42161" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-12.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-12-300x50.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p class="wp-block-paragraph">With&nbsp;that&nbsp;rule&nbsp;configured,&nbsp;the Turck AOI will only be included if the&nbsp;device is configured as a Turck IO point,&nbsp;while the Analog Input AOI will always be included when we instantiate one.&nbsp;We will leave the condition set to “Always” for the&nbsp;AOI_AnalogInput&nbsp;so that it will always be added for every input we configure.&nbsp;</p>



<p class="wp-block-paragraph">Next, we will&nbsp;use&nbsp;the same concept&nbsp;for&nbsp;the Alarms and Shutdowns routines. Just like the Turck object,&nbsp;we&nbsp;will&nbsp;create&nbsp;parameters&nbsp;to define if&nbsp;an alarm&nbsp;should exist.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">In the Alarms routine, we&nbsp;will apply&nbsp;a conditional&nbsp;parameter&nbsp;for both the Hi and Lo alarm rungs.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="64" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-13.png" alt="ACM display" class="wp-image-42163" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-13.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-13-300x31.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="566" height="98" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-14.png" alt="ACM display" class="wp-image-42165" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-14.png 566w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-14-300x52.png 300w" sizes="(max-width: 566px) 100vw, 566px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="56" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-15.png" alt="ACM display" class="wp-image-42166" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-15.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-15-300x27.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="560" height="94" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-16.png" alt="ACM display" class="wp-image-42167" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-16.png 560w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-16-300x50.png 300w" sizes="(max-width: 560px) 100vw, 560px" /></figure>



<p class="wp-block-paragraph">We&nbsp;will apply&nbsp;the same concept to the&nbsp;Shutdowns routine as well.&nbsp;These&nbsp;parameters are shown below.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="112" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-17.png" alt="ACM display" class="wp-image-42168" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-17.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-17-300x54.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p class="wp-block-paragraph">To&nbsp;demonstrate&nbsp;an&nbsp;additional&nbsp;option,&nbsp;we&nbsp;will add&nbsp;a conditional statement on the Alarms and Shutdown routines themselves. Just like choosing to instantiate rungs and small&nbsp;pieces&nbsp;of&nbsp;logic,&nbsp;you can choose to&nbsp;optionally&nbsp;create&nbsp;routines as well. Here,&nbsp;if no alarms&nbsp;or shutdowns&nbsp;are enabled,&nbsp;we will not create&nbsp;the respective routine.&nbsp;</p>



<p class="wp-block-paragraph">For Alarms we will require&nbsp;the&nbsp;following&nbsp;ACM parameters&nbsp;<strong>bAlarmLEnable&nbsp;</strong>(Low&nbsp;Alarm Enabled)&nbsp;or&nbsp;<strong>bAlarmHEnable&nbsp;</strong>(High Alarm Enabled) to be true.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="138" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-18.png" alt="ACM display" class="wp-image-42169" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-18.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-18-300x66.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p class="wp-block-paragraph">For Shutdowns&nbsp;we will require the following ACM parameters&nbsp;<strong>bAlarmHHEnable&nbsp;</strong>(High&nbsp;High&nbsp;Alarm Enabled),&nbsp;<strong>bAlarmLLEnable&nbsp;</strong>(Low&nbsp;Low&nbsp;Alarm Enabled), or&nbsp;<strong>bAlarmOREnable</strong>&nbsp;(Out of Range Alarm Enabled)&nbsp;to be true.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="76" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-19.png" alt="ACM display" class="wp-image-42170" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-19.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-19-300x37.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p class="wp-block-paragraph">From here, we can jump to the Application Code Manager and see how we can enter values into the parameters to affect what is created with the logic during code generation.&nbsp;</p>



<h2 id="h-application-code-manager-code-generation" class="wp-block-heading">Application Code Manager Code Generation</h2>



<p class="wp-block-paragraph">To&nbsp;continue with our demonstration, let’s&nbsp;add&nbsp;an Analog Input instance within ACM.&nbsp;For the first instance,&nbsp;we’ll&nbsp;configure it to&nbsp;require the Turck I/O without any alarms.&nbsp;To do&nbsp;so,&nbsp;we’ll&nbsp;need to concentrate on the following fields.&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Name</strong>&nbsp;–&nbsp;This field specifies the device name and is used to generate the corresponding PLC tag name.&nbsp;</li>



<li><strong>sRoutineName</strong>&nbsp;– This field defines and creates the routine that&nbsp;the device will be instantiated in.&nbsp;</li>



<li><strong>b</strong><strong>TurkIO</strong>&nbsp;– This field is used to enable&nbsp;or disable&nbsp;the creation of Turck IO logic.&nbsp;&nbsp;</li>



<li><strong>AI_ADDRESS –&nbsp;</strong>This field is used&nbsp;to assign&nbsp;the I/O tag to the&nbsp;AnalogInput&nbsp;AOI. In this example we&nbsp;use “TIT_100.iInRaw” so that&nbsp;it&nbsp;can&nbsp;be referenced by the Turck AOI output.&nbsp;</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="456" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-20.png" alt="ACM display" class="wp-image-42171" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-20.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-20-300x219.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p class="wp-block-paragraph">Next,&nbsp;we’ll&nbsp;create an&nbsp;Analog Input&nbsp;instance that does not use&nbsp;Turck IO but&nbsp;has&nbsp;all&nbsp;its&nbsp;alarms enabled.&nbsp;For now,&nbsp;I will put a placeholder into the&nbsp;AI_Address&nbsp;that can be configured later once I/O is&nbsp;configured in&nbsp;the project.&nbsp;&nbsp;Additional&nbsp;fields&nbsp;for alarm configuration&nbsp;will be used&nbsp;in this example.&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li><strong>bAlarmHHEnable</strong>&nbsp;–&nbsp;This field specifies&nbsp;if&nbsp;the High&nbsp;High&nbsp;alarm is enabled or disabled for the&nbsp;device.&nbsp;</li>



<li><strong>bAlarmH</strong><strong>Enable</strong>&nbsp;–&nbsp;This field specifies if the&nbsp;High&nbsp;alarm is enabled or disabled for the device.&nbsp;</li>



<li><strong>bAlarmLEnable</strong>&nbsp;–&nbsp;This field specifies if the&nbsp;Low&nbsp;alarm is enabled or disabled for the device.&nbsp;</li>



<li><strong>bAlarmLLEnable</strong>&nbsp;–&nbsp;This field specifies if the&nbsp;Low&nbsp;Low&nbsp;alarm is enabled or disabled for the device.&nbsp;</li>



<li><strong>bAlarmOREnable</strong>&nbsp;–&nbsp;This field specifies if the&nbsp;Out of Range&nbsp;alarm is enabled or disabled for the device.&nbsp;</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="456" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-21.png" alt="ACM display" class="wp-image-42172" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-21.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-21-300x219.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p class="wp-block-paragraph">Now&nbsp;we’re&nbsp;ready to use ACM to&nbsp;generate our code.&nbsp;To do so,&nbsp;right click on the controller in ACM and click&nbsp;<strong>Generate Controller</strong>.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="610" height="780" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-22.png" alt="ACM display" class="wp-image-42173" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-22.png 610w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-22-235x300.png 235w" sizes="(max-width: 610px) 100vw, 610px" /></figure>



<p class="wp-block-paragraph">When the pop‑up dialog box appears, select&nbsp;<strong>Create ACD</strong>, enter the desired file name, select whether to overwrite the existing ACD file, and define the file path.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="780" height="240" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-23.png" alt="ACM display" class="wp-image-42174" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-23.png 780w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-23-300x92.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-23-768x236.png 768w" sizes="(max-width: 780px) 100vw, 780px" /></figure>



<p class="wp-block-paragraph">After you generate the .ACD file from&nbsp;ACM&nbsp;you will see that the following routines and programs have been created.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="320" height="128" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-24.png" alt="ACM display" class="wp-image-42175" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-24.png 320w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-24-300x120.png 300w" sizes="(max-width: 320px) 100vw, 320px" /></figure>



<p class="wp-block-paragraph">If we&nbsp;open&nbsp;the&nbsp;AnalogInputs&nbsp;routine, we will now see&nbsp;the two instances, TIT_100 and PIT_100 that were&nbsp;configured&nbsp;in ACM.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="324" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-25.png" alt="ACM display" class="wp-image-42176" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-25.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-25-300x156.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p class="wp-block-paragraph">You’ll&nbsp;see that&nbsp;the Turck Interface created&nbsp;only for the TIT_100 object&nbsp;based on the parameters we set.&nbsp;Note that&nbsp;PIT_100&nbsp;was instantiated without the Turck AOI&nbsp;based on its parameterization.&nbsp;</p>



<p class="wp-block-paragraph">Now,&nbsp;let’s look at the newly generated&nbsp;Alarms and Shutdowns routines.&nbsp;In this example,&nbsp;alarms were&nbsp;only&nbsp;created for PIT_100&nbsp;as TIT_100 was not configured to use them.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="164" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-26.png" alt="ACM display" class="wp-image-42177" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-26.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-26-300x79.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="244" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-27.png" alt="ACM display" class="wp-image-42178" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-27.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/03/ACM-image-27-300x117.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<h2 id="h-conclusion" class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">While this demonstration was simple in nature, it illustrates the benefits that can be derived by creating&nbsp;your own library objects and&nbsp;utilizing&nbsp;ACM to autogenerate&nbsp;a significant portion&nbsp;of your PLC logic.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">These concepts can be extended to create much more advanced programs and routines based on configurable parameters.&nbsp;For&nbsp;very large&nbsp;projects, or&nbsp;for OEMs with&nbsp;very similar&nbsp;systems, this can significantly streamline the development process.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">Here at DMC, we&nbsp;leverage&nbsp;ACM&nbsp;as a&nbsp;powerful&nbsp;tool&nbsp;to accelerate development timelines, improve code standardization, and&nbsp;quickly&nbsp;modify&nbsp;projects to account for changing requirements.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">For more information on&nbsp;Application Code Manager, read our&nbsp;other articles:&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li><a href="https://static.dmcinfo.com/blog/17355/streamline-rockwells-application-code-manager-with-excel/">Streamline Rockwell’s Application Code Manager with Excel</a>&nbsp;</li>



<li><a href="https://static.dmcinfo.com/blog/20684/importing-and-customizing-a-library-with-application-code-manager/">Importing and Customizing a Library with Application Code Manager</a></li>



<li><a href="https://static.dmcinfo.com/blog/17035/how-to-use-application-code-manager-acm-with-plantpax-distributed-control-system-dcs/">How to Use Application Code Manager (ACM) with PlantPAx Distributed Control System (DCS)</a></li>
</ul>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step"><strong>Accelerate your controls projects with scalable, reusable code solutions from DMC.</strong></h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">See how DMC uses ACM to streamline operations and standardize code for your <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" id="420">Manufacturing Automation</a> project. Learn more about our <a href="https://static.dmcinfo.com/our-work/category/service/manufacturing-automation-and-intelligence/allen-bradley-plc/" data-type="work_category" data-id="689">Allen Bradley PLC</a> expertise.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://static.dmcinfo.com/blog/42127/how-to-create-a-configurable-routine-using-application-code-manager/">How to Create a Configurable Routine Using Application Code Manager</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Streamline Rockwell’s Application Code Manager with Excel</title>
		<link>https://static.dmcinfo.com/blog/17355/streamline-rockwells-application-code-manager-with-excel/</link>
		
		<dc:creator><![CDATA[Ray King]]></dc:creator>
		<pubDate>Tue, 01 Aug 2023 20:25:45 +0000</pubDate>
				<category><![CDATA[Allen Bradley PLC]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/17355/streamline-rockwells-application-code-manager-with-excel/</guid>

					<description><![CDATA[<p>Rockwell&#8217;s Application Code Manager (ACM for short) is well known throughout the controls industry. ACM aids in bulk loading PLC object instances for many types of projects ranging from small repeatable process skid projects to DCS applications. At first glance, using ACM can seem daunting or tedious when adding one object at a time to [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/17355/streamline-rockwells-application-code-manager-with-excel/">Streamline Rockwell’s Application Code Manager with Excel</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Rockwell&rsquo;s Application Code Manager (ACM for short) is well known throughout the controls industry. ACM aids in bulk loading PLC object instances for many types of projects ranging from small repeatable process skid projects to DCS applications.</p>

<p class="wp-block-paragraph">At first glance, using ACM can seem daunting or tedious when adding one object at a time to build your database, but I&rsquo;m here to present you with a way to quickly import/export multiple object instances at once using Excel.</p>

<p class="wp-block-paragraph">With most projects, the customer or integrator will provide an I/O list containing names, descriptions, alarm setpoints, and more.&nbsp;This list has a lot of key information that is usually entered manually in Studio 5000 or via the HMI. This can take a lot of&nbsp;time and&nbsp;introduce typos and mistakes.&nbsp;</p>

<p class="wp-block-paragraph">ACM takes this data and enters all of it into .l5x and .ACD files, allowing one to begin programming actual logic quickly.&nbsp;The steps below will instruct you how to streamline your object instantiation and start actual logic programming.</p>

<h2 class="wp-block-heading">The Process</h2>

<p class="wp-block-paragraph">Once you have the initial project created with your controller, rack, and I/O, you can start assigning instances.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/assigning-instances-in-rockwell-application-code-manager-1_1.png"  /></figure>

<p class="wp-block-paragraph">To help&nbsp;move things along,&nbsp;add one instance of every object that you will&nbsp;use&nbsp;for the project.&nbsp;This builds the necessary examples and tabs in the ACM Excel file.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/inserting-object-instances-in-rockwell-application-code-manager-2.png"  /></figure>

<p class="wp-block-paragraph">Once your object first instances have been inserted in the project, right click the controller, and select the Export option.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/rockwell-application-code-manager-export-instance-3.png"  /></figure>

<p class="wp-block-paragraph">Select the complete project radio button, and then click Export and Open button.&nbsp;</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/rockwell-application-code-manager-complete-project-4.png"  /></figure>

<p class="wp-block-paragraph">After a few moments, a Windows save dialog will open and ask you to save the export into a location of your choosing.&nbsp;Click Save and proceed.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/windows-save-dialog-5.png"  /></figure>

<p class="wp-block-paragraph">Once finished, an ACM Excel file will open, ready to be modified with the rest of your object instances.</p>

<p class="wp-block-paragraph">Please note that some of these example objects have many columns of data that can be configured, but I will be focusing on the main data inputs that are usually necessary for every type of project.&nbsp;The example below will go through analog inputs.&nbsp;This process can be used for all object types and instances.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/rockwell-application-code-manager-data-inputs-in-excel-6.png"  /></figure>

<p class="wp-block-paragraph"><strong>Legend &#8211;</strong></p>

<ul class="wp-block-list">
 <li>Name &ndash; Tag name of the object instance that will be imported into the Studio5000 program.</li>
 <li>Task and Program &ndash; Studio5000 task and program that the object will be inserted into.</li>
 <li>Description &ndash; Object description that will be used for HMI display, alarm messages, and anything else description related.</li>
 <li>P_Cfg_PVEUMax &ndash; The maximum engineering value.</li>
 <li>P_Cfg_PVEUMin &ndash; The minimum engineering value.</li>
 <li>P_Cfg_PVEU &ndash; Engineering units for the instrument.</li>
 <li>P_Cfg_InpRawMax &ndash; the maximum raw input scale, in this case 20mA.&nbsp;This depends on how the input/output card has been configured.</li>
 <li>P_Cfg_InRawMin &ndash; the minimum raw input scale, in this case 4mA.&nbsp;This depends on how the input/output card has been configured.</li>
 <li>P_Cfg_HiHiLim &ndash; High High alarm limit.</li>
 <li>P_Cfg_HiLim &ndash; High alarm limit.</li>
 <li>P_Cfg_LoLim &ndash; Low alarm limit.</li>
 <li>P_Cfg_LoLoLim &ndash; Low Low alarm limit.</li>
 <li>P_Inp_PV_Address &ndash; I/O Assignment.&nbsp;This is the tag for the actual input/output card and channel number.&nbsp;There will be no need to map I/O in Studio5000 after ACM creates the .acd file.</li>
</ul>

<p class="wp-block-paragraph">With your I/O list, you can now simply copy and paste the information into the ACM format.&nbsp;This can include alarm setpoints, descriptions, instance names, engineering units, raw units, and anything else that needs and can be configured ahead of time.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/rockwell-application-code-manager-final-excel-spreadsheet-7_1.png"  /></figure>

<p class="wp-block-paragraph">Once you have filled out the Excel sheet, you can import the sheet back into ACM.&nbsp;Right click the controller in the class view and select Import.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/rockwell-application-code-manager-import-8.png"  /></figure>

<p class="wp-block-paragraph">Select Replace &ndash; Overwrite project, navigate to the Excel file you have just updated, and click Import.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/rockwell-application-code-manager-replace-overwrite-project-9.png"  /></figure>

<p class="wp-block-paragraph">After the import finishes, you can expand the object class and see the newly imported object instances.&nbsp;At this point you are ready to generate the initial .ACD file from ACM.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/rockwell-application-code-manager-class-view-10.png"  /></figure>

<p class="wp-block-paragraph">Now, right click on the controller and select Generate Controller.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/rockwell-application-code-manager-generate-controller-11.png"  /></figure>

<p class="wp-block-paragraph">A popup will appear.&nbsp;Select where you would like to save the .l5x and .ACD files, then click Generate.</p>

<figure class="wp-block-image"><img decoding="async" alt="A screenshot of a computerDescription automatically generated" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/ACM-Power-User-12.png"  /></figure>

<p class="wp-block-paragraph">Once the generation finishes, you will have a Studio5000 program file that already has all instances created along with their tags.&nbsp;At this point, all that is left is to do is project specific programming like sequences, shutdowns, and anything else required.&nbsp;</p>

<p class="wp-block-paragraph">As you can see, using Excel with ACM can quickly streamline projects of any size and help integrators complete projects in record time.</p>

<p class="wp-block-paragraph"><strong>Learn more about DMC&apos;s <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/allen-bradley-plc-programming">Rockwell Automation </a>partnership and <a href="https://static.dmcinfo.com/contact">contact us</a> today for your next project!</strong></p>
<p>The post <a href="https://static.dmcinfo.com/blog/17355/streamline-rockwells-application-code-manager-with-excel/">Streamline Rockwell’s Application Code Manager with Excel</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
