<?xml version="1.0" encoding="utf-8" ?>
<!--
 * Copyright (c) 2005-2020 The OPC Foundation, Inc. All rights reserved.
 *
 * OPC Foundation MIT License 1.00
 * 
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use,
 * copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following
 * conditions:
 * 
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 *
 * The complete license agreement can be found here:
 * http://opcfoundation.org/License/MIT/1.00/
-->

<ModelDesign 
  xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:ua="http://opcfoundation.org/UA/"
  xmlns:DI="http://opcfoundation.org/UA/DI/"
  xmlns:tns="http://sercos.org/UA/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  TargetNamespace="http://sercos.org/UA/"
  TargetXmlNamespace="http://sercos.org/UA/"
  TargetVersion="1.00"
  TargetPublicationDate="2017-03-13T00:00:00Z"
  xmlns="http://opcfoundation.org/UA/ModelDesign.xsd">

  <Namespaces>
    <Namespace Name="Sercos" Prefix="Sercos" XmlNamespace="http://sercos.org/UA/Types.xsd" XmlPrefix="Sercos">http://sercos.org/UA/</Namespace>
    <Namespace Name="DI" Version="1.02" PublicationDate="2019-05-01T00:00:00Z" Prefix="Opc.Ua.Di" XmlNamespace="http://opcfoundation.org/UA/DI/Types.xsd" XmlPrefix="DI" FilePath="OpcUaDiModel">http://opcfoundation.org/UA/DI/</Namespace>
    <Namespace Name="OpcUa" Version="1.04.3" PublicationDate="2019-09-09T00:00:00Z" Prefix="Opc.Ua" InternalPrefix="Opc.Ua.Server" XmlNamespace="http://opcfoundation.org/UA/2008/02/Types.xsd" XmlPrefix="OpcUa">http://opcfoundation.org/UA/</Namespace>
  </Namespaces>

  <!-- SercosNamespaceMetadata -->
  <Object SymbolicName="tns:SercosNamespaceMetadata" TypeDefinition="ua:NamespaceMetadataType">
    <BrowseName>http://sercos.org/UA/</BrowseName>
    <Children>
      <Property SymbolicName="ua:NamespaceUri" DataType="ua:String">
        <DefaultValue>
          <uax:String>http://sercos.org/UA/</uax:String>
        </DefaultValue>
      </Property>
      <Property SymbolicName="ua:NamespaceVersion" DataType="ua:String">
        <DefaultValue>
          <uax:String>1.00</uax:String>
        </DefaultValue>
      </Property>
      <Property SymbolicName="ua:NamespacePublicationDate" DataType="ua:DateTime">
        <DefaultValue>
          <uax:DateTime>2017-03-13</uax:DateTime>
        </DefaultValue>
      </Property>
      <Property SymbolicName="ua:IsNamespaceSubset" DataType="ua:Boolean">
        <DefaultValue>
          <uax:Boolean>false</uax:Boolean>
        </DefaultValue>
      </Property>
      <Property SymbolicName="ua:StaticNodeIdTypes" DataType="ua:IdType" ValueRank="Array">
        <DefaultValue>
          <uax:ListOfInt32>
            <uax:Int32>0</uax:Int32>
          </uax:ListOfInt32>
        </DefaultValue>
      </Property>
      <Property SymbolicName="ua:StaticNumericNodeIdRange" DataType="ua:NumericRange" ValueRank="Array">
        <DefaultValue>
          <uax:ListOfString>
            <uax:String>1:65535</uax:String>
          </uax:ListOfString>
        </DefaultValue>
      </Property>
      <Property SymbolicName="ua:StaticStringNodeIdPattern" DataType="ua:String">
        <DefaultValue>
          <uax:String></uax:String>
        </DefaultValue>
      </Property>
      <Property SymbolicName="ua:DefaultRolePermissions" ModellingRule="Mandatory" />
      <Property SymbolicName="ua:DefaultUserRolePermissions" ModellingRule="Mandatory" />
      <Property SymbolicName="ua:DefaultAccessRestrictions" ModellingRule="Mandatory" />
    </Children>
    <References>
      <Reference IsInverse="true">
        <ReferenceType>ua:Organizes</ReferenceType>
        <TargetId>ua:Server_Namespaces</TargetId>
      </Reference>
    </References>
  </Object>
  
  <!-- FunctionalGroupType -->
  <ObjectType SymbolicName="tns:FunctionalGroupType" BaseType="ua:FolderType" IsAbstract="false" SupportsEvents="false">
  </ObjectType>
  
  <!-- SercosProfileType -->
  <ObjectType SymbolicName="tns:SercosProfileType" BaseType="tns:FunctionalGroupType" IsAbstract="false" SupportsEvents="false">
  </ObjectType>

  <!-- SercosClassType -->
  <ObjectType SymbolicName="tns:SercosClassType" BaseType="tns:FunctionalGroupType" IsAbstract="false" SupportsEvents="false">
  </ObjectType>

  <!-- SercosFunctionGroupType -->
  <ObjectType SymbolicName="tns:SercosFunctionGroupType" BaseType="tns:FunctionalGroupType" IsAbstract="false" SupportsEvents="false">
  </ObjectType>

  <!-- SercosDeviceType -->
  <ObjectType SymbolicName="tns:SercosDeviceType" BaseType="DI:DeviceType" IsAbstract="false" SupportsEvents="false">
    <Children>
      <Object SymbolicName="tns:ParameterSet" TypeDefinition="tns:FunctionalGroupType" ModellingRule="Mandatory" />
      <Object SymbolicName="tns:ProfileSet" TypeDefinition="tns:FunctionalGroupType" ModellingRule="Mandatory" />
      <Object SymbolicName="tns:ClassSet" TypeDefinition="tns:FunctionalGroupType" ModellingRule="Mandatory" />
      <Object SymbolicName="tns:FunctionGroupSet" TypeDefinition="tns:FunctionalGroupType" ModellingRule="Mandatory" />
    </Children>
  </ObjectType>

  <!-- ProfileSet -->
  <ObjectType SymbolicName="tns:ProfileSet" BaseType="tns:FunctionalGroupType" IsAbstract="false" SupportsEvents="false">
    <Children>
      <Object SymbolicName="tns:SercosProfileIdentifier_Placeholder" TypeDefinition="tns:SercosProfileType" ModellingRule="OptionalPlaceholder">
        <BrowseName>&lt;SercosProfileIdentifier&gt;</BrowseName>
      </Object>
    </Children>
  </ObjectType>
  
  <!-- ClassSet -->
  <ObjectType SymbolicName="tns:ClassSet" BaseType="tns:FunctionalGroupType" IsAbstract="false" SupportsEvents="false">
    <Children>
      <Object SymbolicName="tns:SercosClassIdentifier_Placeholder" TypeDefinition="tns:SercosClassType" ModellingRule="OptionalPlaceholder">
        <BrowseName>&lt;SercosClassIdentifier&gt;</BrowseName>
      </Object>
    </Children>
  </ObjectType>

  <!-- FunctionGroupSet -->
  <ObjectType SymbolicName="tns:FunctionGroupSet" BaseType="tns:FunctionalGroupType" IsAbstract="false" SupportsEvents="false">
    <Children>
      <Object SymbolicName="tns:FunctionGroupIdentifier_Placeholder" TypeDefinition="tns:SercosFunctionGroupType" ModellingRule="OptionalPlaceholder">
        <BrowseName>&lt;FunctionGroupIdentifier&gt;</BrowseName>
      </Object>
    </Children>
  </ObjectType>

  <!-- SercosParameterType -->
  <VariableType SymbolicName="tns:SercosParameterType" BaseType="ua:BaseDataVariableType" DataType="ua:BaseDataType" ValueRank="ScalarOrArray">
    <Children>
      <Property SymbolicName="tns:Attribute" DataType="ua:UInt32" ValueRank="Scalar" ModellingRule="Mandatory" />
      <Property SymbolicName="tns:DisplayValue" DataType="ua:String" ValueRank="Scalar" ModellingRule="Mandatory" />
      <Property SymbolicName="tns:DisplayMaxValue" DataType="ua:String" ValueRank="Scalar" ModellingRule="Optional" />
      <Property SymbolicName="tns:DisplayMinValue" DataType="ua:String" ValueRank="Scalar" ModellingRule="Optional" />
      <Property SymbolicName="tns:Exponent" DataType="ua:SByte" ValueRank="Scalar" ModellingRule="Optional" />
      <Property SymbolicName="tns:MaxValue" DataType="ua:BaseDataType" ValueRank="Scalar" ModellingRule="Optional" />
      <Property SymbolicName="tns:MinValue" DataType="ua:BaseDataType" ValueRank="Scalar" ModellingRule="Optional" />
      <Property SymbolicName="tns:ProcedureCommand" DataType="ua:Boolean" ValueRank="Scalar" ModellingRule="Optional" />
    </Children>
  </VariableType>

</ModelDesign>
