Retrieve Large Historical Data Sets
This example shows how to retrieve very large data sets from OPC historical data access servers.
Your OPC HDA server may have a defined upper limit on how much data to return in any
given historical data access read operation. That upper limit is returned by the
MaxReturnValues
field of the structure returned by calling
getServerStatus
on the client object. A value of 0 means there is
no defined limit, and the server returns all possible values.
When you request data over a wide time range, the server returns up to
MaxReturnValues
elements for each item, and the read function
issues a warning. The warning ID is opc:hda:mex:ReadMoreData
. To
retrieve all values, use code similar to that shown here.
This example retrieves all values of two items over a full year.
lastwarn(''); startTime = datetime(2013,1,1); % Replace with your start time endTIme = datetime(2013,12,31); % Replace with your end time itmList = {'Plant1.Unit2.FIC1001', 'Plant2.Unit1.FIC1001'}; % Replace with your item list wState = warning('off','opc:hda:mex:ReadMoreData'); yearData = hdaObj.readRaw(itmList,startTime,endTime); [warnMsg, warnID] = lastwarn; gotAllData = isempty(strfind(warnID,':ReadMoreData')) && isempty(strfind(warnID,':ReadComposite')); while ~gotAllData % Update start time to last time retrieved endDates = cellfun(@(x)x(end), {yearData.TimeStamp}); startTime = max(endDates); % Read data and append to existing data set moreData = hdaObj.readRaw(itmList,startTime,endTime); yearData = append(yearData,moreData); [warnMsg, warnID] = lastwarn; gotAllData = isempty(strfind(warnID,':ReadMoreData')); end % Reset warning state warning(wState);