In Asset Framework, what is the difference between a tag value of "No Data", "IO Timeout", and "Pt Created"?
Each value you listed represents a different state of bad data. Those state values come from the SYSTEM state set. A list of the well known SYSTEM error states may be found at this link.
One key thing about PI data is the notion of the SYSTEM states. Think of field sensor providing a Float32 numeric value to a PI tag. There could be many reasons why the value coming from that sensor is bad. So while you certainly may be expecting a Float32 value to come back from PI for good numeric data, if the data or signal is bad, you will instead receive a SYSTEM digital state. And more importantly, you should have enough information in that bad state to help you diagnose further.
If you know anything about binary floating point numbers, then you may know there is a value called NaN for Not-a-Number. But PI tags could also be integers, or strings, or even other user-defined digital state sets, none of which support a floating point NaN. So the SYSTEM states support a mechanism of representing bad data.
"Pt Created" is the state when a tag is created. "IO Timeout" should be self explanatory. "No Data" is an over abused catch-all state, which is set for a variety of reasons. I would urge customer developers to pick a more meaningful state before using "No Data".
Your last sentence - "I would urge customer developers to pick a more meaningful state before using "No Data""
Does this imply that the messages can be configurable when setting up the interface?
That's not what I am implying. "No Data" has a special meaning internally to some data access calls. Typically this may mean end of data stream, though that could be for requesting times after the last known value or before the first recorded value. When the data calls detect a "No Data" value, it may stop further processing on that stream for a given data call. Now imagine where a customer has used "No Data" liberally through out, and it is intermixed with good values such as Good, Good, Good, No Data, Good, Good, No Data, Good, etc. Some calls might detect that first "No Data" and then stop because it thinks its end of stream. So for developers who write custom applications and use "No Data" as a catch-all, I would urge them to pick another of the many SYSTEM states instead.
Any detailed documentation to be found on the places where and logic how No Data leads to a specific behaviour?
It's a bit odd of course that there are specific methods to find e.g. end of stream values, yet some internal methods use a different logic. Does not appear to be consistent
The behavior of NoData is explained in a few places in the AF SDK documentation:
What triggers me is e.g. this quote from Rick: "When the data calls detect a "No Data" value, it may stop further processing on that stream for a given data call."
However, e.g. the AFSDK indicates the call output No Data in specified cases, not that these calls actually work upon No Data in the timeseries of a PI Point. And that is quite different. To quote the AFSDK documentation (Future Data )
"There are differences in extrapolation behavior between historical PI tags and PI tags that support future data (this applies to both PIPoints and AFAttributes backed by PIPoints). Interpolated queries and “Auto” retrieval mode (which is the default configuration of the PI Point Data Reference) will return a NoData event for historical tags if queried at a timestamp past the end-of-stream and in the future. Future tags never extrapolate; they return a NoData event for any query after the end-of-stream event, regardless if it is in the past or future. RecordedValues and PlotValues calls to historical tags generate a NoData event at the current time when the requested time range extends into the future (beyond the end-of-stream), whereas future tags will not."
The interface will provide SYSTEM state table values, but a user can create an 'interface' that provide alternate values.That may be a piece of executable code or a calculation, and they may decide to use 'No Data".
Retrieving data ...