Извлечение больших исторических наборов данных

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

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

Когда вы запрашиваете данные в широкой временной области значений, сервер возвращается к MaxReturnValues элементы для каждого элемента, и функция read выдает предупреждение. Идентификатор предупреждения 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);