# Siemens OPC-UA or Ignition Siemens Driver with direct addressing?

**URL:** <https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938>\
**Category:** Ignition\
**Created:** [May 24, 2022, 2:58am UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938 "2022-05-24T02:58:43Z")\
**Posts on this page:** 18\
**Page:** 1

<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:** [May 24, 2022, 2:58am UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/1 "2022-05-24T02:58:44Z")

</div>

I’m asking for a colleague, but also interested in the answer.

We have a new greenfield project using Siemens PLCs and I’m wondering which way to go in terms of comms to them in Ignition.

Should we use the onboard OPC-UA server on the PLCs, or should we use the Ignition driver with crappy (no fault of IA) direct addressing?

For sanity’s sake, I would go with OPC-UA, but I’ve heard there are tag count limitations for this where beyond them the PLC starts to fall over and not handle the load and these counts are a lot lower than if direct addressing (correct me if wrong).

Other questions:

- is either faster than the other?
- is either more reliable?
- what about diagnostics? Ignition Devices have nice throughput indicators (load factors etc.) whereas OPC-UA doesn’t? (or does it?)
- what about setup/configuration and diagnosing any comms issues?
- anything else?

---

<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:** [May 24, 2022, 3:10am UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/2 "2022-05-24T03:10:24Z")

</div>

My vote is for OPC UA unless you exceed the supported tag / MonitoredItem count (there’s documentation from Siemens with recommendations based on the model).

OPC UA is going to be more reliable and easier to configure (kind of, see below) or troubleshoot. You don’t need all the diagnostics Ignition drivers have because you’ll OPC UA subscriptions report only when the value changes, there’s no polling of the device involved.

