2017-03-29 835 views
0

這是一個示例。OPC UA按路徑節點讀取字符串[]數據類型

Node Path = "Tool/Manager/Name" 

Node data Type = "string"和數據是"Jone"

當我使用nodesToRead.Add(new NodeId(path, 6));是工作!

但是,如果我改變節點數據string[]{"Jone","Peter","Himari"}

當我使用nodesToRead.Add(new NodeId(path, 6)),它返回一個System.string[]。我需要使用一些方法來獲取字符串[0]數據。

如何通過只有節點路徑讀取「Jone」而不做一些方法來獲得「Jone」?


這是用Softing(軟件)來讀取我的服務器。它讀取一個數組類型。 {AA,NN,CC}

我想知道如何通過設置瀏覽名稱來讀取每個元素?

例如:只能通過設置Browse Name?來讀取「AA」。

enter image description here

由於西門子OPC Server可以讀讀通過設置瀏覽名稱的每個元素。

它的Browse Name可以像設置AxisNameList [u1,1]一樣讀取數組{1}和它的配置只瀏覽一個節點,比如「AxisNameList」節點。

如果我發佈這個路徑「AxisNameList」,它會通過請求數組[0]數據。

如果我發佈這個路徑「AxisNameList [u1,1]」,它將通過請求數組[1]數據。

如果我想實現這個功能,我該如何修改我的OPC UA服務器?

回答

0

OPC UA規範第4部分

5.10.2讀服務 讀取服務的參數被定義爲以下

Read Service Parameters

類型的nodesToRead []是ReadValueId, 其被定義爲以下

ReadValueId DataType

indexRange是您需要的參數。

因此,OPC UA支持讀取數組中的單個元素。 但我不知道你的SDK是否支持它。

這裏是我使用的sdk中的readparameters的數據類型。

struct ReadParameters 
{ 
    double MaxAge; 
    OpcUa::TimestampsToReturn TimestampsToReturn; 
    std::vector<OpcUa::ReadValueId> AttributesToRead; 

    ReadParameters(); 
}; 
struct ReadValueId 
{ 
    OpcUa::NodeId NodeId; 
    OpcUa::AttributeId AttributeId; 
    std::string IndexRange; 
    OpcUa::QualifiedName DataEncoding; 
}; 
+0

我去使用節點路徑獲取數組數據而不使用某些方法。 –

+0

因爲當我使用西門子數控機牀。它可以像/ Channel/MachineAxis/measPos2 [u1,1]一樣讀取位置。 –

+0

但是當我看到它的節點列表。它只是節點路徑爲/ Channel/MachineAxis/measPos2 –