В этом примере показано, как извлекать очень большие наборы данных с серверов доступа к историческим данным 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);