Hi Kevin, I have a problem with my code. I want to have value, lower limits and upper limit in a folder but I discover that when I have the data Type as real using my xml file, I get all 3 folders but I want my values in float/double. When I change it to dataType to float in my xml file. upper limit and lowerlimit does not appear in my Tag structure. I don’t know what is causing it. Here is a snippet of my code.
if ("float".equalsIgnoreCase(dataType) || "double".equalsIgnoreCase(dataType)) {
float defaultValue = (float) currParam.getDouble("dval");
float upperLimit = (float) currParam.getDouble("ul");
float lowerLimit = (float) currParam.getDouble("ll");
logger.info("Creating Value node for " + paramName);
// Create the Default Value Node
UaVariableNode defaultValueNode = UaVariableNode.builder(getNodeContext())
.setNodeId(deviceContext.nodeId(String.format("Medtronic.Recipe.Parameters.%s.Value", paramName)))
.setBrowseName(deviceContext.qualifiedName("Value"))
.setDisplayName(new LocalizedText("Value"))
.setDataType(BuiltinDataType.Float.getNodeId())
.setTypeDefinition(Identifiers.BaseDataVariableType)
.setAccessLevel(AccessLevel.READ_WRITE)
.setUserAccessLevel(AccessLevel.READ_WRITE)
.build();
defaultValueNode.setValue(new DataValue(new Variant((float)defaultValue)));
getNodeManager().addNode(defaultValueNode);
paramFolder.addOrganizes(defaultValueNode);
// Create the Upper Limit Node
UaVariableNode upperLimitNode = UaVariableNode.builder(getNodeContext())
.setNodeId(deviceContext.nodeId(String.format("Medtronic.Recipe.Parameters.%s.UpperLimit", paramName)))
.setBrowseName(deviceContext.qualifiedName("UpperLimit"))
.setDisplayName(new LocalizedText("Upper Limit"))
.setDataType(BuiltinDataType.Float.getNodeId())
.setTypeDefinition(Identifiers.BaseDataVariableType)
.setAccessLevel(AccessLevel.READ_WRITE)
.setUserAccessLevel(AccessLevel.READ_WRITE)
.build();
upperLimitNode.setValue(new DataValue(new Variant((float)upperLimit)));
getNodeManager().addNode(upperLimitNode);
paramFolder.addOrganizes(upperLimitNode);
// Create the Lower Limit Node
UaVariableNode lowerLimitNode = UaVariableNode.builder(getNodeContext())
.setNodeId(deviceContext.nodeId(String.format("Medtronic.Recipe.Parameters.%s.LowerLimit", paramName)))
.setBrowseName(deviceContext.qualifiedName("LowerLimit"))
.setDisplayName(new LocalizedText("Lower Limit"))
.setDataType(BuiltinDataType.Float.getNodeId())
.setTypeDefinition(Identifiers.BaseDataVariableType)
.setAccessLevel(AccessLevel.READ_WRITE)
.setUserAccessLevel(AccessLevel.READ_WRITE)
.build();
lowerLimitNode.setValue(new DataValue(new Variant((float)lowerLimit)));
getNodeManager().addNode(lowerLimitNode);
paramFolder.addOrganizes(lowerLimitNode);
logger.info("Created Value, UpperLimit, and LowerLimit under folder: " + paramName);
}
else {
String defaultValue = currParam.getString("dval");
// Create the Default Value Tag for non-real types
UaVariableNode defaultValueNode = UaVariableNode.builder(getNodeContext())
.setNodeId(deviceContext.nodeId(String.format("Medtronic.Recipe.%s", paramName)))
.setBrowseName(deviceContext.qualifiedName(paramName))
.setDisplayName(new LocalizedText(paramName))
.setDataType(BuiltinDataType.String.getNodeId())
.setTypeDefinition(Identifiers.BaseDataVariableType)
.setAccessLevel(AccessLevel.READ_WRITE)
.setUserAccessLevel(AccessLevel.READ_WRITE)
.build();
defaultValueNode.setValue(new DataValue(new Variant(defaultValue)));
getNodeManager().addNode(defaultValueNode);
paramFolder.addOrganizes(defaultValueNode);
}
This is my xml file as well: {"params":
[{"name":"AIR_RATE_BOT","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"AIR_RATE_TOP","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"AREA_SPEED_BOT","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"AREA_SPEED_TOP","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"FLOW_RATE_1_BOT","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"FLOW_RATE_1_TOP","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"FLOW_RATE_2_BOT","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"FLOW_RATE_2_TOP","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"PUMP1_BOT","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"PUMP1_TOP","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"PUMP2_BOT","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"PUMP2_TOP","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"Z_HEIGHT_BOT","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"Z_HEIGHT_TOP","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"NOZZLE_1_POWER_BOT","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"NOZZLE_1_POWER_TOP","dt":"float","dval":3,"ul":5,"ll":1},
{"name":"Mix Lot A Consumable Name","dt":"string","dval":"testing"},
{"name":"Mix Lot B Consumable Name","dt":"string","dval":"testing"},]}
When my dataType is set to “Float” in my xml data
When my dataType is set to “real” in my xml


