Log Data from an OPC Data Access Server
This example shows you how to configure and execute a logging session, and retrieve data from that logging session.
PREREQUISITES:
Create the OPC Object Hierarchy
Create a hierarchy of objects.
da = opcda('localhost','Matrikon.OPC.Simulation.1'); connect(da); grp = addgroup(da,'CallbackTest'); additem(grp,'Random.Real8'); additem(grp,'Random.UInt2'); additem(grp,'Random.Real4');
Configure the Logging Duration
Set the group's UpdateRate
value to 0.2
seconds, and the RecordsToAcquire
property to 40
.
grp.UpdateRate = 0.2; grp.RecordsToAcquire = 40;
Configure the Logging Destination
Configure the group to log data to disk and memory. Use a file in a temporary folder.
logFileName = fullfile(tempdir,'LoggingExample.olf'); grp.LoggingMode = 'disk&memory'; grp.LogFileName = logFileName; grp.LogToDiskMode = 'overwrite';
The disk file name is LoggingExample.olf
. If the file name exists, the toolbox engine overwrites the file.
Start the Logging Task
Start the logging task on the group object. Wait two seconds and show the last acquired value.
start(grp) pause(2) sPeek = peekdata(grp,1)
sPeek = LocalEventTime: [2016 4 12 13 49 24.9080] Items: [3×1 struct]
Display the item ID and values
disp({sPeek.Items.ItemID;sPeek.Items.Value});
'Random.Real8' 'Random.UInt2' 'Random.Real4' [ 8.5714e+03] [ 9961] [ 1.9025e+04]
Wait for the object to complete logging before continuing with the example.
wait(grp)
Retrieve the Data
Retrieve the first 20 acquired records into a structure.
sFirst = getdata(grp,20);
The getdata
function removes the records from the toolbox engine. Examine the available records using the RecordsAvailable
property of the group.
recAvail = grp.RecordsAvailable
recAvail = 20
Retrieve the balance of the records into separate arrays, converting all values to double-precision floating point numbers.
[exItmId,exVal,exQual,exTStamp,exEvtTime] = getdata(grp, ... recAvail,'double');
Examine the contents of the workspace.
whos ex*
Name Size Bytes Class Attributes exEvtTime 20x1 160 double exItmId 1x3 408 cell exQual 20x3 8880 cell exTStamp 20x3 480 double exVal 20x3 480 double
Retrieve data from disk for a specific item, using the 'itemids' filter.
sReal8Disk = opcread(logFileName,'itemids','Random.Real8')
sReal8Disk = 40×1 struct array with fields: LocalEventTime Items
Examine the second record.
sReal8Disk(2).Items
ans = ItemID: 'Random.Real8' Value: 1.4955e+04 Quality: 'Good: Non-specific' TimeStamp: [2016 4 12 13 49 24.3890]
Clean Up
Disconnect and delete OPC objects from the toolbox engine.
disconnect(da) delete(da) delete(logFileName)
Deleting the client object also deletes the group and item objects.