/// <summary> /// 根据提供的nodeID读取相应的OPC节点值 /// </summary> /// <param name="nodeId"></param> /// <returns></returns> public string ReadDataFromOpcServer(string nodeId) { try { NodeId node = new NodeId(nodeId); DataValue dv = opcUaClient.ReadNode(node); return(dv.WrappedValue.Value.ToString()); } catch (Exception ex) { LogManager.WriteLog(LogFile.Trace, ex.Message); } return("0"); }
/// <summary> /// 根据提供的nodeID读取相应的OPC节点值 /// </summary> /// <param name="nodeID"></param> /// <returns></returns> public string ReadDataFromOpcServer(string nodeID) { try { string ret = ""; NodeId mNodeID = new NodeId(nodeID, 2); DataValue dv = opcUaClient.ReadNode(mNodeID); ret = dv.WrappedValue.Value.ToString(); return(ret); } catch (Exception ex) { LogManager.WriteLog(LogFile.Trace, ex.Message); return("ReadFail:" + ex.Message); } }
// ns=2;s=Robots/RobotA/RobotMode // ns=2;s=Robots/RobotA/UserFloat private void button3_Click(object sender, EventArgs e) { Opc.Ua.DataValue value = opcUaClient.ReadNode("ns=2;s=Robots/RobotA/RobotMode"); // 一个数据的类型是不是数组由 value.WrappedValue.TypeInfo.ValueRank 来决定的 // -1 说明是一个数值 // 1 说明是一维数组,如果类型BuiltInType是Int32,那么实际是int[] // 2 说明是二维数组,如果类型BuiltInType是Int32,那么实际是int[,] if (value.WrappedValue.TypeInfo.BuiltInType == Opc.Ua.BuiltInType.Int32) { if (value.WrappedValue.TypeInfo.ValueRank == Opc.Ua.ValueRanks.Scalar) { int temp = (int)value.WrappedValue.Value; // 最终值 } else if (value.WrappedValue.TypeInfo.ValueRank == Opc.Ua.ValueRanks.OneDimension) { int[] temp = (int[])value.WrappedValue.Value; // 最终值 } else if (value.WrappedValue.TypeInfo.ValueRank == Opc.Ua.ValueRanks.TwoDimensions) { int[,] temp = (int[, ])value.WrappedValue.Value; // 最终值 } } else if (value.WrappedValue.TypeInfo.BuiltInType == Opc.Ua.BuiltInType.UInt32) { uint temp = (uint)value.WrappedValue.Value; // 数组的情况参照上面的例子 } else if (value.WrappedValue.TypeInfo.BuiltInType == Opc.Ua.BuiltInType.Float) { float temp = (float)value.WrappedValue.Value; // 数组的情况参照上面的例子 } else if (value.WrappedValue.TypeInfo.BuiltInType == Opc.Ua.BuiltInType.String) { string temp = (string)value.WrappedValue.Value; // 数组的情况参照上面的例子 } else if (value.WrappedValue.TypeInfo.BuiltInType == Opc.Ua.BuiltInType.DateTime) { DateTime temp = (DateTime)value.WrappedValue.Value; // 数组的情况参照上面的例子 } }