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