Чтение зарегистрированных записей с диска в рабочую область MATLAB
S = OPCREAD('LogFileName')
S = opcread('LogFileName','PropertyName','PropertyValue',...)
TSCell = opcread('LogFileName','DataType','timeseries')
[I,V,Q,TS,ET] = opcread('LogFileName','DataType',DType,...)
S = OPCREAD('LogFileName') возвращает все доступные записи из файла журнала OPC с именем LogFileName. Если внутренний номер не указан как часть LogFileName, то .olf используется.
S является NRecоколо-1 структурный массив, где NRec - количество возвращенных записей. S содержит поля 'LocalEventTime' и 'Items'. LocalEventTime - вектор даты, соответствующий времени локального события для этой записи. Items является NItemsоколо-1 структурный массив, содержащий поля, показанные ниже.
Имя поля | Описание |
|---|---|
| Полный код элемента в виде символьного вектора. |
| Значение данных. Тип данных зависит от исходного элемента. |
| Качество данных в виде символьного вектора. |
| Время изменения значения в виде вектора даты. |
S = opcread('LogFileName',' ограничивает данные, считанные из указанного файла журнала OPC, на основе предоставленных свойств и значений. Допустимые имена и значения свойств определены в таблице ниже. PropertyName','PropertyValue',...)
Имя свойства | Значение свойства |
|---|---|
| Укажите требуемые записи как |
| Укажите диапазон дат для записей как |
| Укажите требуемые идентификаторы элементов в качестве символьного вектора, строки или массива. Если записи не соответствуют требуемому |
TSCell = opcread('LogFileName','DataType','timeseries') назначает данные, полученные из файла журнала OPC, массиву ячеек объектов временных рядов. TSCell содержит столько объектов временных рядов, сколько элементов в группе, с именем каждого объекта временных рядов, установленным на идентификатор элемента. Значение качества, сохраненное в объекте временного ряда, смещено от значения качества, возвращенного сервером ОРС, на 128. Качество, отображаемое каждым, одинаково. Поскольку каждая зарегистрированная запись может не содержать информации для каждого элемента, объекты временных рядов имеют только столько точек данных, сколько записей, содержащих информацию об этом конкретном идентификаторе элемента.
[I,V,Q,TS,ET] = opcread('LogFileName','DataType', назначает данные, извлеченные из файла журнала OPC, отдельным массивам. Допустимые типы данных для DType,...)DType являются 'double', 'single', 'int8', 'int16', 'int32', 'uint8', 'uint16', 'uint32', 'logical', 'currency', 'date', и 'cell'.
I является 1около-NItem массив ячеек имен элементов.
V является NRecоколо-NItem массив значений с указанным типом данных. Если тип данных 'cell' указывается, V - массив ячеек, содержащий данные в возвращаемом типе данных для каждого элемента. В противном случае V - числовой массив указанного типа данных.
Примечание
DType необходимо установить значение 'cell' при извлечении записей, содержащих векторы символов или массивы значений.
Q является NRecоколо-NItem массив векторов символов качества для каждого значения в V.
TS является NRecоколо-NItem массив номеров дат MATLAB, представляющий время, когда соответствующее значение и качество были сохранены на сервере OPC.
ET является NRecоколо-1 массив номеров дат MATLAB, соответствующий времени локального события для каждой записи.
Каждая зарегистрированная запись не может содержать информацию для каждого возвращенного элемента, так как данные для этого элемента, возможно, не изменились по сравнению с предыдущим обновлением. При возврате данных в виде числовой матрицы отсутствующие столбцы элементов для этой записи заполняются следующим образом.
| Соответствующая запись значения устанавливается на предыдущее значение этого элемента или на |
| Соответствующая запись качества имеет значение |
| Соответствующая запись метки времени устанавливается на первую действительную метку времени для этой записи. |
Настройте и запустите задачу ведения журнала. Дождитесь завершения задачи.
da = opcda('localhost','Matrikon.OPC.Simulation'); connect(da); grp = addgroup(da,'ExOPCREAD'); itm1 = additem(grp,'Triangle Waves.Real8'); itm2 = additem(grp,'Saw-Toothed Waves.Int2'); grp.LoggingMode = 'disk'; grp.RecordsToAcquire = 30; grp.LogFileName = 'ExOPCREAD.olf'; start(grp); wait(grp);
Извлеките первые две записи в структуру:
s = opcread('ExOPCREAD.olf','Records',[1, 2]);
Извлеките все данные и постройте их с помощью легенды:
[itmID,val,qual,tStamp] = opcread('ExOPCREAD.olf', ... 'DataType','double'); plot(tStamp(:,1),val(:,1),tStamp(:,2),val(:,2)); legend(itmID); datetick x keeplimits