public cacheDBTest() { j = JObject.Parse("{isInMemory:true, filename:'pollo.dat', juno:'bul'}"); cDB = new cacheDB(j); Opc.Ua.NamespaceTable nt = new Opc.Ua.NamespaceTable(); nt.Append("http://www.siemens.com/simatic-s7-opcua"); UANodeConverter ua = new UANodeConverter("nodeset.xml", nt); ua.fillCacheDB(cDB); }
public cacheDBTest() { string json_config = @"{ nodesDatabase:{ isInMemory:true, filename:'pollo.dat', juno:'bul' }, nodesLoader:{ filename:'nodeset.xml' } }"; j = JObject.Parse(json_config); cDB = new cacheDB(j); Opc.Ua.NamespaceTable nt = new Opc.Ua.NamespaceTable(); nt.Append("http://www.siemens.com/simatic-s7-opcua"); UANodeConverter ua = new UANodeConverter(j, nt); ua.fillCacheDB(cDB); }
public void fillCacheDB(cacheDB db) { if (m_UANodeset == null || m_UANodeset.Items.Length == 0) { throw new Exception("No UA nodes loaded"); } // fill the namespace in DB logger.Debug("filling cache DB "); for (int k = 0; k < m_namespaceURIs.Length; k++) { dbNamespace ns = new dbNamespace { internalIndex = k, URI = m_namespaceURIs[k], currentServerIndex = -1 }; logger.Debug("filling cache --- inserting : " + k); db.namespaces.Insert(ns); } logger.Debug("filling cache DB End "); // connect the server index to the corresponding xml_index db.updateNamespace(session_namespace); foreach (Opc.Ua.Export.UANode node in m_UANodeset.Items) { if (node.GetType().ToString() != "Opc.Ua.Export.UAVariable") { continue; } Opc.Ua.Export.UAVariable xml_node = node as UAVariable; // Apply userdefined matching criteria if (!selector.selectNode(xml_node)) { continue; } // creating the variableNode dbNode db_node = new dbNode(); db_node.classType = node.GetType().ToString(); // Assign NodeID db_node.identifier = getIdentifierToString(xml_node.NodeId); // Assign data type db_node.systemType = get_systemDataType(xml_node); // Assign internal index db_node.internalIndex = ((int)getNodeNamespaceIndex(xml_node.NodeId)); // Assign Rank and other // FIXME //db_node.ValueRank = xml_node.ValueRank; if (xml_node.ValueRank > 1) { logger.Error("Arrays are not supported yet. Skip Node: " + node.BrowseName); continue; } // skipping not built in types... FIXME if (!db_node.systemType.StartsWith("System") || db_node.systemType.ToLower() == "null") { logger.Error("Only System types are supported for now. Skip Node: " + node.BrowseName + " type: " + db_node.systemType); continue; } // assign user defined target name switch (_config.targetIdentifier.ToLower()) { case "displayname": if (xml_node.DisplayName != null && xml_node.DisplayName[0] != null) { db_node.name = node.DisplayName[0].Value; } else { logger.Error("Node: " + node.BrowseName + " does not have DisplayName, using browseName instead"); db_node.name = node.BrowseName; } break; case "browsename": db_node.name = node.BrowseName; break; case "nodeid": db_node.name = node.NodeId; break; default: logger.Fatal("This should not happen, targetID = {0}", _config.targetIdentifier.ToLower()); throw new Exception("targetID not allowed"); } // Adding node to cache DB db.insertNodeIfNotExist(db_node); } }
public void fillCacheDB(cacheDB db) { if (m_UANodeset == null || m_UANodeset.Items.Length == 0) { throw new Exception("No UA nodes loaded"); } // fill the namespace in DB logger.Debug("filling cache DB "); for (int k = 0; k < m_namespaceURIs.Length; k++) { dbNamespace ns = new dbNamespace { internalIndex = k, URI = m_namespaceURIs[k], currentServerIndex = -1 }; logger.Debug("filling cache --- inserting : " + k); db.namespaces.Insert(ns); } logger.Debug("filling cache DB End "); // connect the server index to the corresponding xml_index db.updateNamespace(session_namespace); foreach (Opc.Ua.Export.UANode node in m_UANodeset.Items) { if (node.GetType().ToString() == "Opc.Ua.Export.UAVariable") { bool skip = false; Opc.Ua.Export.UAVariable xml_node = node as UAVariable; // creating the variableNode dbNode db_node = new dbNode(); db_node.classType = node.GetType().ToString(); // Assign NodeID db_node.identifier = getIdentifierToString(xml_node.NodeId); // Assign data type db_node.systemType = get_systemDataType(xml_node); // Assign internal index db_node.internalIndex = ((int)getNodeNamespaceIndex(xml_node.NodeId)); // Assign Rank and other // FIXME //db_node.ValueRank = xml_node.ValueRank; if (xml_node.ValueRank > 1) { skip = true; logger.Error("Arrays are not supported yet. Skip Node: " + node.BrowseName); } // skipping not built in types... FIXME if (!db_node.systemType.StartsWith("System")) { skip = true; logger.Error("Only System types are supported for now. Skip Node: " + node.BrowseName + " type: " + db_node.systemType); } if (xml_node.DisplayName != null && xml_node.DisplayName[0] != null) { db_node.name = node.DisplayName[0].Value; } else { db_node.name = node.BrowseName; logger.Warn("Node: " + node.BrowseName + " does not have DisplayName, using browseName instead"); } if (db_node.systemType.ToLower() != "null" && !skip) { db.nodes.Insert(db_node); } } } }