Получите большие наборы исторических данных

В этом примере показано, как получить очень большие наборы данных из серверов доступа к историческим данным OPC.

Ваш сервер HDA OPC может иметь заданный верхний предел сколько данных, чтобы возвратиться в любой данной операции чтения доступа к историческим данным. Тот верхний предел возвращен MaxReturnValues поле структуры возвращено путем вызова getServerStatus на объекте клиента. Значение 0 средних значений там не является никаким заданным пределом, и сервер возвращает все возможные значения.

Когда вы запрашиваете данные в широкой области значений времени, сервер возвращается до MaxReturnValues элементы для каждого элемента и функция чтения выдают предупреждение. ID предупреждения является opc:hda:mex:ReadMoreData. Чтобы получить все значения, используйте код, похожий на показанный здесь.

Этот пример получает все значения двух элементов за целый год.

lastwarn('');
startTime = datenum(2013,1,1);  % Replace with your start time
endTIme = datenum(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);