exponenta event banner

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

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

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

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