SUMMARY
The GRAccess Toolkit enables developers to automate activities that users normally perform manually using the Industrial Application Server Integrated Development Environment (IDE).
This Tech Note describes how to create and configure a derived template of the OPCClient DIObject using a C# console application.
SITUATION
Application Versions
To execute the GRAccess sample application that is described in this document, you will need the following prerequisites:
- Visual Studio 2005
- Industrial Application Server 2.1 or later
- DASABTCP DAServer or any other OPC Server
Using the IDE to Configure the OPCClient DIObject
Before describing using GRAccess to manipulate the OPCClient object, we’ll describe the final goal by demonstrating first the manual steps using the ArchestrA IDE.
- First create a derived template of the OPCClient DIObject.
- Give the new derived template the name $OPCClient_02 and open the template editor.
Figure 1: Editing the Derived Template - Click the General tab and set the Server node to localhost. Then select a registered OPC Server from the Server name list.
- Click the Scan Group editor tab.
- In the Scan Group tab add a new Scan Group called Group1. Then select Group1.
- Add two Attributes and name them Counter_1 and Counter_2. Assign the Item Reference N100:1 to Counter_1 and N200:1 to Counter_2.
Figure 2: Configure Scan Groups - Save and close the object.
What Happens at the API Level
This section describes in GRAccess API terms what happened under the hood during the configuration of the OPCClient DIObject:
Configure the Common Attributes
Query the Galaxies and Login
Galaxies = GR.QueryGalaxies(GRMachineName);
G = Galaxies[GalaxyName];
G.Login(UserName, Password);
Get the $OPCClient Template and Derive a New Template
string[] Names = { “$OPCClient” };
Objects = G.QueryObjectsByName(EgObjectIsTemplateOrInstance.gObjectIsTemplate, ref Names);
T = (ITemplate)Objects[1];
Parent = T.CreateTemplate(OPCClientTemplateName, true);
Checkout Template
Parent.CheckOut();
Configure ServerNode and ServerName Attributes
MxValue v = new MxValueClass();
//Configure computer name of OPCServer
v.PutString(OPCServerComputer);
Parent.Attributes[“ServerNode”].SetValue(v);
//Configure OPC server name
v.PutString(OPCServerName);
Parent.Attributes[“ServerName”].SetValue(v);
Add ScanGroup and an Attribute Array of Items
//Configure OPCGroup name
v.PutString(OPCGroupName);
Parent.Attributes[“_ScanGroupAdd”].SetValue(v);
//Add list of alias names to Group1
a.Empty();
v.PutString(OPCItemAttributeName1);
a.PutElement(1, v);
v.PutString(OPCItemAttributeName2);
a.PutElement(2, v);
Parent.Attributes[OPCGroupName + “._ItemAdd”].SetValue(a);
Figure 3: Object Properties
Save and CheckIn
Parent.Save();
Parent.CheckIn(“”);
Configure Item Attribute Alias Names
The configuration of the item alias mapping table is the tricky part of this procedure, because the attribute name-to-item association is stored as XML string in an element called [ScanGroupName].AliasDatabase.
The ArchestrA item attributes are XML elements in this XML file and the alias names are XML attribute of the item elements. To modify the mapping, the XML string needs to be retrieved from the attribute, the XML nodes need to be modified and then the modified XML string copied back into the original ArchestrA attribute.
Figure 4: XML Modifications
Get Group1.AliasDatabase XML
v = Parent.Attributes[OPCGroupName + “.AliasDatabase”].value;
string ItemDBXMLString = v.GetString();
//Create an XML document instance, and load XML data from AliasDatabase attribute
XmlDocument doc = new XmlDocument();
System.IO.StringReader SR = new System.IO.StringReader(ItemDBXMLString);
System.Xml.XmlTextReader TR = new System.Xml.XmlTextReader(SR);
doc.Load(TR);
Use XPath to Modify Item Names in XML
//XPath query to the actual items
XmlNodeList nodeList = doc.SelectNodes(“/ItemsList/Item”);
//Modify items list to point to the actual item names
XmlNode Item1 = nodeList[0];
Item1.Attributes[“Name”].Value = OPCItemName1;
XmlNode Item2 = nodeList[1];
Item2.Attributes[“Name”].Value = OPCItemName2;
string NewItemDBXMLString = doc.OuterXml;
Checkout Template
Parent.CheckOut();
Change Group1.AliasDatabase attribute with new XML
v.Empty();
v.PutString(NewItemDBXMLString);
Parent.Attributes[OPCGroupName +”.AliasDatabase”].SetValue(v);
Save and CheckIn
Parent.Save();
Parent.CheckIn(“”);
The Complete Source File
View the complete program file. You can copy/paste the content to a .cs file at your convenience.
Compilation
To compile the program.cs file run the following command in the Visual Studio 2005 command prompt:
csc /out:CreateOPCClient.exe program.cs /r:”C:\Program Files\Common Files\ArchestrA\ArchestrA.GRAccess.dll”;
Test Run
To execute CreateOPCClient.exe run the following command. In the following command line PENGUINS is the Galaxy name. Change it to reflect your server name:
CreateOPCClient gr=localhost g=PENGUINS u=Administrator pw=ww on=$OPCClient_02 os=ArchestrA.DASABTCP.1 oc=localhost og=Group1 oi1=N100:1 oa1=Counter_1 oi2=N200:1 oa2=Counter_2
Summary
The key to configuring an OPCClient DIObject using the GRAccess toolkit is the knowledge that the alias item names are stored in a single attribute as XML string. Modifying this string will create the mappings as seen in the OPCClient object’s Scangroup editor.