use of org.apache.plc4x.java.opcuaserver.configuration.DeviceConfiguration in project plc4x by apache.
the class Plc4xNamespace method addNodes.
private void addNodes() {
for (DeviceConfiguration c : config.getDevices()) {
NodeId folderNodeId = newNodeId(c.getName());
UaFolderNode folderNode = new UaFolderNode(getNodeContext(), folderNodeId, newQualifiedName(c.getName()), LocalizedText.english(c.getName()));
getNodeManager().addNode(folderNode);
folderNode.addReference(new Reference(folderNode.getNodeId(), Identifiers.Organizes, Identifiers.ObjectsFolder.expanded(), false));
addConfiguredNodes(folderNode, c);
}
}
use of org.apache.plc4x.java.opcuaserver.configuration.DeviceConfiguration in project plc4x by apache.
the class Plc4xNamespace method addConfiguredNodes.
private void addConfiguredNodes(UaFolderNode rootNode, DeviceConfiguration c) {
final List<Tag> tags = c.getTags();
final String connectionString = c.getConnectionString();
for (int i = 0; i < tags.size(); i++) {
logger.info("Adding Tag " + tags.get(i).getAlias() + " - " + tags.get(i).getAddress());
String name = tags.get(i).getAlias();
final String tag = tags.get(i).getAddress();
Class datatype = null;
NodeId typeId = Identifiers.String;
UaVariableNode node = null;
Variant variant = null;
try {
datatype = plc4xServer.getField(tag, connectionString).getDefaultJavaType();
final int length = plc4xServer.getField(tag, connectionString).getNumberOfElements();
typeId = Plc4xCommunication.getNodeId(plc4xServer.getField(tag, connectionString).getPlcDataType());
if (length > 1) {
node = new UaVariableNode.UaVariableNodeBuilder(getNodeContext()).setNodeId(newNodeId(name)).setAccessLevel(AccessLevel.READ_WRITE).setUserAccessLevel(AccessLevel.READ_WRITE).setBrowseName(newQualifiedName(name)).setDisplayName(LocalizedText.english(name)).setDataType(typeId).setTypeDefinition(Identifiers.BaseDataVariableType).setValueRank(ValueRank.OneDimension.getValue()).setArrayDimensions(new UInteger[] { uint(length) }).build();
Object array = Array.newInstance(datatype, length);
for (int j = 0; j < length; j++) {
Array.set(array, j, false);
}
variant = new Variant(array);
} else {
node = new UaVariableNode.UaVariableNodeBuilder(getNodeContext()).setNodeId(newNodeId(name)).setAccessLevel(AccessLevel.READ_WRITE).setUserAccessLevel(AccessLevel.READ_WRITE).setBrowseName(newQualifiedName(name)).setDisplayName(LocalizedText.english(name)).setDataType(typeId).setTypeDefinition(Identifiers.BaseDataVariableType).build();
variant = new Variant(0);
}
node.setValue(new DataValue(variant));
node.getFilterChain().addLast(AttributeFilters.getValue(ctx -> plc4xServer.getValue(ctx, tag, connectionString)));
node.getFilterChain().addLast(AttributeFilters.setValue((ctx, value) -> {
if (length > 1) {
plc4xServer.setValue(tag, Arrays.toString((Object[]) value.getValue().getValue()), connectionString);
} else {
plc4xServer.setValue(tag, value.getValue().getValue().toString(), connectionString);
}
}));
} catch (PlcConnectionException e) {
logger.info("Couldn't find data type");
System.exit(1);
}
getNodeManager().addNode(node);
rootNode.addOrganizes(node);
}
}
Aggregations