Read Functions
Read Functions Overview
You can use read functions to retrieve raw, sampled, and calculated values stored in the Historian server for usage in reporting, plotting, or data analysis applications.
In most cases, multiple tags can be read in a single function call.
Most of the read functions serve the general purpose of retrieving raw, sampled or calculated data. Additionally, targeted functions are exposed to provide easy access to current tag values or values interpolated to a specific date and time stamp.
Comments, if they exist, are returned with retrieved data. See the sample programs for more information.
You can combine read functions with write functions to read back newly written data, which is the most secure way to verify successful data writes.
Read Functions
- ihuReadCurrentValue
- ihuReadInterpolatedValue
- ihuReadInterpolatedValueEx
- ihuReadRawDataByTime
- ihuReadRawDataByTimeEx
- ihuReadMultiTagRawDataByCountEx
- ihuReadRawDataByCount
- ihuReadRawDataByCountEx
- ihuReadMultiTagRawDataByCount
- ihuReadMultiTagRawDataByCountEx
- ihuRetrieveSampledData
- ihuRetrieveSampledDataEx
- ihuRetrieveSampledDataEx2
- ihuRetrieveCalculatedData
- ihuRetrieveCalculatedDataEx
- ihuRetrieveCalculatedDataEx3
ihuReadCurrentValue
Use the ihuReadCurrentValue
function to return the current tag value. The current tag value has a specific definition in Historian, but is generally the last raw sample sent to the archiver for that tag.
Prototype
ihuReadCurrentValue {
in long serverhandle,
in int number_of_tags,
in/out IHU_DATA_SAMPLE *pSamples,
out ihuErrorCode *error_returns
};
Remarks
You can retrieve current values for multiple tags with one call. A single sample for each requested tag is returned.
For each tag, set only the tagname field in IHU_DATA_SAMPLE
. All other fields are set by the function.
Data is returned based on the data type of the tag.
Returns
The ihuReadCurrentValue
function returns errors in two ways. The function has a return code, and each tag name has an error code. Check function-level errors before you examine tag-level errors.
Both are ihuSTATUS_OK
when the current value is successfully retrieved.
The ihuReadCurrentValue
function can return errors on read timeouts or when the user is not a member of the ih Readers security group.
For example, each tag can return an error in cases where tags are not found or have no raw samples.
ihuReadInterpolatedValue
Use the ihuReadInterpolatedValue
function to return the value of a tag interpolated to a specified date and time.
Prototype
ihuReadInterpolatedValue {
in long serverhandle,
in int number_of_tags,
in/out IHU_DATA_SAMPLE * pSamples,
out ihuErrorCode * error_returns
};
Remarks
You can retrieve values for multiple tags with one call. A single sample for each requested tag is returned.
For each tag, set only the tagname and time stamp fields in IHU_DATA_SAMPLE
. All other fields are set by the function. The time stamp in the first requested tag is used for all tags.
Data is returned based on the data type of the tag.
The data quality returned is either ihuOPCGood
or ihuOPCBad
, and the substatus is always ihuOPCNonspecific
.
You must specify a time stamp in IHU_DATA_SAMPLE
for the first requested tag, for example:
//you only need to populate the time stamp in the first sample
lRet = IHU_timestamp_FromParts(2003,
7,
22,
11,
0,
0,
0,
&(pSamples[0].timestamp));
lRet= ihuReadInterpolatedValue (serverhandle, // handle from connect
number_of_tags, // number of tags, one sample per tag
pSamples, // allocated by caller, value set by API
error_returns); // error code per tag
For an example, refer to the ReportLike sample program.
Returns
The ihuReadInterpolatedValue
function returns errors in two ways. The function has a return code, and each tag name has an error code. Check function-level errors before you examine tag-level errors.
Both are ihuSTATUS_OK
when the current value is successfully retrieved.
The ihuReadInterpolatedValue
function returns errors on read timeouts or when the user is not a member of the ih Readers security group.
For example, each tag can return an error in cases where tags are not found or have no raw samples.
ihuReadInterpolatedValueEx
Use the ihuReadInterpolatedValueEx
function to return the number of samples of a tag interpolated to a given date and time with filters and query modifiers by using pszFilterExpression
and CriteriaString
.
Prototype
ihuErrorCode IHUAPI ihuReadInterpolatedValueEx
(
long serverhandle, // [in] used for communication with server
int number_of_tags, // [in] the number of tags to retrieve
IHU_DATA_SAMPLE *pSamples, // [in/out] user fills tagname and timestamp and the API fills other fields
MSO_Char *pszFilterExpression, // [in] Filter Expression e.g. Tag > 20
IHU_FILTER_MODE FilterMode, // [in] Filter Modes
MSO_Char *CriteriaString, // [in] QueryModifiers to use with data reads
ihuErrorCode *error_returns // [out] populated with per tag error
);
Remarks
To skip filtering, you can pass NULL
to pszFilterExpression
and ihuExactTime
to FilterMode
, or you can use ihuReadInterpolatedValue().
Pass NULL
to CriteriaString
if you do not use a QueryModifier
.
You can retrieve values for multiple tags with one call. A single sample for each requested tag is returned.
For each tag, set only the tagname and time stamp fields in IHU_DATA_SAMPLE
. All other fields are set by the function. The time stamp in the first requested tag is used for all tags.
Data is returned based on the data type of the tag.
The data quality returned is either ihuOPCGood
or ihuOPCBad
, and the substatus is always ihuOPCNonspecific
.
If you want to specify a time stamp, you must do so in IHU_DATA_SAMPLE
for the first requested tag.
Returns
The ihuReadInterpolatedValueEx
function returns errors on:
- Read timeouts
- User is not a member of the ih Readers security group
- Tag not found
- Filter criteria or query modifiers cannot be set
ihuReadRawDataByTime
Use the ihuReadRawDataByTime
function to return multiple raw samples for a single tag in a specified time range.
Prototype
ihuReadRawDataByTime {
in long serverhandle,
in MSO Char * tagname,
in IHU_timestamp * StartTime,
in IHU_timestamp * EndTime,
out int * number_of_samples,
out IHU_DATA_SAMPLE **data_values
};
Remarks
The time stamp, value, and quality of each raw sample are returned.
Returns
The ihuReadRawDataByTime
function returns ihuSTATUS_OK
when values are successfully retrieved.
Errors are returned on read timeouts, when the user is not a member of the ih Readers security group, or if the tag is not found.
ihuReadRawDataByTimeEx
Use the ihuReadRawDataByTimeEx
function to return multiple raw samples for a single tag in a specified time range with filters and query modifiers by using pszFilterExpression
and CriteriaString
.
Prototype
ihuReadRawDataByTimeEx {
long serverhandle, // [in] the serverhandle
MSO_Char *tagname, // [in] the single tagname to fetch data for
MSO_Char *pszFilterExpression, // [in] Filter Expression e.g. Tag > 20
IHU_FILTER_MODE FilterMode, // [in] Filter Modes
MSO_Char *CriteriaString, // [in] QueryModifiers to use with data reads
IHU_TIMESTAMP * StartTime, // [in] Start time of query
IHU_TIMESTAMP * EndTime, // [in] End Time of query
int * number_of_samples, //[out] the number of samples returned
IHU_DATA_SAMPLE **data_values // [out] the returned data samples, unlimited number
};
Remarks
To skip filtering, you can pass NULL
to pszFilterExpression
and ihuExactTime
to FilterMode
, or you can use ihuReadRawDataByTime()
.
Pass NULL
to CriteriaString
if you do not use a QueryModifier
.
The time stamp, value, and quality of each raw sample are returned.
Returns
The ihuReadRawDataByTimeEx
function returns ihuSTATUS_OK
on success, or returns errors on:
- Read timeouts
- User is not a member of the ih Readers security group
- Tag not found
- Filter criteria or query modifiers cannot be set
ihuReadRawDataByCount
Use the ihuReadRawDataByCount
function to return the requested number of raw samples for a single tag going forward or backward in time from a specified time stamp. In cases where the number of samples available is less than the value specified in the number_of_samples
parameter, the function stops returning data.
Prototype
ihuReadRawDataByCount {
in long serverhandle,
in MSO Char *tagname,
in IHU_timestamp * StartTime,
in/out int * number_of_samples,
in int TimeForward,
out IHU_DATA_SAMPLE **data_values
};
Remarks
The time stamp, value, and quality of each raw sample are returned.
Returns
The ihuReadRawDataByCount
function returns ihuSTATUS_OK
when values are successfully retrieved.
Errors are returned on read timeouts, when the user is not a member of the ih Readers security group, or if the tag is not found.
ihuReadRawDataByCountEx
Use the ihuReadRawDataByCountEx
function to return the requested number of raw samples for a single tag going forward or backward in time from a specified time stamp by using pszFilterExpression
and CriteriaString
. In cases where the number of samples available is less than the value specified in the number_of_samples
parameter, the function stops returning data.
Prototype
ihuReadRawDataByCountEx {
long serverhandle, // [in] the serverhandle
MSO_Char *tagname, // [in] the single tagname to fetch data for
MSO_Char *pszFilterExpression, // [in] Filter Expression e.g. Tag > 20
IHU_FILTER_MODE FilterMode, // [in] Filter Modes
MSO_Char *CriteriaString, // [in] QueryModifiers to use with data reads
IHU_TIMESTAMP * StartTime, // [in] Start time of query
IHU_TIMESTAMP * EndTime, // [in] End time of query
int * number_of_samples, // [in/out] the number of samples to return and actually returned
int TimeForward, // [in] TRUE if search should be in forward time order
IHU_DATA_SAMPLE **data_values // [out] the returned data samples, unlimited number
};
Remarks
To skip filtering, you can pass NULL
to pszFilterExpression
and ihuExactTime
to FilterMode
, or you can use ihuReadRawDataByCount().
Pass NULL
to CriteriaString
if you do not use a QueryModifier
.
The time stamp, value, and quality of each raw sample are returned.
Returns
The ihuReadRawDataByCountEx
function returns ihuSTATUS_OK
when values are successfully retrieved, and returns errors on:
- Read timeouts
- User is not a member of the ih Readers security group
- Tag not found
- Filter criteria or query modifiers cannot be set
ihuReadMultiTagRawDataByCount
Use the ihuReadMultiTagRawDataByCount
function to return up to the requested number of raw samples for multiple tags.
Prototype
ihuErrorCode IHUAPI ihuReadMultiTagRawDataByCount (
long serverhandle,
int number_of_tags,
IHU_ TIMESTAMP *StartTime,
int *number_of_samples, BOOL TimeForward,
ihuErrorCode **error_returns, IHU_RETRIEVED_RAW_VALUES *pSamples
);
Remarks
The ihuReadMultiTagRawDataByCount
function returns per-tag and overall errors.
Returns
The ihuReadMultitagRawDataByCount
function returns ihuSTATUS_OK
when values are successfully retrieved.
Errors are returned on read timeouts, when the user is not a member of the ih Readers security group, or if the tag is not found.
ihuReadMultiTagRawDataByCountEx
Use the ihuReadMultiTagRawDataByCountEx
function to return up to a requested number of multiple raw samples for multiple tags with filters and query modifiers by using pszFilterExpression
and CriteriaString
.
Prototype
ihuErrorCode IHUAPI ihuReadMultiTagRawDataByCountEx (
long serverhandle, // [in] the serverhandle
int number_of_tags, // [in] the number of tags to retrieve
IHU_TIMESTAMP * StartTime, // [in] Start time of query
IHU_TIMESTAMP * EndTime, // [in] End time of query
MSO_Char *pszFilterExpression, // [in] Filter Expression e.g. Tag > 20
MSO_Char *CriteriaString, // [in] QueryModifiers to use with data reads
IHU_FILTER_MODE FilterMode, // [in] Filter Modes
int * number_of_samples, // [in/out] the number of samples to return and actually returned
BOOL TimeForward, // [in] TRUE if search should be in forward time order ihuErrorCode ** error_returns, // [out] populated with per tag error
IHU_RETRIEVED_RAW_VALUES *pSamples // [in/out] the returned data samples, unlimited number memory is allocated
);
Remarks
To skip filtering, you can pass NULL
to pszFilterExpression
and ihuExactTime
to FilterMode
, or you can use ihuReadMultiTagRawDataByCount().
Pass NULL
to CriteriaString
if you do not use a QueryModifier
.
The ihuReadMultiTagRawDataByCount
function returns per-tag and overall errors.
Returns
The ihuReadRawDataByCountEx
function returns ihuSTATUS_OK
when values are successfully retrieved, and returns errors on:
- Read timeouts
- User is not a member of the ih Readers security group
- Tag not found
- Filter criteria or query modifiers cannot be set
ihuRetrieveSampledData
Use the ihuRetrieveSampledData
function to return sampled data based on the raw samples stored in the archive. Interpolated
, Trend
, and Lab
are example SamplingMode
values.
Prototype
ihuRetrieveSampledData {
in long serverhandle,
in IHU_timestamp StartTime,
in IHU_timestamp EndTime,
in ihuSamplingMode SamplingMode,
in unsigned long NumberOfSamples,
in unsigned long IntervalMilliseconds,
in/out IHU_RETRIEVED_DATA_RECORDS *DataRecords
};
Remarks
To request data, you can specify a number of samples or a time interval. Set one parameter to a non-zero value and the other to 0
. To split the duration, divide the time from start to finish into evenly spaced time intervals.
Returns
The ihuRetrieveSampledData
function returns ihuSTATUS_OK
when values are successfully retrieved.
Errors are returned on read timeouts, when the user is not a member of the ih Readers security group, or if the tag is not found.
ihuRetrieveSampledDataEx
Use the ihuRetrieveSampledDataEx
function to return sampled data based on the raw samples stored in the archive. Interpolated
, Trend
, and Lab
are example SamplingMode
values. Use this function with hybrid sampling modes such as TrendToRaw
or InterpolatedToRaw
to return the sampling mode that was actually used.
Prototype
ihuRetrieveSampledDataEx {
long serverhandle, // [in] which server to fetch from
IHU_TIMESTAMP StartTime, // [in] Start time for the query
IHU_TIMESTAMP EndTime, // [in] End time for the query
ihuSamplingMode SamplingMode, // [in] The requested sampling mode
unsigned long NumberOfSamples, // [in] 0 or num samples to return
IHU_DATA_INTERVAL Interval, // [in] 0 or sampling interval in units provided by IntervalType
IHU_RETRIEVED_DATA_RECORDS_EX *DataRecords // [in/out] - caller fills in tagnames of the structures and API will
};
Remarks
To request data, you can specify a number of samples or a time interval. Set one parameter to a non-zero value and the other to 0
. To split the duration, divide the time from start to finish into evenly spaced time intervals.
If you are not using hybrid sampling modes, use ihuRetrieveSampledData().
Returns
The ihuReadRawDataByTimeEx
function returns ihuSTATUS_OK
when values are successfully retrieved, and returns errors on:
- Read timeouts
- User is not a member of the ih Readers security group
- Tag not found
ihuRetrieveSampledDataEx2
Use the ihuRetrieveSampledDataEx2
function to return sampled data based on the raw samples stored in the archive with filters and query modifiers by using pszFilterExpression
and CriteriaString
. Interpolated
, Trend
, and Lab
are example SamplingMode
values. Use this function with hybrid sampling modes such as TrendToRaw
or InterpolatedToRaw
to return the sampling mode that was actually used.
Prototype
ihuRetrieveSampledDataEx2 {
long serverhandle, // [in] which server to fetch from
IHU_TIMESTAMP StartTime, //[in] Start time for the query
IHU_TIMESTAMP EndTime, //[in] End time for the query
ihuSamplingMode SamplingMode, //Sampling Modes
MSO_Char *pszFilterExpression, // [in] Filter Expression e.g. Tag > 20
IHU_FILTER_MODE FilterMode, // [in] Filter Modes
MSO_Char *CriteriaString, // [in] QueryModifiers to use with data reads
unsigned long NumberOfSamples, //[in] 0 or number of samples to return
IHU_DATA_INTERVAL Interval, // [in] 0 or sampling interval in units provided by IntervalType
IHU_RETRIEVED_DATA_RECORDS_EX *DataRecords //[in/out] - you fill in tagnames of the structures and API will fil
};
Remarks
To request data, you can specify a number of samples or a time interval. Set one parameter to a non-zero value and the other to 0
. To split the duration, divide the time from start to finish into evenly spaced time intervals.
To skip filtering, you can pass NULL
to pszFilterExpression
and ihuExactTime
to FilterMode
, or you can use ihuRetrieveSampledData().
Pass NULL
to CriteriaString
if you do not use a QueryModifier
.
Returns
The ihuRetrieveSampledDataEx2
function returns ihuSTATUS_OK
when values are successfully retrieved, and returns errors on:
- Read timeouts
- User is not a member of the ih Readers security group
- Tag not found
- Filter criteria or query modifiers cannot be set
ihuRetrieveCalculatedData
Use the ihuRetrieveCalculatedData
function to return calculated data based on the raw samples stored in the archive. Average
, Minimum
, and Count
are example CalculationMode
values.
Prototype
ihuRetrieveCalculatedData {
in long serverhandle,
in IHU_timestamp StartTime,
in IHU_timestamp EndTime,
in ihuCalculationMode CalculationMode,
in unsigned long NumberOfSamples,
in unsigned long IntervalMilliseconds,
in/out IHU_RETRIEVED_DATA_RECORDS *DataRecords
};
Remarks
To request data, you can specify a number of samples or a time interval. Set one parameter to a non-zero value and the other to 0
. To split the duration, divide the time from start to finish into evenly spaced time intervals.
Returns
The ihuRetrieveCalculatedData
function returns ihuSTATUS_OK
when values are successfully retrieved.
Errors are returned on read timeouts, when the user is not a member of the ih Readers security group, or if the tag is not found.
ihuRetrieveCalculatedDataEx
Use the ihuRetrieveCalculatedDataEx
function to return calculated data based on the raw samples stored in the archive. Average
, Minimum
, and Count
are example CalculationMode
values.
Prototype
ihuRetrieveCalculatedDataEx {
long serverhandle, // [in] which server to fetch from
IHU_TIMESTAMP StartTime, //[in] Start time of query
IHU_TIMESTAMP EndTime, //[in] End time of query
ihuCalculationMode CalculationMode, //[in] Calculation Mode
unsigned long NumberOfSamples, //[in] Number of samples to be returned
IHU_DATA_INTERVAL Interval, // [in] Interval in Milliseconds
IHU_RETRIEVED_DATA_RECORDS_EX *DataRecords //[in/out] - you fill in tagnames of the structures and API will fil
};
Remarks
To request data, you can specify a number of samples or a time interval. Set one parameter to a non-zero value and the other to 0
. To split the duration, divide the time from start to finish into evenly spaced time intervals.
Returns
The ihuReadRawDataByTimeEx2
function returns ihuSTATUS_OK
when values are successfully retrieved, and returns errors on:
- Read timeouts
- User is not a member of the ih Readers security group
- Tag not found
ihuRetrieveCalculatedDataEx3
Use the ihuRetrieveCalculatedDataEx3
function to return sampled data based on the raw samples stored in the archive with filters and query modifiers by using pszFilterExpression
and CriteriaString
. Average
, Minimum
, and Count
are example CalculationMode
values.
Prototype
ihuRetrieveCalculatedDataEx3 {
long serverhandle, // [in] which server to fetch from
IHU_TIMESTAMP StartTime, // [in] Start time of query
IHU_TIMESTAMP EndTime, // [in] End time of query
ihuCalculationMode CalculationMode, //[in] Calculation Mode
MSO_Char *pszFilterExpression, // [in] Filter Expression e.g. Tag > 20
IHU_FILTER_MODE FilterMode, // [in] Filter Modes
MSO_Char *CriteriaString, // [in] QueryModifiers to use with data reads
ihuDataType StateDataType, // DataType of the StateValue to compare for ihuStateCount calculation mode
ihuValue StateValue, // Value to compare for ihuStateCount calculation mode unsigned long NumberOfSamples, IHU_DATA_INTERVAL Interval, // [in] Interval in Milliseconds
IHU_RETRIEVED_DATA_RECORDS_EX *DataRecords // [in/out] - you fill in tagnames of the structures and API will fil
};
Remarks
To request data, you can specify a number of samples or a time interval. Set one parameter to a non-zero value and the other to 0
. To split the duration, divide the time from start to finish into evenly spaced time intervals.
To skip filtering, you can pass NULL
to pszFilterExpression
and ihuExactTime
to FilterMode
, or you can use ihuRetrieveCalculatedData().
Pass NULL
to CriteriaString
if you do not use a QueryModifier
.
Returns
The ihuRetrieveCalculatedDataEx3
function returns ihuSTATUS_OK
when values are successfully retrieved, and returns errors on:
- Read timeouts
- User is not a member of the ih Readers security group
- Tag not found
- Filter criteria or query modifiers cannot be set