Locate and Browse OPC Data Access Servers
This example shows you how to browse the network for OPC servers, and query the server name space for server items and their properties.
PREREQUISITES:
Step 1: Browse the Network for OPC Servers
You use the opcserverinfo
function to query a host on the network for available OPC Data Access servers. This example uses the local host.
hostInfo = opcserverinfo('localhost')
hostInfo = Host: 'localhost' ServerID: {'Matrikon.OPC.Simulation.1'} ServerDescription: {'MatrikonOPC Server for Simulation and Testing'} OPCSpecification: {'DA2'} ObjectConstructor: {'opcda('localhost', 'Matrikon.OPC.Simulation.1')'}
The returned structure provides information about each server:
hostInfo.ServerDescription'
ans = 'MatrikonOPC Server for Simulation and Testing'
and about the Server ID you use to create a client object.
allID = hostInfo.ServerID'
allID = 'Matrikon.OPC.Simulation.1'
Step 2: Construct a Client Object and Connect to the Server
Use the host name and server ID found in the previous step to construct a client object.
da = opcda('localhost','Matrikon.OPC.Simulation.1')
da = Summary of OPC Data Access Client Object: localhost/Matrikon.OPC.Simulation.1 Server Parameters Host : localhost ServerID : Matrikon.OPC.Simulation.1 Status : disconnected Timeout : 10 seconds Object Parameters Group : 0-by-1 dagroup object Event Log : 0 of 1000 events
Connect the client to the server.
connect(da);
Step 3: Retrieve the Server Name Space
Retrieve the name space of the server.
ns = getnamespace(da)
ns = 4×1 struct array with fields: Name FullyQualifiedID NodeType Nodes
Each element of the structure is a node in the server name space.
ns(1)
ans = Name: 'Simulation Items' FullyQualifiedID: 'Simulation Items¥' NodeType: 'branch' Nodes: [8×1 struct]
Step 4: Find Items in the Name Space
Use the serveritems
function to find all items in the name space containing the string Real
.
realItems = serveritems(ns,'*Real*')
realItems = 'Bucket Brigade.ArrayOfReal8' 'Bucket Brigade.Real4' 'Bucket Brigade.Real8' 'Random.ArrayOfReal8' 'Random.Real4' 'Random.Real8' 'Read Error.ArrayOfReal8' 'Read Error.Real4' 'Read Error.Real8' 'Saw-toothed Waves.Real4' 'Saw-toothed Waves.Real8' 'Square Waves.Real4' 'Square Waves.Real8' 'Triangle Waves.Real4' 'Triangle Waves.Real8' 'Write Error.ArrayOfReal8' 'Write Error.Real4' 'Write Error.Real8' 'Write Only.ArrayOfReal8' 'Write Only.Real4' 'Write Only.Real8'
Step 5: Query Server Item Properties
Examine the Canonical Data Type (PropID = 1
) and the Item Access Rights (PropID = 5
) of the second item found.
canDT = serveritemprops(da,realItems{2},1) accessRights = serveritemprops(da,realItems{2},5)
canDT = PropID: 1 PropDescription: 'Item Canonical DataType' PropValue: 'single' PropItemID: '' accessRights = PropID: 5 PropDescription: 'Item Access Rights' PropValue: 'read/write' PropItemID: ''
Step 6: Clean Up OPC Objects
Disconnect the client from the server and remove OPC objects from memory when you no longer need them. Deleting the client object also deletes the group and item objects.
disconnect(da) delete(da)