如何在OPC UA命名空间XML中设置Float变量的ValuePrecision
OPC UA Float变量通过ValuePrecision设置精度的正确XML配置
可行性确认
可以通过DataItemType的ValuePrecision属性设置Float变量的精度。该属性是DataItemType的标准属性,用于指定数值类型变量(包括Float、Double)的显示或处理精度,取值规则如下:
- 值为
-1:使用变量数据类型的默认精度(Float默认约6-7位有效数字) - 值为正数:指定保留的小数位数(如
2表示保留两位小数)
现有配置的问题
你当前的XML错误在于自定义了ValuePrecision属性节点,但DataItemType已经自带标准的ValuePrecision属性(NodeId i=884),OPC UA栈只会识别标准属性作为精度配置项,自定义的同名属性无法被解析。
正确的XML配置步骤
- 确保Float变量的类型为DataItemType或其子类型(如AnalogItemType,NodeId
i=2365) - 移除自定义的
ns=1;i=3ValuePrecision变量节点 - 在Float变量的
<References>中添加对标准ValuePrecision属性的引用,并通过<Extension>或直接设置属性值(部分UA栈支持直接在变量节点内配置属性值)
修正后的XML示例
<?xml version="1.0" encoding="utf-8"?> <UANodeSet LastModified="2023-10-03T09:41:55Z" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd" xmlns:si="http://www.siemens.com/OPCUA/2017/SimaticNodeSetExtensions"> <NamespaceUris> <Uri>test</Uri> </NamespaceUris> <Aliases> <Alias Alias="FLOAT">i=10</Alias> <Alias Alias="DOUBLE">i=11</Alias> <Alias Alias="Organizes">i=35</Alias> <Alias Alias="HasTypeDefinition">i=40</Alias> <Alias Alias="HasProperty">i=46</Alias> <Alias Alias="AnalogItemType">i=2365</Alias> <Alias Alias="ValuePrecision">i=884</Alias> </Aliases> <UAVariable NodeId="ns=1;i=1" BrowseName="1:float" DataType="FLOAT" AccessLevel="3"> <DisplayName>float</DisplayName> <Description>float</Description> <References> <Reference ReferenceType="HasTypeDefinition">AnalogItemType</Reference> <Reference ReferenceType="HasProperty">ValuePrecision</Reference> <Reference ReferenceType="Organizes" IsForward="false">i=85</Reference> </References> <Value> <uax:Float>12.3456789123456789</uax:Float> </Value> <!-- 配置ValuePrecision属性的值 --> <Extensions> <Extension> <UAVariable NodeId="ValuePrecision" ParentNodeId="ns=1;i=1" DataType="DOUBLE"> <Value> <uax:Double>2</uax:Double> </Value> </UAVariable> </Extension> </Extensions> </UAVariable> </UANodeSet>
关键说明
- 使用别名
ValuePrecision引用标准属性节点i=884,避免硬编码节点ID - 通过
<Extensions>配置标准属性的取值,这里设置为2表示保留两位小数 - 若UA栈不支持
<Extensions>方式,也可以单独定义标准属性的实例,但需确保ParentNodeId指向Float变量,且NodeId继承自标准属性(如ns=1;i=884,命名空间与变量一致)
内容的提问来源于stack exchange,提问作者sjoene
相关产品推荐
相关产品推荐

