2016-11-29 138 views
0

假設我想根據OPC-UA定義類型爲Person的「字段」NameAge(定義任何ByteStream結構的節點以及序列化/反序列化數據是很簡單的 - 這不是我所追求的)。我也想定義Person類型的變量節點person並一步寫入該節點。 如何做?如何定義和使用自定義結構類型?

請注意:當我有這樣的數據(Kevin, 47)更新person(Jane, 22)客戶應直接讀取當變量只有2對,不會像(Kevin,22)獲得認購,或。

我使用OPC-UA .Net官方堆棧,但我應該能夠從任何給定的框架「翻譯」。

回答

1

隨着OPC UA什麼一直試圖實現以上是可能的。它被稱爲信息建模..

這取決於OPC UA SDK(框架),以SDK是否支持..

如果SDK支持自定義對象類型,創建自定義變量類型,那麼可以使用簡單的節點集XML文件創建自定義類型。

在您的示例中,您可以創建一個名爲Person並創建一個相同的實例。如上所述,您將能夠實現推送通知。

請查找下面提到的Nodeset XML Snippet,用於創建自定義對象類型自定義變量並創建相同的實例。

<!-- Below XML logic will explain on how to create Custom Object Type and Custom Variable Type--> 
 

 
<UAObjectType NodeId="ns=2;s=PersonType" BrowseName="2:PersonType"> 
 
    <DisplayName>PersonType</DisplayName> 
 
    <Description>A Person Object Type</Description> 
 
    <References> 
 
    <Reference ReferenceType="HasComponent">ns=2;s=NameType</Reference> 
 
    <Reference ReferenceType="HasComponent">ns=2;s=AgeType</Reference> 
 
    <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference> 
 
    </References> 
 
</UAObjectType> 
 

 
<UAVariableType NodeId="ns=2;s=AgeType" BrowseName="2:AgeType" DataType="Byte"> 
 
    <DisplayName>AgeType</DisplayName> 
 
    <Description>A Age variable type. it is component of AgeType</Description> 
 
    <References> 
 
    <Reference ReferenceType="HasComponent" IsForward="false" >ns=2;s=PersonType</Reference> 
 
    <Reference ReferenceType="HasSubtype" IsForward="false">i=63</Reference> 
 
    </References> 
 
</UAVariableType> 
 

 
<UAVariableType NodeId="ns=2;s=NameType" BrowseName="2:NameType" DataType="LocalizedText"> 
 
    <DisplayName>NameType</DisplayName> 
 
    <Description>A Name Variable type. it is component of NameType</Description> 
 
    <References> 
 
    <Reference ReferenceType="HasComponent" IsForward="false" >ns=2;s=PersonType</Reference> 
 
    <Reference ReferenceType="HasSubtype" IsForward="false">i=63</Reference> 
 
    </References> 
 
</UAVariableType> 
 

 
<!-- Below XML logic will explain on how to create instance of an object using above mentioned types--> 
 
<!-- This will create a person1 object inside the Object folder --> 
 

 
<UAObject NodeId="ns=2;s=Person1" BrowseName="2:Person1"> 
 
    <DisplayName>Person1</DisplayName> 
 
    <References> 
 
    <Reference ReferenceType="Organizes" IsForward="false">i=85</Reference> 
 
    <Reference ReferenceType="HasComponent">ns=2;s=Name1</Reference> 
 
    <Reference ReferenceType="HasComponent">ns=2;s=Age1</Reference> 
 
    <Reference ReferenceType="HasTypeDefinition" IsForward="false">ns=2;s=PersonType</Reference> 
 
    </References> 
 
</UAObject> 
 

 
<UAVariable NodeId="ns=2;s=Age1" BrowseName="2:Age1" DataType="Byte"> 
 
    <DisplayName>Age1</DisplayName> 
 
    <Description>A Age variable type. it is component of AgeType</Description> 
 
    <References> 
 
    <Reference ReferenceType="HasComponent" IsForward="false" >ns=2;s=Person1</Reference> 
 
    <Reference ReferenceType="HasTypeDefinition" IsForward="false">ns=2;s=AgeType</Reference> 
 
    </References> 
 
    <Value> 
 
    <Byte>10</Byte> 
 
    </Value> 
 
</UAVariable> 
 

 
<UAVariable NodeId="ns=2;s=Name1" BrowseName="2:Name1" DataType="LocalizedText"> 
 
    <DisplayName>Name1</DisplayName> 
 
    <Description>A Name Variable type. it is component of NameType</Description> 
 
    <References> 
 
    <Reference ReferenceType="HasComponent" IsForward="false" >ns=2;s=Person1</Reference> 
 
    <Reference ReferenceType="HasTypeDefinition" IsForward="false">ns=2;s=NameType</Reference> 
 
    </References> 
 
    <Value> 
 
    <LocalizedText> 
 
     <Locale>en</Locale> 
 
     <Text>MyName</Text> 
 
    </LocalizedText> 
 
    </Value> 
 
</UAVariable>

如果SDK支持節點集文件解析,那麼請把這個片段在現有的節點集文件並導入。或者創建一個節點集文件並將這個片段並導入到您的服務器代碼中。

這將很容易地創建一個對象類型及其實例。

我希望這會有所幫助。

謝謝。

+0

非常感謝,我現在無法測試並將其翻譯成代碼,但我會盡快嘗試。你的回答對我很有幫助,所以再次感謝你! – astrowalker

+0

當然..歡迎..請讓我知道,如果你需要更多的細節.. –

相關問題