# ControlLogix MSG (Class 3) Utilization Swings Widely, Why?

**URL:** <https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910>\
**Category:** Ignition\
**Created:** [March 6, 2024, 4:46pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910 "2024-03-06T16:46:01Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![Josh\_Connell](https://avatars.discourse-cdn.com/v4/letter/j/a87d85/32.png) [@Josh\_Connell](https://forum.inductiveautomation.com/u/Josh_Connell)\
**Post date:** [March 6, 2024, 8:15pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/21 "2024-03-06T20:15:43Z")

</div>

I did try and it is better. Class 3 utilization ranges from 15 to 57% with 1 concurrent connection. Request count is slightly lower.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/0/3/03537302ada6cd986e4c88555aedee8cac3b1839.png)

---

<div class="post-metadata">

**Author:** ![tricky](https://avatars.discourse-cdn.com/v4/letter/t/d6d6ee/32.png) [@tricky](https://forum.inductiveautomation.com/u/tricky)\
**Post date:** [November 13, 2025, 4:17pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/22 "2025-11-13T16:17:30Z")

</div>

I have been combing through the forum on this particular problem but have not been able to resolve my issue. I have a Rockwell Processor (L81ES) that is reporting via its web page diagnostics, a MSG (Class3) utilization bouncing between 38% and 99%. On the PLC end of things, I have one UDT that is communicating to the Ignition server. This parent UDT has 13 other UDT's, 5 BOOL's, 5 DINT's and 5 REAL's configured. The 13 child UDT's will have  
combination of other BOOL's, DINT's, REAL's and UDT's. The number of nested UDT's doesn't go beyond six levels. And it isn't at every UDT. The six level just represents the worst case.

On the Ignition side, I have one device configured to communicate to the PLC. I have played around with Max Concurrent Requests...going from 2 to 5. I have also played with the CIP Connection Size from 500 to 4000. Neither seemed to have an effect on the MSG utilization.  
Below is how I have the Tag Groups configured with the number of tags associated with each tag group.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/c/3/c3e8d381e8384e53485b0e577e11d73612e9c3be.png)

Originally, all the groups were set to Subscribed for the Data Mode and I was pegged at a constant 93% on the MSG utilization. When I change the Poll Mode to the above, this is when I would see a jumping around of between 38% and 99%.

I disable the Device connections, the MSG utilization drops to a respectable 16%. I have disabled the first level UDT’s starting with the last and working up the list of nested UDT’s. It took about half of the first level UDT’s to be disabled before I noticed a significant change in the MSG utilization would drop to a max of 68%. Now granted, the lower half of first level UDT’s (when looking at the Tag Browser) amount to about a third of the total tags. I would think the number of tags left and the scan rate could be handled easily with an L8x processor.

