04/10/2022
Hello Everyone:
I have a couple of weeks trying to build a nice model design for a project with the following Architecture:
- Root (BaseType-FolderType)
- System1 (BaseType-Machine)
- Machine (BaseType-Component)
- MovingUnit (BaseType-FolderType)
- MovingUnit1 (BaseType-Component)
- Some Parameters
- General Component (BaseType-GeneralBase)
- Some Params
- GeneralBase (DataType: ua:BaseInterfaceType)
- Params
- MovingUnit1 (BaseType-Component)
- MovingUnit10
- MovingUnit (BaseType-FolderType)
- Machine (BaseType-Component)
- System2
- System1 (BaseType-Machine)
My problem is when i compile it using the model compiler from OPCFoundation Model Compiler, My nodeset2.Xml file is over 1MB size....
and i wanted to do the same that I did for moving units for another 4 systems....
This is my first model design so feel free to take a look and please tell me some ideas and solutions.
Some General questions:
Can I use an structure of objects? it compiles but when i connect to the server, the objects are not there.
How can an array of Moving Units for example can be implemented?
Does somebody has a list of the Object, Variable, DataType available BaseTypes? The documentation is too complex and i would like to know what am i allow to use?
I couldn´t attacht my ModelDesign.XML but here is the code
################
<?xml version="1.0" encoding="utf-8" ?>
<opc:ModelDesign
xmlns:uax="https://opcfoundation.org/UA/2008/02/Types.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ua="https://opcfoundation.org/UA/"
xmlns:opc="https://opcfoundation.org/UA/ModelDesign.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://troteclaser.com/TrotecModel"
TargetNamespace="http://testone.com/testmodel"
TargetXmlNamespace="http://testone.com/testmodel"
TargetVersion="I_0.00"
TargetPublicationDate="2022-05-17T00:00:00Z">
<opc:Namespaces>
<opc:Namespace Name="Test" Prefix="testmodel" XmlNamespace="http://testone.com/testmodel/Types.xsd" XmlPrefix="Trotec">http://testone.com/testmodel&l.....ce>
<opc:Namespace Name="OpcUa" Prefix="Opc.Ua" Version="1.04.7" PublicationDate="2020-05-09T00:00:00Z" XmlNamespace="https://opcfoundation.org/UA/2008/02/Types.xsd">https://opcfoundation.org/UA/&l.....ce>
</opc:Namespaces>
<!-- Enums -->
<opc:DataType SymbolicName="StatusEnum" BaseType="ua:Enumeration">
<opc:Fields>
<opc:Field Name="Unknown" Identifier="0"/>
<opc:Field Name="Initializing" Identifier="1"/>
<opc:Field Name="Disconnected" Identifier="2"/>
<opc:Field Name="Idle" Identifier="3"/>
<opc:Field Name="Error" Identifier="4"/>
<opc:Field Name="Busy" Identifier="5"/>
<opc:Field Name="Paused" Identifier="6"/>
</opc:Fields>
</opc:DataType>
<opc:DataType SymbolicName="SeverityEnum" BaseType="ua:Enumeration">
<opc:Fields>
<opc:Field Name="Unknown" Identifier="0"/>
<opc:Field Name="Informational" Identifier="1"/>
<opc:Field Name="Paused" Identifier="2"/>
<opc:Field Name="Stop" Identifier="3"/>
<opc:Field Name="Abort" Identifier="4"/>
</opc:Fields>
</opc:DataType>
<!--BaseTypes -->
<opc:ObjectType SymbolicName="StatusType" BaseType="ua:BaseObjectType" ExposesItsChildren="true">
<opc:Children>
<opc:Variable SymbolicName="Code" DataType="StatusEnum" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="TimestampTrigger" DataType="ua:DateTime" AccessLevel="ReadWrite"/>
</opc:Children>
</opc:ObjectType>
<opc:ObjectType SymbolicName="ConfigurationType" BaseType="ua:BaseObjectType" ExposesItsChildren="true">
<opc:Children>
<opc:Variable SymbolicName="Version" DataType="ua:String" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="ID" DataType="ua:UInt32" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="LoadConfiguration" DataType="ua:Boolean" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="ConfigFilePath" DataType="ua:String" AccessLevel="ReadWrite"/>
</opc:Children>
</opc:ObjectType>
<opc:ObjectType SymbolicName="ErrorType" DataType="ua:ExtensionObject" ExposesItsChildren="true">
<opc:Children>
<opc:Variable SymbolicName="Code" DataType="ua:UInt32" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="Severity" DataType="SeverityEnum" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="Timestamp" DataType="ua:DateTime" AccessLevel="ReadWrite"/>
</opc:Children>
</opc:ObjectType>
<!--<opc:ObjectType SymbolicName="ErrorsType" TypeDefinition="OpcUa:BaseObjectType" ExposesItsChildren="true">
<opc:Description>Error of a machine element.</opc:Description>
<opc:Children>
<opc:Object SymbolicName="Error01" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error02" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error03" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error04" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error05" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error06" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error07" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error08" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error09" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error10" TypeDefinition="ErrorType"/>
<opc:Variable SymbolicName="TimestampTrigger" DataType="ua:DateTime" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="AcknowledgeError" DataType="ua:Boolean" AccessLevel="ReadWrite"/>
</opc:Children>
</opc:ObjectType>-->
<opc:ObjectType SymbolicName="ErrorsType" BaseType="ua:BaseObjectType">
<opc:Description>Error of a machine element.</opc:Description>
<opc:Children>
<opc:Object SymbolicName="Error01" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error02" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error03" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error04" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error05" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error06" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error07" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error08" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error09" TypeDefinition="ErrorType"/>
<opc:Object SymbolicName="Error10" TypeDefinition="ErrorType"/>
<opc:Variable SymbolicName="TimestampTrigger" DataType="ua:DateTime" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="AcknowledgeError" DataType="ua:Boolean" AccessLevel="ReadWrite"/>
</opc:Children>
</opc:ObjectType>
<opc:ObjectType SymbolicName="GenericBaseType" DataType="ua:BaseInterfaceType">
<opc:Description>Base type for machines and components.</opc:Description>
<opc:Children>
<opc:Object SymbolicName="Status" TypeDefinition="StatusType"/>
<opc:Object SymbolicName="Error" TypeDefinition="ErrorsType"/>
<opc:Object SymbolicName="Configuration" TypeDefinition="ConfigurationType"/>
</opc:Children>
</opc:ObjectType>
<opc:ObjectType SymbolicName="ComponentType" BaseType="GenericBaseType">
<opc:Description>Base type for components.</opc:Description>
<opc:Children>
<opc:Variable SymbolicName="Name" DataType="ua:String" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="Description" DataType="ua:String" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="Index" DataType="ua:UInt32" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="UID" DataType="ua:UInt32" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="Enabled" DataType="ua:Boolean" AccessLevel="ReadWrite"/>
<opc:Method SymbolicName="Enable" TypeDefinition="EnableMethodType"/>
<opc:Method SymbolicName="Disable" TypeDefinition="DisableMethodType"/>
</opc:Children>
</opc:ObjectType>
<!--Machine Unit-->
<opc:ObjectType SymbolicName="MovingUnitType" BaseType="ComponentType">
<opc:Description>Represents the data structure for a MovingUnit.</opc:Description>
<opc:Children>
<opc:Variable SymbolicName="IsMoving" DataType="ua:Boolean" SupportsEvents="true" ExposesItsChildren="true" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="InPosition" DataType="ua:Boolean" SupportsEvents="true" ExposesItsChildren="true" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="IsReferenced" DataType="ua:Boolean" SupportsEvents="true" ExposesItsChildren="true" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="CurrentPosition" DataType="ua:Double" SupportsEvents="true" ExposesItsChildren="true" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="OffsetZeroPosition" DataType="ua:Double" SupportsEvents="true" ExposesItsChildren="true" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="PositionLimits" DataType="ua:Boolean" SupportsEvents="true" ExposesItsChildren="true" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="NegativeLimit" DataType="ua:Double" SupportsEvents="true" ExposesItsChildren="true" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="PositiveLimit" DataType="ua:Double" SupportsEvents="true" ExposesItsChildren="true" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="JogVelocity" DataType="ua:Double" SupportsEvents="true" ExposesItsChildren="true" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="OperationVelocity" DataType="ua:Double" SupportsEvents="true" ExposesItsChildren="true" AccessLevel="ReadWrite"/>
<opc:Method SymbolicName="MoveAbsolute" TypeDefinition="MoveAbsoluteMethodType"/>
<opc:Method SymbolicName="MoveRelative" TypeDefinition="MoveRelativeMethodType"/>
<opc:Method SymbolicName="StartReference" TypeDefinition="StartReferenceMethodType"/>
<opc:Method SymbolicName="StopMoving" TypeDefinition="StopMovingMethodType"/>
<opc:Method SymbolicName="JogPositive" TypeDefinition="JogMethodType"/>
<opc:Method SymbolicName="JogNegative" TypeDefinition="JogMethodType"/>
<opc:Method SymbolicName="MoveToHomePosition" TypeDefinition="MoveToHomePositionMethodType"/>
<opc:Method SymbolicName="MoveToWorkPosition" TypeDefinition="MoveToWorkPositionMethodType"/>
<opc:Object SymbolicName="HomePosition" TypeDefinition="InputType"/>
<opc:Object SymbolicName="WorkPosition" TypeDefinition="InputType"/>
</opc:Children>
</opc:ObjectType>
<opc:ObjectType SymbolicName="ExhaustType" BaseType="ComponentType">
<opc:Description>Represents the data structure for a Exhaust systems.</opc:Description>
<opc:Children>
<opc:Variable SymbolicName="StartupTime" DataType="ua:UInt32" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="ShutdownTime" DataType="ua:UInt32" AccessLevel="ReadWrite"/>
<opc:Method SymbolicName="StartExhaust" TypeDefinition="StartExhaustMethodType"/>
<opc:Method SymbolicName="StopExhaust" TypeDefinition="StopExhaustMethodType"/>
</opc:Children>
</opc:ObjectType>
<opc:ObjectType SymbolicName="LaserSystemType" BaseType="ComponentType">
<opc:Description>Represents the data structure for a LaserSystem.</opc:Description>
<opc:Children>
<opc:Object SymbolicName="LaserSource" TypeDefinition="ComponentType"/>
<opc:Object SymbolicName="PilotLaser" TypeDefinition="OutputType"/>
<opc:Object SymbolicName="FocusLaser" TypeDefinition="OutputType"/>
</opc:Children>
</opc:ObjectType>
<opc:ObjectType SymbolicName="MachineLayerType" BaseType="ComponentType">
<opc:Children>
<opc:Variable SymbolicName="HeartBeat" DataType="ua:Boolean" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="ErrorOccured" DataType="ua:Boolean" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="Acknowledge" DataType="ua:Boolean" AccessLevel="ReadWrite"/>
</opc:Children>
</opc:ObjectType>
<!--Inputs & Outputs-->
<opc:ObjectType SymbolicName="InputType" DataType="ua:ExtensionObject" ExposesItsChildren="true">
<opc:Description>Represents the data of a mapped hardware input</opc:Description>
<opc:Children>
<opc:Variable SymbolicName="Name" DataType="ua:String" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="Description" DataType="ua:String" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="Index" DataType="ua:UInt32" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="DebounceTime" DataType="ua:UInt32" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="Value" DataType="ua:Boolean" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="IsInverted" DataType="ua:Boolean" AccessLevel="ReadWrite"/>
</opc:Children>
</opc:ObjectType>
<opc:ObjectType SymbolicName="OutputType" DataType="ua:ExtensionObject" ExposesItsChildren="true">
<opc:Description>Represents the data of a mapped hardware output</opc:Description>
<opc:Children>
<opc:Variable SymbolicName="Name" DataType="ua:String" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="Description" DataType="ua:String" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="Index" DataType="ua:UInt32" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="SetValue" DataType="ua:Boolean" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="Value" DataType="ua:Boolean" AccessLevel="ReadWrite"/>
<opc:Variable SymbolicName="IsInverted" DataType="ua:Boolean" AccessLevel="ReadWrite"/>
</opc:Children>
</opc:ObjectType>
<!--Units container-->
<opc:DataType SymbolicName="StructMovingUnits" BaseType="ua:Structure" ExposesItsChildren="true">
<opc:Fields>
<opc:Field Name="MovingUnit01" TypeDefinition="MovingUnitType" />
<opc:Field Name="MovingUnit02" TypeDefinition="MovingUnitType" />
<opc:Field Name="MovingUnit03" TypeDefinition="MovingUnitType" />
<opc:Field Name="MovingUnit04" TypeDefinition="MovingUnitType" />
<opc:Field Name="MovingUnit05" TypeDefinition="MovingUnitType" />
<opc:Field Name="MovingUnit06" TypeDefinition="MovingUnitType" />
<opc:Field Name="MovingUnit07" TypeDefinition="MovingUnitType" />
<opc:Field Name="MovingUnit08" TypeDefinition="MovingUnitType" />
<opc:Field Name="MovingUnit09" TypeDefinition="MovingUnitType" />
</opc:Fields>
</opc:DataType>
<!--Variable-->
<VariableType SymbolicName="StructMovingUnitsType" DataType="StructMovingUnits" BaseType="ua:BaseDataVariableType" ValueRank="0" ExposesItsChildren="true">
<Description>testtesttest</Description>
<Children>
<Variable SymbolicName="MU01" TypeDefinition="MovingUnitType" ModellingRule="Mandatory"/>
<Variable SymbolicName="MU02" TypeDefinition="MovingUnitType" ModellingRule="Mandatory"/>
<Variable SymbolicName="MU03" TypeDefinition="MovingUnitType" ModellingRule="Mandatory"/>
<Variable SymbolicName="MU04" TypeDefinition="MovingUnitType" ModellingRule="Mandatory"/>
<Variable SymbolicName="MU05" TypeDefinition="MovingUnitType" ModellingRule="Mandatory"/>
<Variable SymbolicName="MU06" TypeDefinition="MovingUnitType" ModellingRule="Mandatory"/>
<Variable SymbolicName="MU07" TypeDefinition="MovingUnitType" ModellingRule="Mandatory"/>
<Variable SymbolicName="MU08" TypeDefinition="MovingUnitType" ModellingRule="Mandatory"/>
</Children>
</VariableType>
<opc:ObjectType SymbolicName="MovingUnitsType" BaseType="ua:FolderType">
<opc:Description>Container for MovingUnitType instances</opc:Description>
<opc:Children>
<opc:Object SymbolicName="MovingUnit01" TypeDefinition="MovingUnitType"/>
<opc:Object SymbolicName="MovingUnit02" TypeDefinition="MovingUnitType"/>
<opc:Object SymbolicName="MovingUnit03" TypeDefinition="MovingUnitType"/>
<opc:Object SymbolicName="MovingUnit04" TypeDefinition="MovingUnitType"/>
<opc:Object SymbolicName="MovingUnit05" TypeDefinition="MovingUnitType"/>
<opc:Object SymbolicName="MovingUnit06" TypeDefinition="MovingUnitType"/>
<opc:Object SymbolicName="MovingUnit07" TypeDefinition="MovingUnitType"/>
<opc:Object SymbolicName="MovingUnit08" TypeDefinition="MovingUnitType"/>
<opc:Variable SymbolicName="MovingUnit09" DataType="StructMovingUnits"/>
</opc:Children>
</opc:ObjectType>
<!--Methods-->
<opc:Method SymbolicName="EnableMethodType">
<opc:OutputArguments>
<opc:Argument Name="Result" DataType="ua:Boolean"/>
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="DisableMethodType">
<opc:OutputArguments>
<opc:Argument Name="Result" DataType="ua:Boolean"/>
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="JogMethodType">
<opc:OutputArguments>
<opc:Argument Name="Result" DataType="ua:Boolean"/>
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="StartReferenceMethodType">
<opc:OutputArguments>
<opc:Argument Name="Result" DataType="ua:Boolean"/>
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="StopMovingMethodType">
<opc:OutputArguments>
<opc:Argument Name="Result" DataType="ua:Boolean"/>
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="MoveAbsoluteMethodType">
<opc:InputArguments>
<opc:Argument Name="AbsoluteTargetPosition" DataType="ua:Double"/>
</opc:InputArguments>
<opc:OutputArguments>
<opc:Argument Name="Result" DataType="ua:Boolean"/>
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="MoveRelativeMethodType">
<opc:InputArguments>
<opc:Argument Name="RelativeTargetPosition" DataType="ua:Double"/>
</opc:InputArguments>
<opc:OutputArguments>
<opc:Argument Name="Result" DataType="ua:Boolean"/>
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="StartExhaustMethodType">
<opc:OutputArguments>
<opc:Argument Name="Result" DataType="ua:Boolean"/>
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="StopExhaustMethodType">
<opc:OutputArguments>
<opc:Argument Name="Result" DataType="ua:Boolean"/>
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="StartProcessMethodType">
<opc:OutputArguments>
<opc:Argument Name="Result" DataType="ua:Boolean"/>
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="EndProcessMethodType">
<opc:OutputArguments>
<opc:Argument Name="Result" DataType="ua:Boolean"/>
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="AbortProcessMethodType">
<opc:OutputArguments>
<opc:Argument Name="Result" DataType="ua:Boolean"/>
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="MoveToHomePositionMethodType">
<opc:OutputArguments>
<opc:Argument Name="Result" DataType="ua:Boolean"/>
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="MoveToWorkPositionMethodType">
<opc:OutputArguments>
<opc:Argument Name="Result" DataType="ua:Boolean"/>
</opc:OutputArguments>
</opc:Method>
<!--Root-->
<opc:ObjectType SymbolicName="System" BaseType="ua:FolderType">
<opc:Description>.</opc:Description>
<opc:Children>
<opc:Object SymbolicName="TestRoot" TypeDefinition="MovingUnitsType"/>
</opc:Children>
</opc:ObjectType>
</opc:ModelDesign>
###############
I hope somebody can help me.
BR.
Alebrije
05/30/2017
The NodeSet is primarily used for defining types. If you use it for instances you will get huge files.
The nodes you defined need to be linked to a well known node such as the Objects node.
If they are not linked they will not appear.
You can look at this example to illustrate how to add model design defined instances into the server address space:
1 Guest(s)