Skip to content

Commit

Permalink
Add DataTypeDefinition for complex types (V1.04) (Azure-Samples#30)
Browse files Browse the repository at this point in the history
* Create the modelcompiler output to support DataTypeDefinitions

* reduce number of UA assemblies used

Co-authored-by: Hans Gschossmann <[email protected]>
  • Loading branch information
mregen and hansgschossmann authored Nov 19, 2020
1 parent cc19ed4 commit a2a0e16
Show file tree
Hide file tree
Showing 5 changed files with 120 additions and 9 deletions.
2 changes: 1 addition & 1 deletion src/Boiler/BoilerModel.NodeSet2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
</NamespaceUris>
<Models>
<Model ModelUri="http://microsoft.com/Opc/OpcPlc/Boiler">
<RequiredModel ModelUri="http://opcfoundation.org/UA/" Version="1.04" PublicationDate="2019-05-01T00:00:00Z" />
<RequiredModel ModelUri="http://opcfoundation.org/UA/" Version="1.04.6" PublicationDate="2020-04-10T00:00:00Z" />
</Model>
</Models>
<Aliases>
Expand Down
Binary file modified src/Boiler/BoilerModel.PredefinedNodes.uanodes
Binary file not shown.
105 changes: 105 additions & 0 deletions src/Boiler/BoilerModel.PredefinedNodes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,51 @@
<uax:SuperTypeId>
<uax:Identifier>i=22</uax:Identifier>
</uax:SuperTypeId>
<uax:DataTypeDefinition>
<uax:TypeId>
<uax:Identifier>i=14798</uax:Identifier>
</uax:TypeId>
<uax:Body>
<uax:StructureDefinition>
<uax:BaseDataType>
<uax:Identifier>i=22</uax:Identifier>
</uax:BaseDataType>
<uax:StructureType>Structure_0</uax:StructureType>
<uax:Fields>
<uax:StructureField>
<uax:Name>Temperature</uax:Name>
<uax:DataType>
<uax:Identifier>ns=1;i=15001</uax:Identifier>
</uax:DataType>
<uax:ValueRank>-1</uax:ValueRank>
<uax:ArrayDimensions />
<uax:MaxStringLength>0</uax:MaxStringLength>
<uax:IsOptional>false</uax:IsOptional>
</uax:StructureField>
<uax:StructureField>
<uax:Name>Pressure</uax:Name>
<uax:DataType>
<uax:Identifier>i=6</uax:Identifier>
</uax:DataType>
<uax:ValueRank>-1</uax:ValueRank>
<uax:ArrayDimensions />
<uax:MaxStringLength>0</uax:MaxStringLength>
<uax:IsOptional>false</uax:IsOptional>
</uax:StructureField>
<uax:StructureField>
<uax:Name>HeaterState</uax:Name>
<uax:DataType>
<uax:Identifier>ns=1;i=15014</uax:Identifier>
</uax:DataType>
<uax:ValueRank>-1</uax:ValueRank>
<uax:ArrayDimensions />
<uax:MaxStringLength>0</uax:MaxStringLength>
<uax:IsOptional>false</uax:IsOptional>
</uax:StructureField>
</uax:Fields>
</uax:StructureDefinition>
</uax:Body>
</uax:DataTypeDefinition>
</BoilerDataType>
<BoilerTemperatureType xmlns="http://microsoft.com/Opc/OpcPlc/Boiler">
<uax:NodeClass>DataType_64</uax:NodeClass>
Expand All @@ -36,6 +81,41 @@
<uax:SuperTypeId>
<uax:Identifier>i=22</uax:Identifier>
</uax:SuperTypeId>
<uax:DataTypeDefinition>
<uax:TypeId>
<uax:Identifier>i=14798</uax:Identifier>
</uax:TypeId>
<uax:Body>
<uax:StructureDefinition>
<uax:BaseDataType>
<uax:Identifier>i=22</uax:Identifier>
</uax:BaseDataType>
<uax:StructureType>Structure_0</uax:StructureType>
<uax:Fields>
<uax:StructureField>
<uax:Name>Top</uax:Name>
<uax:DataType>
<uax:Identifier>i=6</uax:Identifier>
</uax:DataType>
<uax:ValueRank>-1</uax:ValueRank>
<uax:ArrayDimensions />
<uax:MaxStringLength>0</uax:MaxStringLength>
<uax:IsOptional>false</uax:IsOptional>
</uax:StructureField>
<uax:StructureField>
<uax:Name>Bottom</uax:Name>
<uax:DataType>
<uax:Identifier>i=6</uax:Identifier>
</uax:DataType>
<uax:ValueRank>-1</uax:ValueRank>
<uax:ArrayDimensions />
<uax:MaxStringLength>0</uax:MaxStringLength>
<uax:IsOptional>false</uax:IsOptional>
</uax:StructureField>
</uax:Fields>
</uax:StructureDefinition>
</uax:Body>
</uax:DataTypeDefinition>
</BoilerTemperatureType>
<BoilerHeaterStateType xmlns="http://microsoft.com/Opc/OpcPlc/Boiler">
<uax:NodeClass>DataType_64</uax:NodeClass>
Expand All @@ -53,6 +133,31 @@
<uax:SuperTypeId>
<uax:Identifier>i=29</uax:Identifier>
</uax:SuperTypeId>
<uax:DataTypeDefinition>
<uax:TypeId>
<uax:Identifier>i=14799</uax:Identifier>
</uax:TypeId>
<uax:Body>
<uax:EnumDefinition>
<uax:Fields>
<uax:EnumField>
<uax:Value>0</uax:Value>
<uax:DisplayName>
<uax:Text>Off</uax:Text>
</uax:DisplayName>
<uax:Name>Off</uax:Name>
</uax:EnumField>
<uax:EnumField>
<uax:Value>1</uax:Value>
<uax:DisplayName>
<uax:Text>On</uax:Text>
</uax:DisplayName>
<uax:Name>On</uax:Name>
</uax:EnumField>
</uax:Fields>
</uax:EnumDefinition>
</uax:Body>
</uax:DataTypeDefinition>
<EnumStrings xmlns="http://opcfoundation.org/UA/">
<uax:NodeClass>Variable_2</uax:NodeClass>
<uax:NodeId>
Expand Down
19 changes: 12 additions & 7 deletions src/Boiler/BuildDesign.bat
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
@echo off

echo Building ModelDesign

docker run --mount type=bind,source=%CD%,target=/model sailavid/ua-modelcompiler -- -console -d2 /model/ModelDesign.xml -cg /model/ModelDesign.csv -o2 /model -version v104

echo Success!
@echo off

echo Building ModelDesign

REM Issue> The ModelCompiler from docker doesn't create the DataTypeDefinition'
REM docker run --mount type=bind,source=%CD%,target=/model sailavid/ua-modelcompiler -- -console -version v104 -d2 /model/ModelDesign.xml -cg /model/ModelDesign.csv -o2 /model

REM Build master branch in https://github.com/OPCFoundation/UA-ModelCompiler
REM add ModelCompiler build output folder to PATH
Opc.Ua.ModelCompiler.exe -version v104 -d2 ".\ModelDesign.xml" -c ".\ModelDesign.csv" -o2 ".\"

echo Success!
3 changes: 2 additions & 1 deletion src/opc-plc.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@
<ItemGroup>
<PackageReference Include="Mono.Options" Version="6.6.0.161" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua.Symbols" Version="1.4.363.107" />
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua.Core.Debug" Version="1.4.363.107" />
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua.Server.Debug" Version="1.4.363.107" />
<PackageReference Include="Serilog.Extensions.Logging" Version="3.0.1" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
<PackageReference Include="Serilog.Sinks.File" Version="4.1.0" />
Expand Down

0 comments on commit a2a0e16

Please sign in to comment.