View Issue Details

IDProjectCategoryView StatusLast Update
000466910000-007: ProfilesApi Changepublic2024-08-20 15:31
ReporterDavid Levine Assigned To 
PrioritynormalSeveritymajorReproducibilityhave not tried
Status acknowledgedResolutionopen 
Summary0004669: Server should contain a required Variable node that contains a timestamp of when the last model change occurred.
Description

Clients need a mechanism that always works to determine if their copy of the server's address space has changed.

The use case for this is when a client has loaded a server's address space from a nodeset file for design-time development and has never directly connected to it. When the client is deployed and connects for the first time it needs a mechanism to determine if the address space is different from the nodeset file. If the server has a node under the Server folder it can compare the timestamps to determine if it needs to refresh its image of the address space.

When a nodeset file is exported from a server the ModelChange timestamp will be exported along with all the other nodes.

TagsNo tags attached.
Commit Version
Fix Due Date

Activities

David Levine

2019-06-18 17:07

developer   ~0010389

Rather than use a timestamp an alternative approach is to define a conformance unit that requires the use of the NamespaceMetadata Type defined in Part 5, section 6.3.13. The intent is that this will be implemented by servers to provide information for clients that need to validate stored configuration data. This conformance unit can be used with any profile.

The NamespaceMetadata type defines metadata for each namespace in a server.
Servers that implement this conformance unit shall keep two fields updated, NamespaceUri and NamespacePublicationDate. These shall be required to contain data for each namespace in the server. When the namespace changes these fields shall be updated.

This conformance unit to be added to the CTT for server validation. At this time there is no corresponding conformance unit for clients.

Clients can read these values and compare it to stored configuration data to determine if its view of the namespace has changed.

Thomas Enzinger

2019-06-18 20:30

reporter   ~0010392

Yes, we need a way to enable the Client to detect whether the persisted NodeIds in a Client are still valid.
(No matter how the NodeIds were collected, maybe by NodeSet import or by previous browsing of the Server).

To have an indication not only for the complete IM but for each separate Namespace is a good idea. This would for example reduce the time for a NodeId-refresh if only a few Nodes of the instance space have been changed.

Using a NamespacePublicationDate for detecting such changes would basically work, but compared to GUID or CRC there is a relatively high chance that the same NamespacePublicationDate is generated for different IMs.
Example: Some automated config-management process applies changes to several identical machines (but maybe with slightly different IMs). Server X in machine 1 and Server X in machine 2 might have the same identiy (even the same PublishingDate), but different IMs.
For this reason I would prefer using a GUID (or a CRC?), which is more safe in avoiding duplicates. Could such an GUID be added to the definition of NamespaceMetaData as optional property?

David Levine

2019-06-19 15:48

developer   ~0010393

I prefer a CRC but CRCs are more expensive to generate.

A CRC would be better because a Guid will be different each time it is generated even if the namespace has not changed. A client cares about the contents of the namespace, not necessarily when it was generated or loaded into a server.

If a CRC is used we should think about which attributes should be included. For example, for all nodes the NodeId and BrowsePath should be included. For Variable nodes it should include ValueRank, ArrayDimensions (even if null), DataType, and possibly TypeDefinition.

Thomas Enzinger

2019-06-19 17:06

reporter   ~0010394

If a system is smart enough it can also make sure it changes the GUID only then if the namespace has changed.
We have to consider 2 cases:
1: An external instance (tool/engineer) transfers a new IM to a server ... then it is up to the tool whether it generates a new GUID because it has changed relevant data
2: The server itself is the reason for the change (e.g. detection of a changes in the hardware-configuration)

In both cases it would be a very complex task to standardize how a CRC has to be built ... which attributes to include etc... and at the end we might come to the conclusion that the complete namespace including all atrributes and references should be included.
I would propose a GUID and give the advice that the generation of a new GUID should only happen when necessary.
Then a constraint device could argue that it does not have enough resources to do a extensive comparison in the background, and it might change the GUID even if the newly transferred namespace is actually the same.
Another device with frequently changing IM might decide to not persists some of its 'dynamic' NodeIds at all to avoid too many write cycles on the flash, it would generate a new GUID at every startup.

Devices which have a very large amount of nodes (where it actually matters that the GUID is only changed when absolutely necessary) usually also have enough resources to do a smarter handling of the GUID. They could also generate a CRC and convert it to a GUID, with the advantage that we don't have to specify how to generate the CRC.

Jim Luth

2019-06-25 20:16

administrator   ~0010414

Agreed that no spec changes are needed, just Conformance Units and Profiles for Clients and Servers that use this feature. David Lavine has agreed do work on CUs and Profiles for this with advice from Paul.

Jim Luth

2024-08-20 15:31

administrator   ~0021610

David has left Rockwell, so there is no volunteer to work on this.

Issue History

Date Modified Username Field Change
2019-03-11 17:19 David Levine New Issue
2019-03-12 02:53 Paul Hunkar Project Certification => 10000-005: Information Model
2019-03-12 02:53 Paul Hunkar Category Feature Request => Api Change
2019-06-18 17:07 David Levine Note Added: 0010389
2019-06-18 20:30 Thomas Enzinger Note Added: 0010392
2019-06-19 15:48 David Levine Note Added: 0010393
2019-06-19 17:06 Thomas Enzinger Note Added: 0010394
2019-06-25 20:14 Jim Luth Project 10000-005: Information Model => 10000-007: Profiles
2019-06-25 20:16 Jim Luth Note Added: 0010414
2019-06-25 20:17 Jim Luth Assigned To => David Levine
2019-06-25 20:17 Jim Luth Status new => assigned
2024-08-20 15:30 Jim Luth Assigned To David Levine =>
2024-08-20 15:30 Jim Luth Status assigned => acknowledged
2024-08-20 15:31 Jim Luth Note Added: 0021610