Skip to content

Commit e470270

Browse files
committed
Redesigned ICL working
1 parent e081c9f commit e470270

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

NodeSetToAML.cs

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ public class NodeSetToAML
7676
private const string MetaModelName = "OpcAmlMetaModel";
7777
private const string UaBaseRole = "UaBaseRole";
7878
private const string MethodNodeClass = "UaMethodNodeClass";
79+
private const string RefClassConnectsToPath = "RefClassConnectsToPath";
80+
private const string IsSource = "IsSource";
7981
private ModelManager m_modelManager;
8082
private CAEXDocument m_cAEXDocument;
8183
private AttributeTypeLibType m_atl_temp;
@@ -798,9 +800,30 @@ SystemUnitFamilyType FindOrAddSUC(ref SystemUnitClassLibType scl, ref RoleClassL
798800

799801
#endregion
800802

801-
803+
802804
#region ICL
803805

806+
private void OverrideAttribute(IClassWithBaseClassReference owner, string Name, string AttType, object val)
807+
{
808+
var atts = owner.GetInheritedAttributes();
809+
foreach(var aa in atts)
810+
{
811+
if (aa.Name == Name)
812+
{
813+
if (aa.AttributeDataType == AttType && aa.AttributeValue.Equals(val))
814+
{
815+
return; // no need to override
816+
}
817+
}
818+
}
819+
820+
AttributeType a = owner.Attribute.Append();
821+
a.Name = Name;
822+
a.AttributeDataType = AttType;
823+
a.AttributeValue = val;
824+
825+
}
826+
804827
private void ProcesReferenceType(ref InterfaceClassLibType icl, NodeId nodeId)
805828
{
806829
var refnode = m_modelManager.FindNode<NodeSet.UAReferenceType>(nodeId);
@@ -834,7 +857,7 @@ private void ProcesReferenceType(ref InterfaceClassLibType icl, NodeId nodeId)
834857
}
835858
}
836859

837-
860+
838861
// ovveride any attribute values
839862
if (BaseNodeId != null)
840863
{
@@ -847,6 +870,12 @@ private void ProcesReferenceType(ref InterfaceClassLibType icl, NodeId nodeId)
847870

848871
if (refnode.InverseName != null)
849872
AddModifyAttribute( true, added.Attribute, "InverseName", "LocalizedText", refnode.InverseName[0].Value);
873+
874+
OverrideAttribute(added, IsSource, "xs:boolean", true);
875+
OverrideAttribute(added, RefClassConnectsToPath, "xs:string", (inverseAdded != null ? inverseAdded.CAEXPath() : added.CAEXPath()));
876+
877+
878+
850879

851880
if (inverseAdded != null)
852881
{
@@ -856,6 +885,9 @@ private void ProcesReferenceType(ref InterfaceClassLibType icl, NodeId nodeId)
856885
if (basenode.Symmetric != refnode.Symmetric)
857886
OverrideBooleanAttribute(inverseAdded.Attribute, "Symmetric", refnode.Symmetric);
858887
AddModifyAttribute( true, inverseAdded.Attribute, "InverseName", "LocalizedText", refnode.DecodedBrowseName.Name);
888+
// OverrideBooleanAttribute(inverseAdded.Attribute, "IsSource", false);
889+
OverrideAttribute(inverseAdded, IsSource, "xs:boolean", false);
890+
OverrideAttribute(inverseAdded, RefClassConnectsToPath, "xs:string", added.CAEXPath());
859891

860892
}
861893

Opc2Aml.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
</PropertyGroup>
1111

1212
<ItemGroup>
13-
<PackageReference Include="Aml.Engine" Version="1.7.0" />
14-
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua" Version="1.4.367.42" />
13+
<PackageReference Include="Aml.Engine" Version="1.7.2" />
14+
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua" Version="1.4.367.75" />
1515
</ItemGroup>
1616

1717
<ItemGroup>

0 commit comments

Comments
 (0)