# Allen-Bradley PLC upgrade

**URL:** <https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764>\
**Category:** Ignition\
**Created:** [January 29, 2021, 8:17pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764 "2021-01-29T20:17:20Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Dan\_Bridgeman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dan_bridgeman/32/3610_2.png) [@Dan\_Bridgeman](https://forum.inductiveautomation.com/u/Dan_Bridgeman)\
**Post date:** [January 29, 2021, 8:17pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/1 "2021-01-29T20:17:20Z")

</div>

I just learned that six of the Allen-Bradley PLCs on my system are being upgraded from an older firmware to v32. Is it possible to modify the existing connections to use the new Allen-Bradley Logix driver instead of the Legacy Allen-Bradley ControlLogix driver?

Failing that, is it possible to rename the old device connections and make new ones with the same name but the new driver? Or do I need to modify all of my existing tags to use new connections?

---

<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:** [January 29, 2021, 8:19pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/2 "2021-01-29T20:19:32Z")

</div>

> [@Dan\_Bridgeman](#):
>
> Failing that, is it possible to rename the old device connections and make new ones with the same name but the new driver?

You can delete or rename the old ones and then make new ones with the correct name.

Unfortunately if you're going from the legacy ControlLogix/CompactLogix driver to the newer Logix driver you're going to find the OPC Item Path syntax is a little different.

---

<div class="post-metadata">

**Author:** ![Dan\_Bridgeman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dan_bridgeman/32/3610_2.png) [@Dan\_Bridgeman](https://forum.inductiveautomation.com/u/Dan_Bridgeman)\
**Post date:** [January 29, 2021, 8:22pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/3 "2021-01-29T20:22:06Z")

</div>

I was afraid of something like this.

Is it a fairly simple difference that I could take care of with a regex replacement in an export?

---

<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:** [January 29, 2021, 8:24pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/4 "2021-01-29T20:24:34Z")

</div>

Hmm, maybe. I do think that an export, modify, import is the approach a lot of people take to fix it but I don’t know if it’s as simple as a regex.

Basically what changed is that instead of having all the pointless duplication in the item paths that the legacy driver has the paths now look pretty much the same as they do in Studio 5000.

---

<div class="post-metadata">

**Author:** ![Dan\_Bridgeman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dan_bridgeman/32/3610_2.png) [@Dan\_Bridgeman](https://forum.inductiveautomation.com/u/Dan_Bridgeman)\
**Post date:** [January 29, 2021, 8:30pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/5 "2021-01-29T20:30:32Z")

</div>

> [@Kevin.Herron](#):
>
> Basically what changed is that instead of having all the pointless duplication in the item paths that the legacy driver has the paths now look pretty much the same as they do in Studio 5000.

So if the current OPC Item Path is

```auto
[avlProleit 1]Global.DiTSystemData.ClassObjects.C573.C573[66].sStatus.sActualValue

```

I would have to change it to

```auto
[avlProleit 1]Global.DiTSystemData.ClassObjects.C573[66].sStatus.sActualValue

```

As long as it's only the repeating name of the arrays, I think that shouldn't be _too_ difficult.

Thanks!

---

<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:** [January 29, 2021, 8:31pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/6 "2021-01-29T20:31:24Z")

</div>

The `Global.` is implicit in the new driver (so no prefix for controller scope tags) and tags from programs will have a `Program:Foo.` prefix.

---

<div class="post-metadata">

**Author:** ![Dan\_Bridgeman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dan_bridgeman/32/3610_2.png) [@Dan\_Bridgeman](https://forum.inductiveautomation.com/u/Dan_Bridgeman)\
**Post date:** [January 29, 2021, 8:36pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/7 "2021-01-29T20:36:12Z")

</div>

Okay, so the example above would change to

```auto
[avlProleit 1]DiTSystemData.ClassObjects.C573[66].sStatus.sActualValue

```

And existing path of

```auto
[avlProleit 2]_003_CIP_Loop_3.P_UTTankLoops

```

would change to

```auto
[avlProleit 2]Program:_003_CIP_Loop_3.P_UTTankLoops

```

Is that about it?

---

<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:** [January 29, 2021, 8:36pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/8 "2021-01-29T20:36:48Z")

</div>

Yeah I think that’s about it, assuming “\_003\_CIP\_Loop\_3” is the name of a program.

---

<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:** [January 29, 2021, 8:38pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/9 "2021-01-29T20:38:30Z")

</div>

Oh, there’s one more weird thing about Bool arrays… this one wasn’t intentional, just something we screwed up and couldn’t fix without breaking backwards compatibility…

Bool arrays are modeled how they exist in the controller: as an array of one or more DINTs. I think you can browse underneath each DINT in the array to get 32 bools, but because of this addressing tags from a BOOL array is annoying and complicated ☹

---

<div class="post-metadata">

**Author:** ![Dan\_Bridgeman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dan_bridgeman/32/3610_2.png) [@Dan\_Bridgeman](https://forum.inductiveautomation.com/u/Dan_Bridgeman)\
**Post date:** [January 29, 2021, 8:43pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/10 "2021-01-29T20:43:57Z")

</div>

Oof. I'm having a hard time picturing it, so I might have to hold off until the new firmware's in place to see how the path looks with the new driver.

> Yeah I think that’s about it, assuming “\_003\_CIP\_Loop\_3” is the name of a program.

Is there a third option, besides Global and a program? How else would you address a path that's at the same level as Global in the current browser?

---

<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:** [January 29, 2021, 8:46pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/11 "2021-01-29T20:46:25Z")

</div>

No 3rd option, tags are either controller scope (global) or program scope.

---

<div class="post-metadata">

**Author:** ![Dan\_Bridgeman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dan_bridgeman/32/3610_2.png) [@Dan\_Bridgeman](https://forum.inductiveautomation.com/u/Dan_Bridgeman)\
**Post date:** [January 29, 2021, 8:48pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/12 "2021-01-29T20:48:41Z")

</div>

Thanks for the quick response, Kevin. This would have been (more of) a nightmare to wade into blindly when everything stopped working tomorrow afternoon!

---

<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:** [January 29, 2021, 8:49pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/13 "2021-01-29T20:49:40Z")

</div>

If you can get a copy of the PLC code in L5X format, you can load it into my Ethernet/IP module. My module will expose the tags to Ignition with an address format compatible (well, 99%) with the Logix driver. Which you can play with offline to prepare for your upgrade. See this topic:

> [@AB PLC tag import/export](http://forum.inductiveautomation.com/t/33050/4):
>
> Start in your gateway’s configuration section, under the OPC Server’s “Device Connections” and click on “Create new Device…”: Select the Ethernet/IP Class1 Host Device: Give it a name and serial number… … and a slot number and listening address (required for external access) then “Create”: Then, in the list of devices, pick the new device’s “More” button, and select “Co…

Suitable for trial mode--won't cost you a thing.

---

<div class="post-metadata">

**Author:** ![Dan\_Bridgeman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dan_bridgeman/32/3610_2.png) [@Dan\_Bridgeman](https://forum.inductiveautomation.com/u/Dan_Bridgeman)\
**Post date:** [January 30, 2021, 6:57pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/14 "2021-01-30T18:57:54Z")

</div>

> [@pturmel](#):
>
> If you can get a copy of the PLC code in L5X format, you can load it into my Ethernet/IP module. My module will expose the tags to Ignition with an address format compatible (well, 99%) with the Logix driver.

Unfortunately this was sprung on me at the last minute, and I was not able to get the PLC code. But I did come up with a trio of `sed` calls which I was able to run on exports to get the affected PLCs into the correct state.

```auto
sed '/avlProleit [2-5]/{/Global/!s/\(\[avlProleit [2-5]\]\)/\1Program:/g}' originalInternalTags.xml | sed '/avlProleit [2-5]/s/\(\<\S*\>\)\.\<\1\>/\1/g' | sed '/avlProleit [2-5]/s/\(\[avlProleit [2-5]\]\)Global\./\1/g' > newInternalTags.xml

```

The first `sed` added the "Program:" prefix to all of the tags for the PLC, except for the global control tags.  
The second `sed` found all the OPC Item Paths with duplicates, like `folder.arrrayFolder.arrayFolder[23]`, and removed the duplicate and the separating `.`  
The last `sed` just strips out the `Global.` from the control tags of the four PLCs.

I haven't found any problems with Bools yet, so fingers crossed!

---

<div class="post-metadata">

**Author:** ![nminchin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nminchin/32/6911_2.png) [@nminchin](https://forum.inductiveautomation.com/u/nminchin)\
**Post date:** [January 31, 2021, 1:07am UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/15 "2021-01-31T01:07:28Z")

</div>

The new firmware doesn’t use `Global.` in the item path, you just need to remove this. In my udt definitions, I include a parameter called “Global.” which I add into the OPCitempath binding. Then in the instances if it’s below fw 20.19? where you need it, I set the “Global.” parameter to exactly that, “Global.”. Otherwise I leave it blank for fw 21 and above. Of course it doesn’t solve the double array name issue, but I don’t tend to use this very often anyway

---

<div class="post-metadata">

**Author:** ![jim.borener](https://avatars.discourse-cdn.com/v4/letter/j/7ea924/32.png) [@jim.borener](https://forum.inductiveautomation.com/u/jim.borener)\
**Post date:** [February 1, 2021, 3:55pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/16 "2021-02-01T15:55:56Z")

</div>

So, since I just saw this thread, is there an Ignition change coming that will discontinue the Legacy Driver?  
Also, what functional change is seen or experienced from the Legacy driver to the newest Allen-Bradley Logix driver?

---

<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:** [February 1, 2021, 3:59pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/17 "2021-02-01T15:59:09Z")

</div>

> [@jim.borener](#):
>
> is there an Ignition change coming that will discontinue the Legacy Driver?

No, it will pretty much always be there in its current state.

> [@jim.borener](#):
>
> Also, what functional change is seen or experienced from the Legacy driver to the newest Allen-Bradley Logix driver?

Aside from what's already been discussed the only other functional difference is the overall performance of this new tag access provided by Rockwell is worse.

And though the new driver will work with both older and newer firmware versions, it's _much_ worse when used with older (20.x and prior) versions.

---

<div class="post-metadata">

**Author:** ![jim.borener](https://avatars.discourse-cdn.com/v4/letter/j/7ea924/32.png) [@jim.borener](https://forum.inductiveautomation.com/u/jim.borener)\
**Post date:** [February 1, 2021, 4:03pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/18 "2021-02-01T16:03:37Z")

</div>

As in the Newest Allen Bradley Driver is worse in performance?  
I have 3 fw V32 machines that are on the legacy driver and it doesn’t give me any issues. I have other machines with fw V29 and 30. All are on Legacy and i don’t have any issues. So I don’t see the need for me updating. Just wanted to make sure I wasn’t going to have to change all my machines and paths to the data.

---

<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:** [February 1, 2021, 4:05pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/19 "2021-02-01T16:05:16Z")

</div>

> [@jim.borener](#):
>
> I have 3 fw V32 machines that are on the legacy driver and it doesn’t give me any issues. I have other machines with fw V29 and 30.

Sorry but I find this hard to believe. The legacy driver does not work with firmware v21+. It will browse but any attempt to read results in an error at the protocol level.

---

<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:** [February 1, 2021, 4:07pm UTC](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764/20 "2021-02-01T16:07:05Z")

</div>

> [@jim.borener](#):
>
> As in the Newest Allen Bradley Driver is worse in performance?

The new driver connecting to any v21+ PLC will generally perform worse than the legacy driver connected to a v16-v20.11. The new L8x with a dedicated CPU for comms do alright though. The performance loss isn't a limitation of the driver, it's the device and new protocol.

[Next page](https://forum.inductiveautomation.com/t/allen-bradley-plc-upgrade/42764.md?page=2)
