0
對於我的生活,我無法找到我認爲會是一個簡單問題的答案 - 如何找到OPC節點的數據類型。UA OPC服務器數據類型
我正在寫一個UA OPC庫,其中涉及創建一個訂閱以及此訂閱中的標記的監視/更新。
寫入標籤的請求來自外部應用程序,由訂閱和標籤ID以及對象值組成。問題是這個對象總是一個字符串(不要求),它需要被轉換爲標籤的適當數據類型。所以,我需要找出哪些數據類型與標籤關聯。目前,寫入失敗的類型不匹配異常。
這裏是我的更新代碼:
//
// Extension methods
public bool Write<T>(long groupID, long tagID, T item)
{
var sub = FindSubscription(groupID);
try
{
if (sub != null)
{
var node = sub.MonitoredItems.FirstOrDefault(m => (long)m.Handle == tagID);
if (node != null)
{
bool result = false;
var nodesToWrite = BuildWriteValueCollection(node.DisplayName, Attributes.Value, item);
StatusCodeCollection results;
DiagnosticInfoCollection diag;
try
{
_session.Write(
requestHeader: null,
nodesToWrite: nodesToWrite,
results: out results,
diagnosticInfos: out diag);
result = CheckReturnValue(results[0]);
}
catch (Exception ex)
{
}
}
}
}
catch (Exception ex)
{
LogMessage(String.Format("Write GroupID {0}, Tag {1}, Value {2}", groupID, tagID, item.ToString()), ex);
}
return false;
}
我搜索了好半天,找出如何確定節點的數據類型,但沒有成功。因此,對於MonitoredItem,如何找到數據類型以便我可以將字符串轉換爲兼容類型?
感謝
史蒂夫
謝謝,但我怎麼從一個MonitoredItem獲得 - 我看不到DataType屬性? –
從MonitoredItem獲取其NodeId並調用請求AttributeId.DataType的Read服務。我不知道nodeopcua是如何工作的 - 當你有一個對節點的引用時,它可能沒有爲你讀取基本屬性,如果有的話,所以你需要從服務器上讀取DataType屬性。 –
感謝您的額外信息...現在我有一個6的DataValue?這意味着什麼?對不起,你必須意識到你正在和一個非常非常密集的人談話。我已經寫了很多DA客戶端應用程序,但是我很驚訝於找出這樣一個簡單明顯的數據請求是多麼困難......對於每個寫入(每分鐘可能有數千個數據)我不得不做一個單獨的調用來找出我要寫入的節點的數據類型....我有節點,我知道節點,爲什麼這個(數據類型)不是一個默認屬性這個節點? –