Two openPDCs connecting to one PI server causing overwrites

I have an installation where two computers, both with openPDC, are sending data to the same PI server, and both are set to create tags in PI. Both openPDC configurations were based on the same computer image and simply have a change in tag names for the devices they are connect to.

Depending on which PI historian instance is initialized first, the PI tag names are being replaced by the second historian instance instead of creating new tags. If the second instance is then disabled, the first instance will start updating the PI tags which now have the second instance’s tag names.

Is there a parameter I need to make sure doesn’t match between computers that could be causing this? Like I mentioned the only difference in openPDC configuration is tag names and descriptions.

The issue you’re having actually stems from the fact that these two openPDC instances have the same Measurements with the same SignalIDs. The SignalID is written into the ExtendedDescriptor field in the PI metadata, and that field is used for point lookups. That way, the same PI points can still be found even if the tags are all renamed.

You may or may not want to consider changing the SignalIDs in one of your openPDC instances. Doing so will separate the PI metadata in the way you are trying to achieve. However, note that this has the effect of duplicating the input so you now have two entirely separate signals that are virtually indistinguishable from one another but cannot be merged back together. In other words, if you intend on sharing real-time data with any external system, the data will always appear as two separate signals just as they exist as two separate points in the PI system.

If you would like the real-time streams to be redundant but still duplicate your data in PI, you would need to modify the PIOutputAdapter source code. You can just tweak the value that’s entered into the extended descriptor field to make sure it’s unique per signal and per openPDC instance. I believe the following links represent all the relevant lines of code.

https://github.com/GridProtectionAlliance/gsf/blob/master/Source/Libraries/Adapters/PIAdapters/PIOutputAdapter.cs#L911
https://github.com/GridProtectionAlliance/gsf/blob/master/Source/Libraries/Adapters/PIAdapters/PIOutputAdapter.cs#L923
https://github.com/GridProtectionAlliance/gsf/blob/master/Source/Libraries/Adapters/PIAdapters/PIOutputAdapter.cs#L1110

Thanks,
Stephen

Stephen,

Thanks for the help. The data should be separate so I will pursue the first option. SignalID is something like PPA:1, correct? I don’t see a way to easily modify this in the openPDC Manager, would I be able to just change the historian acronym?

Appreciate it!

No, SignalID is a GUID, typically represented by a series of hexadecimal numbers separated by dashes. There is a readonly field in the openPDC Manager that allows you to view the SignalID, but you won’t be able to modify it without executing queries against the database itself. Here is an example query for SQL Server that generates a brand new SignalID for every Measurement in the database.

UPDATE Measurement SET SignalID = NEWID()

Thanks for the help Stephen, I’m using SQLite so I ended up using this for each signal I needed to change:
UPDATE Measurement SET SignalID=(select * from NEW_GUID) WHERE PointTag = “tag_example”;