The cons are the tag/item limit and the configuration burden of needing to define UDTs in Ignition that mirror the structured values you’ll access in the PLC and use derived tags + jsonGet/jsonSet to pick out all the members, because structured OPC UA values come into Ignition as a JSON object. See [OPC UA struct data type? - #2 by Kevin.Herron](https://forum.inductiveautomation.com/t/opc-ua-struct-data-type/26905/2)

---

<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:** [May 24, 2022, 3:28am UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/3 "2022-05-24T03:28:46Z")

</div>

Thanks Kevin! That was my hope.

> [@OPC UA struct data type?](https://forum.inductiveautomation.com/t/opc-ua-struct-data-type/26905/7):
>
> ![image](https://us1.discourse-cdn.com/inductiveautomation/original/2X/3/3889f6907532fa763937434d194ced8310ac2e36.png)

From @Stevenson.Yuan 's post, I assume that we can define a custom property on the derived tags to hold the key to pull from the source tag and can then reference this in the read/write expression? (so that you don't have to edit the json function args for both props and instead just set the key in one place)

e.g. `jsonGet({source}, {tagKeyName})`

---

<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:** [May 24, 2022, 3:33am UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/4 "2022-05-24T03:33:49Z")

</div>

Don’t know, haven’t tried that 🙃

---

<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:** [May 24, 2022, 3:37am UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/5 "2022-05-24T03:37:05Z")

</div>

Ah, also, I’m assuming you are talking about using S7-1500s. These have had, and still have, support for the OPC UA 1.03 datatype dictionaries, which is currently required by Ignition. OPC UA 1.04 defined a new, much simpler/saner way for servers to expose datatype information but Ignition is going to be stuck on 1.03 for a while longer. Consequently, the S7-1200 is not a viable option, since Ignition can’t read whole structured values from it, and reading individual tags is a performance killer on top of the already significantly lower performance of the server in the S7-1200.

---

<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:** [May 24, 2022, 4:07am UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/6 "2022-05-24T04:07:19Z")

</div>

Thanks Kevin, yes we'll be using 1500's but good to know!

> [@Kevin.Herron](#):
>
> support for the OPC UA 1.03 datatype dictionaries, which is currently required by Ignition

Should this be in the doco? @Paul.Scott  
[https://docs.inductiveautomation.com/display/DOC81/Third+Party+OPC+Servers](https://docs.inductiveautomation.com/display/DOC81/Third+Party+OPC+Servers)

---

<div class="post-metadata">

**Author:** ![deon.korb](https://avatars.discourse-cdn.com/v4/letter/d/8c91f0/32.png) [@deon.korb](https://forum.inductiveautomation.com/u/deon.korb)\
**Post date:** [May 24, 2022, 6:49am UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/7 "2022-05-24T06:49:03Z")

</div>

We use OPC UA of the S7-1500 extensively. One gateway has about 40 controllers connected. Setting up the connections are quick and painless. Just approve the certificate on the redundant gateway manually, else it won't connect on failover.

It is important to go with the structured reads and use `jsonGet()`. We use the 1513 mostly and it supports 10000 subscriptions. We have not come close to that limit by reading structs.

We also use `system.opc.write` for some odd configuration items that are written very infrequently and do not form part of the struct that is written from Ignition. @Kevin.Herron, any danger in that?

As Kevin said, stay away from the 1200.

---

<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:** [May 24, 2022, 1:10pm UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/8 "2022-05-24T13:10:09Z")

</div>

> [@deon.korb](#):
>
> We also use `system.opc.write` for some odd configuration items that are written very infrequently and do not form part of the struct that is written from Ignition. @Kevin.Herron, any danger in that?

No this is fine.

You can also use `system.opc.read` or even a slow Tag Group in OPC Polled Mode for data you need to acquire infrequently, which will lower the MonitoredItem count. Just make sure it's actually infrequent and you don't end up doing frequent polling on top of OPC UA.

---

<div class="post-metadata">

**Author:** ![Michael\_Johannsen](https://avatars.discourse-cdn.com/v4/letter/m/3ab097/32.png) [@Michael\_Johannsen](https://forum.inductiveautomation.com/u/Michael_Johannsen)\
**Post date:** [December 9, 2022, 1:23pm UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/9 "2022-12-09T13:23:10Z")

</div>

I have talking to Siemens about Monitored Item count and Registered Read/write.  
If the the tag i configured as Registered Read/write in the Client the 1515 can handle 20.000 tags and that is a hole lot more than 2000. So I think i worth exploring.

I don't know the difference between those to configuration and a bit new i Ignition (for the moment).  
But can Ignition configure the tags as Registered Read/write?

---

<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:** [December 9, 2022, 1:48pm UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/10 "2022-12-09T13:48:18Z")

</div>

As far as I can tell from the docs, registering nodes only improves performance when you’re doing large repeated reads, not using subscriptions.

It might still be worth looking into for when people resort to using polled mode tag groups, though

---

<div class="post-metadata">

**Author:** ![Michael\_Johannsen](https://avatars.discourse-cdn.com/v4/letter/m/3ab097/32.png) [@Michael\_Johannsen](https://forum.inductiveautomation.com/u/Michael_Johannsen)\
**Post date:** [December 9, 2022, 4:49pm UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/11 "2022-12-09T16:49:14Z")

</div>

If i "only" have 2000 tags from the PLC, then is not enough for some of the bigger production lines where there are a lots of pumps, valves, analog input, ect.  
A Siemens 1515 i actually i quite big PLC that can run large production lines.

Do you know how the to make a Registered Read/write tags in Ignition? then I can do some test on how i works.

---

<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:** [December 9, 2022, 4:51pm UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/12 "2022-12-09T16:51:53Z")

</div>

It's not possible to use the RegisterNodes service from Ignition right now.

Any testing you do would need to use another client that supports it or just be a coded from scratch test that uses some OPC UA SDK.

---

<div class="post-metadata">

**Author:** ![Kevin\_Berger](https://avatars.discourse-cdn.com/v4/letter/k/7c8e57/32.png) [@Kevin\_Berger](https://forum.inductiveautomation.com/u/Kevin_Berger)\
**Post date:** [March 25, 2025, 2:27pm UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/13 "2025-03-25T14:27:00Z")

</div>

Why can't the 1200 be used for reading the whole structured value? Have you tried using the SiOME tool Siemens has? I know the 1200, and the redundant/high availability 1500's default to "node ID", instead of String, so SiOME helps with that.

---

<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:** [March 25, 2025, 2:30pm UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/14 "2025-03-25T14:30:34Z")

</div>

Because the 1200 only supports the DataTypeDefinition attribute as a means for clients to learn about the structure definitions.

It does not (or did not at the time of this) expose the older DataTypeDictionary, which is the only method Ignition currently supports.

Ignition 8.3's OPC UA client supports the DataTypeDefinition attribute and will use that by default.

---

<div class="post-metadata">

**Author:** ![olefredrik.kvalnes](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/olefredrik.kvalnes/32/74830_2.png) [@olefredrik.kvalnes](https://forum.inductiveautomation.com/u/olefredrik.kvalnes)\
**Post date:** [April 9, 2025, 12:07pm UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/15 "2025-04-09T12:07:07Z")

</div>

Hi there.

I'm pretty happy with using OPC UA, but when I'm downloading the PLC and have to reinitialize the PLC DBs, the ignition OPC driver is struggling to read all data from PLC. Is this because of subscription of tags from PLC?  
Is there any ways to deal with this other than restarting the OPC UA module on Ignition server?

---

<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:** [April 9, 2025, 12:26pm UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/16 "2025-04-09T12:26:27Z")

</div>

There shouldn’t be anything you have to do, certainly not restart anything.

When you download the Siemens server restarts, so you’ll lose connection, but it should recover relatively quickly and without intervention.

---

<div class="post-metadata">

**Author:** ![olefredrik.kvalnes](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/olefredrik.kvalnes/32/74830_2.png) [@olefredrik.kvalnes](https://forum.inductiveautomation.com/u/olefredrik.kvalnes)\
**Post date:** [April 9, 2025, 1:29pm UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/17 "2025-04-09T13:29:47Z")

</div>

After some troubleshooting I figured out that I had a Queue Size = 10 for that "Tag Group". After I changed it to 0, everything works perfect.  
Not sure if i need to have a Queue Size? I what situation would this be useful?

---

<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:** [April 9, 2025, 1:33pm UTC](https://forum.inductiveautomation.com/t/siemens-opc-ua-or-ignition-siemens-driver-with-direct-addressing/59938/18 "2025-04-09T13:33:06Z")

</div>

It's needed when working with our DNP3 or 61850 drivers to preserve sequence of events.

With other servers, it's really only necessary if:

- you want to sample the underlying data quickly (sampling interval) but report it to the client slowly (publishing interval), in batches
- you may temporarily lose the connection between client and server, but only for cases when it's not because the server restarted and lost all of its state - just for connection disruptions
