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