Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
                    }
                }
            }
        }