I had a few UDT’s on the PLC side going directly to to/from an AOI. I disabled the rungs with calls to that AOI, but again, not much of a change to the MSG utilization. When you look at the Device connection, this is what I see.

 ![A screenshot of a computer AI-generated content may be incorrect.](https://us1.discourse-cdn.com/inductiveautomation/original/3X/a/a/aa81e04bb870e9b403c06db2d70cf019e2cf2793.jpeg)

Any suggestions on what I can do? This application is being used for an HMI to a servo system, so I really don’t want to change the scan rate of the Tag Groups I have. Will creating a couple of different device connections going to the same PLC help? I have looked at the forum topic called  
“Ignition & Logix Best Practice Tips for better communications”, but what I have tried really hasn’t helped much.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [November 13, 2025, 4:36pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/23 "2025-11-13T16:36:40Z")

</div>

Are you pointing at any members of AOI tags? Or include AOI data structures within your UDTs?

If so, try my alternate driver. Also make sure that all members (params, local tags) of the AOIs have at least ReadOnly external access.

Do you include any I/O data types within your UDTs?

If so, don't do that, as it scrambles optimization for the entire UDT. If you can avoid accessing any such I/O data at all, do that. If you must have it, consider making a UDT with the same structure as the IO type, and using CPS to copy live data to the optimizable type.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [November 13, 2025, 4:40pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/24 "2025-11-13T16:40:31Z")

</div>

I’d keep your tag groups in Subscribe mode. Polled mode doesn’t change the performance and has a big downside in that it’s not counted in the device diagnostics.

---

<div class="post-metadata">

**Author:** ![tricky](https://avatars.discourse-cdn.com/v4/letter/t/d6d6ee/32.png) [@tricky](https://forum.inductiveautomation.com/u/tricky)\
**Post date:** [November 13, 2025, 6:29pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/25 "2025-11-13T18:29:03Z")

</div>

As an update to your questions

_Are you pointing at any members of AOI tags? Or include AOI data structures within your UDTs?_

This is a snippet for the PLC program. The top level parent UDT is the UST called HMI. All communications between the Ignition project and the PLC go through this UST.

 ![A screenshot of a computer AI-generated content may be incorrect.](https://us1.discourse-cdn.com/inductiveautomation/original/3X/d/4/d4b9d94e638ee870b03809be44ca2a792e3f938b.jpeg)

_Do you include any I/O data types within your UDTs?_

This is a snippet from the controller tags. The other UDT’s are very similar to this.

 ![A screenshot of a computer AI-generated content may be incorrect.](https://us1.discourse-cdn.com/inductiveautomation/original/3X/6/7/6793ea3f20134a6aad5291ee3925c9bd436ea717.jpeg)

---

<div class="post-metadata">

**Author:** ![tricky](https://avatars.discourse-cdn.com/v4/letter/t/d6d6ee/32.png) [@tricky](https://forum.inductiveautomation.com/u/tricky)\
**Post date:** [November 13, 2025, 6:31pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/26 "2025-11-13T18:31:32Z")

</div>

I had the worst MSG initialization percentage when all the tag groups were set to subscribed. It was only when I changed them to poll mode I got better MSG percentage values. They bounce around like I said, but under subscribe mode, it was a constant 94%.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [November 13, 2025, 6:36pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/27 "2025-11-13T18:36:01Z")

</div>

> [@tricky](#):
>
> All communications between the Ignition project and the PLC go through this UST.

Yeah, you are pointing IA's driver at a huge AOI. Performance will suck.

Looks like part of PlantPax. If PlantPax v5, then performance will suck using anyone's driver, as those objects are unfixably unoptimizable. (Even Rockwell's proprietary methods will choke on this.)

If PlantPax v4, and you have access to the source (unsealed AOIs), then you may be able to fix this to be optimizable with my driver (won't help the native driver). PlantPax commonly includes I/O data types directly in AOIs--you would have to re-engineer those, too.

In your review of the Best Practice topics, did you not notice the warnings about PlantPax?

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [November 13, 2025, 7:37pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/28 "2025-11-13T19:37:29Z")

</div>

Probably because Polled mode tag groups are scheduled fixed delay, not fixed rate, and your poll is taking significantly longer to complete than the tag group rate, meaning you were getting a "break" between polls of whatever the group rate was, as opposed to constantly polling because you're constantly behind.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [November 13, 2025, 7:43pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/29 "2025-11-13T19:43:53Z")

</div>

> [@Kevin.Herron](#):
>
> Polled mode tag groups are scheduled fixed delay, not fixed rate

TIL. Thanks.

---

<div class="post-metadata">

**Author:** ![tricky](https://avatars.discourse-cdn.com/v4/letter/t/d6d6ee/32.png) [@tricky](https://forum.inductiveautomation.com/u/tricky)\
**Post date:** [November 14, 2025, 11:36am UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/30 "2025-11-14T11:36:24Z")

</div>

yes, I did see that about the AOI’s. For that reason, I disabled all the AOI’s temporarily by putting a xic instruction ahead of the AOI command that is not active so it prevents the AOI command’s from happening. So the issue with the AOI’s is not relevant because they are disabled.

---

<div class="post-metadata">

**Author:** ![tricky](https://avatars.discourse-cdn.com/v4/letter/t/d6d6ee/32.png) [@tricky](https://forum.inductiveautomation.com/u/tricky)\
**Post date:** [November 14, 2025, 11:44am UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/31 "2025-11-14T11:44:26Z")

</div>

Ok, so when I put the TAg Groups back to subscribe, the MSG utilization goes to a constant 93%. This goes back to my original question, how do I reduce this? With the number of tags shown in the tag groups I mentioned earlier, I would not think this would be an issue with using L81 processor as well. Do you agree? Do I need to configure a couple of more devices and split the tags for each tag group to use a different device?

I tried a test where I disabled top level parent UDT and imported the tags from the PLC. The test was to determine if the nested UDT’s were causing or adding to the issue versus just a direct import of the atomic tags from the PLC. I didn’t see much of a change doing this test of the MSG utilization percentage.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [November 14, 2025, 11:55am UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/32 "2025-11-14T11:55:43Z")

</div>

> [@tricky](#):
>
> how do I reduce this? With the number of tags shown in the tag groups I mentioned earlier, I would not think this would be an issue with using L81 processor as well. Do you agree? Do I need to configure a couple of more devices and split the tags for each tag group to use a different device?

Let's see the diagnostics page when you're back in subscribe mode with the full load being tracked.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [November 14, 2025, 12:08pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/33 "2025-11-14T12:08:39Z")

</div>

Another useful thing would be to turn the logger for `drivers.LogixDriver.Requests.ReadStructuredTagsRequest` to DEBUG and then edit/save the device connection.

Look for "Privilege violation reading struct '%s'; re-optimizing." messages... if you see these then you're subscribed to tags in UDTs or AOIs with inaccessible members, which means you have to read all the tags individually, which is will place a higher load on the PLC.

> **[Diagnostics - Logs | Ignition User Manual](https://docs.inductiveautomation.com/docs/8.1/platform/gateway/status/diagnostics-logs#changing-logging-levels)**
>
> One of the most important troubleshooting tools of the Gateway Webpage is the Logs page. This console shows errors caused by Gateway events including things like Database or Device connections, Authentication profiles, Alarm Journals and Pipelines,...

---

<div class="post-metadata">

**Author:** ![robertm](https://avatars.discourse-cdn.com/v4/letter/r/ea5d25/32.png) [@robertm](https://forum.inductiveautomation.com/u/robertm)\
**Post date:** [November 14, 2025, 1:08pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/34 "2025-11-14T13:08:13Z")

</div>

Not following this logic. Disabling the AOI instruction in logic would have no bearing on the Ignition driver still polling the data and choking on the AOI data structure.

---

<div class="post-metadata">

**Author:** ![lrose](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/lrose/32/62724_2.png) [@lrose](https://forum.inductiveautomation.com/u/lrose)\
**Post date:** [November 14, 2025, 1:15pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/35 "2025-11-14T13:15:32Z")

</div>

> [@tricky](#):
>
> AOI’s is not relevant because they are disabled.

Your assumption here is just wrong. The issue with the AOI's is not that the controller is scanning them. It is that they include members which can not be read externally. This forces the driver to have to read the tags in an unoptomized way. If ignition is still attempting to poll the AOI tags, you will still have this issue.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [November 14, 2025, 1:45pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/36 "2025-11-14T13:45:15Z")

</div>

> [@tricky](#):
>
> So the issue with the AOI’s is not relevant because they are disabled.

It isn't the execution of the AOI that is the problem, it is simply **accessing** data in an AOI structure that is the problem.

---

<div class="post-metadata">

**Author:** ![tricky](https://avatars.discourse-cdn.com/v4/letter/t/d6d6ee/32.png) [@tricky](https://forum.inductiveautomation.com/u/tricky)\
**Post date:** [November 14, 2025, 1:59pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/37 "2025-11-14T13:59:05Z")

</div>

If the AOI is not acted on, then isn’t the UDT tags used in the AOI just UDT tags that are not changing…basically? I understand the AOI has a tag structure it requires, but isn’t the structure just a series of nested UDT’s?

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [November 14, 2025, 2:03pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/38 "2025-11-14T14:03:11Z")

</div>

No. AOI structures are substantially more complicated than simple UDTs, and Rockwell's Data Access manual explicitly tells users to not access them. IA avoids reverse engineering, and basically follows the Rockwell guidance.

I am perfectly happy to go beyond Rockwell's guidance in my own driver.

The other factor is external access to UDT and AOI members. If **any** member's external access is "None", the entire structure cannot be optimized. This applies to both my driver and IA's driver. AOIs often have such members, and if sealed, cannot be fixed. PlantPax5 built-in instructions have this problem, along with a few Function Block instructions and message instructions and IO data types.

---

<div class="post-metadata">

**Author:** ![robertm](https://avatars.discourse-cdn.com/v4/letter/r/ea5d25/32.png) [@robertm](https://forum.inductiveautomation.com/u/robertm)\
**Post date:** [November 14, 2025, 4:18pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/39 "2025-11-14T16:18:23Z")

</div>

As has been stated here multiple times, in the best practices thread, and multiple other posts, you’re not going to find a magic bullet to make your AOI tag structures more efficient. Either accept the performance hit or get busy restructuring them to one of the more accepted practices.

---

<div class="post-metadata">

**Author:** ![tricky](https://avatars.discourse-cdn.com/v4/letter/t/d6d6ee/32.png) [@tricky](https://forum.inductiveautomation.com/u/tricky)\
**Post date:** [November 14, 2025, 4:50pm UTC](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910/40 "2025-11-14T16:50:32Z")

</div>

I did test today. I collected the information you want with the AOI instructions still in the PLC but disabled and below is the information you wanted. I then removed all the AOI calls and disabled the UDT’s in Ignition that were getting the AOI tag data. This helped a little. It improved things on the Ignition side, but I am still getting MSG utilization percentages bouncing between 77% and 93%. The charts below are after I removed the effects of the AOI commands.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/c/3/c3d657639d8258905e4121c0bda2c2ff447a8010.png)

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/e/c/ec256926d42fc09c464ed358b104b4046662b59c.png)

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/5/4/549e40ebad4cfe15141670ff058ebf9471d609d7.png)

Results after removing AOI’s and disabling UDT for the AOI’s

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/a/8/a8c823f2f446a990bc1055186209f2f9ce4c8b51.png)

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/2/6/26083309d918afdeda3d61309e7e7c23576d3534.png)

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/b/8/b8b1bba352903e08faae787a37fabc74875f5e15.png)

[Previous page](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910.md?page=1)

[Next page](https://forum.inductiveautomation.com/t/controllogix-msg-class-3-utilization-swings-widely-why/86910.md?page=3)
