示例#1
0
        //----------------------------------------------------------------------
        /// <summary>
        /// Loads the specified XML file and deserializes into an array structure, which is
        /// stored in this object. Access methods return selected information in the
        /// proper type for XML-DA server calls.
        /// </summary>
        /// <param name="fileName">Path name of the XML file, containing the required item
        /// definition lists.</param>
        public void Load(string fileName)
        {
            XmlSerializer xSer   = new XmlSerializer(typeof(DefinitionList));
            TextReader    reader = new StreamReader(fileName);

            if (reader == null)
            {
                throw new Exception("The TextReader could not be created for " + fileName);
            }
            DefinitionList cfgList = (DefinitionList)xSer.Deserialize(reader);

            reader.Close();
            ItemElement[] def = DefToItemArray(cfgList);
            Items = new ItemData[def.Length];
            for (int i = 0; i < def.Length; ++i)
            {
                Items[i]           = new ItemData();
                Items[i].handle    = def[i].handle;
                Items[i].name      = def[i].name;
                Items[i].itemDefs  = def[i].itemDefs;
                Items[i].Value     = def[i].Value;
                Items[i].Timestamp = DateTime.UtcNow;
                if (def[i].itemDefs.qualitySpecified)
                {
                    Items[i].Quality = def[i].itemDefs.quality;
                }
                else
                {
                    Items[i].Quality = OPCQuality.UNCERTAIN;
                }
            }
        }
示例#2
0
        //----------------------------------------------------------------------------
        // Convert the configuration into an item definition array.
        // The item parameters are constructed from the item and branch definitions. If a
        // parameter is not defined with the item, then the branch definition is used.
        public ItemElement[] DefToItemArray(DefinitionList cfgList)
        {
            ArrayList itemList = new ArrayList(); // of ItemElement

            BranchSeparator = cfgList.BranchSeperatorChar.ToString();
            handleBranch(cfgList.DefinitionsRoot, "", itemList);

            return((ItemElement[])itemList.ToArray(typeof(ItemElement)));
        }
示例#3
0
        /// <summary>
        /// Loads an XML file that is embedded in the application EXE and deserializes into an
        /// array structure, which is stored in this object.
        /// Access methods return selected information in the proper type for XML-DA server calls.
        /// To embed the file in the application EXE, the XML file needs to be included in the
        /// Visual Studio project, and the build action for this file has to be set to 'Embedded Resource'.
        /// </summary>
        /// <param name="namespaceFileName">Name of the embedded XML file, containing the required item
        /// definition lists. Specify the file name exactly as it is shown in the solution File list and
        /// precede it with the Namespace of the defining assembly.
        /// E.g. NSPlugin.Sample.xml</param>
        public void LoadEmbedded(string namespaceFileName)
        {
            Assembly   myAsmb = System.Reflection.Assembly.GetCallingAssembly();
            Stream     stream = myAsmb.GetManifestResourceStream(namespaceFileName);
            TextReader reader = new StreamReader(stream);

            if (reader == null)
            {
                if (NSPlugin.GenericServer.TraceLog != null)
                {
                    NSPlugin.LogFile.Write("The TextReader could not be created for " + namespaceFileName);
                }
                throw new Exception("The TextReader could not be created for " + namespaceFileName);
            }
            XmlSerializer  xSer    = new XmlSerializer(typeof(DefinitionList));
            DefinitionList cfgList = (DefinitionList)xSer.Deserialize(reader);

            reader.Close();
            ItemElement[] def = DefToItemArray(cfgList);
            Items = new ItemData[def.Length];
            for (int i = 0; i < def.Length; ++i)
            {
                Items[i]           = new ItemData();
                Items[i].handle    = def[i].handle;
                Items[i].name      = def[i].name;
                Items[i].itemDefs  = def[i].itemDefs;
                Items[i].Value     = def[i].Value;
                Items[i].Timestamp = DateTime.UtcNow;
                if (def[i].itemDefs.qualitySpecified)
                {
                    Items[i].Quality = def[i].itemDefs.quality;
                }
                else
                {
                    Items[i].Quality = OPCQuality.UNCERTAIN;
                }
            }
        }
示例#4
0
        private void writeOpcServerConfig(string fileName)
        {
            /*OPCServerConfig opcServerConfig = new OPCServerConfig();
             * List<string> inputsList = new List<string>();
             * List<string> outputsList = new List<string>();
             *
             * if (inputVars != null)
             * {
             *  foreach (NuTraceVariable inputVar in inputVars)
             *  {
             *      inputsList.Add(inputVar.Variable);
             *  }
             * }
             * if (outputVars != null)
             * {
             *  foreach (NuTraceVariable outputVar in outputVars)
             *  {
             *      outputsList.Add(outputVar.Variable);
             *  }
             * }
             * opcServerConfig.InputVariables = inputsList;
             * opcServerConfig.OutputVariables = outputsList;
             * opcServerConfig.SocketHost = "localhost";
             * opcServerConfig.SocketPort = 11000;*/

            ConfigBuilder.DefinitionList serverInemsDeflist = new ConfigBuilder.DefinitionList();
            {
                serverInemsDeflist.BranchSeperatorChar = '.';
                ConfigBuilder.BranchElement root = new BranchElement();
                {
                    root.name = "CIROS Connector";
                    ConfigBuilder.ConfigDefs defaultBranchConfig = new ConfigDefs();
                    defaultBranchConfig.activeDef              = true;
                    defaultBranchConfig.accRightSpecified      = false;
                    defaultBranchConfig.dataTypeSpecified      = false;
                    defaultBranchConfig.qualitySpecified       = false;
                    defaultBranchConfig.signalTypeSpecified    = false;
                    defaultBranchConfig.scanRateSpecified      = false;
                    defaultBranchConfig.deviceIDSpecified      = false;
                    defaultBranchConfig.deviceAddrSpecified    = false;
                    defaultBranchConfig.deviceSubAddrSpecified = false;
                    defaultBranchConfig.user1Specified         = false;
                    defaultBranchConfig.user2Specified         = false;
                    root.branchDefs = defaultBranchConfig;

                    ItemElement dummyItem = new ItemElement();
                    {
                        dummyItem.name                       = "dummyItem";
                        dummyItem.handle                     = 0;
                        dummyItem.itemDefs                   = new ConfigDefs();
                        dummyItem.Value                      = Convert.ToInt32(0);
                        dummyItem.itemDefs.dataType          = drvtypes.Type.SHORT;
                        dummyItem.itemDefs.activeDef         = true;
                        dummyItem.itemDefs.accRightSpecified = false;

                        dummyItem.itemDefs.dataTypeSpecified      = true;
                        dummyItem.itemDefs.qualitySpecified       = false;
                        dummyItem.itemDefs.signalTypeSpecified    = false;
                        dummyItem.itemDefs.scanRateSpecified      = false;
                        dummyItem.itemDefs.deviceIDSpecified      = false;
                        dummyItem.itemDefs.deviceAddrSpecified    = false;
                        dummyItem.itemDefs.deviceSubAddrSpecified = false;
                        dummyItem.itemDefs.user1Specified         = false;
                        dummyItem.itemDefs.user2Specified         = false;
                    }
                    root.items    = new ItemElement[1];
                    root.items[0] = dummyItem;

                    if (inputVars != null)
                    {
                        root.subBranches         = new BranchElement[1]; //TODO: 2
                        root.subBranches[0]      = new BranchElement();
                        root.subBranches[0].name = "Inputs";
                        {
                            ConfigBuilder.ConfigDefs branchConfig = new ConfigDefs();
                            branchConfig.activeDef         = true;
                            branchConfig.accRightSpecified = true;
                            branchConfig.accRight          = OPCAccess.READWRITEABLE;
                            branchConfig.dataTypeSpecified = false;
                            branchConfig.qualitySpecified  = true;
                            branchConfig.quality           = OPCQuality.GOOD;

                            branchConfig.signalTypeSpecified = false;
                            //branchConfig.signalTypeSpecified = true;
                            //branchConfig.signalType = SignalType.INTERN;

                            branchConfig.scanRate               = 100;
                            branchConfig.scanRateSpecified      = true;
                            branchConfig.deviceIDSpecified      = false;
                            branchConfig.deviceAddrSpecified    = false;
                            branchConfig.deviceSubAddrSpecified = false;
                            branchConfig.user1Specified         = false;
                            branchConfig.user2Specified         = false;

                            root.subBranches[0].branchDefs = branchConfig;
                        }

                        root.subBranches[0].items = new ItemElement[inputVars.Count];
                        int i = 0;
                        foreach (NuTraceVariable inputVar in inputVars)
                        {
                            ItemElement element = new ItemElement();
                            {
                                element.name     = inputVar.Variable;
                                element.handle   = i + 1;
                                element.itemDefs = new ConfigDefs();
                                try
                                {
                                    element.Value             = Convert.ToInt32(inputVar.Value);
                                    element.itemDefs.dataType = drvtypes.Type.SHORT;
                                }
                                catch (FormatException e)
                                {
                                    element.Value             = Convert.ToBoolean(inputVar.Value);
                                    element.itemDefs.dataType = drvtypes.Type.BOOLEAN;
                                }
                                element.itemDefs.activeDef         = true;
                                element.itemDefs.accRightSpecified = true;
                                element.itemDefs.accRight          = OPCAccess.READWRITEABLE;

                                element.itemDefs.dataTypeSpecified = true;
                                element.itemDefs.qualitySpecified  = true;
                                element.itemDefs.quality           = OPCQuality.GOOD;

                                element.itemDefs.signalTypeSpecified    = false;
                                element.itemDefs.scanRateSpecified      = false;
                                element.itemDefs.deviceIDSpecified      = false;
                                element.itemDefs.deviceAddrSpecified    = false;
                                element.itemDefs.deviceSubAddrSpecified = false;
                                element.itemDefs.user1Specified         = false;
                                element.itemDefs.user2Specified         = false;

                                /*element.itemDefs.properties = new PropertyDef[1];
                                 * {
                                 *  element.itemDefs.properties[0] = new PropertyDef();
                                 *  element.itemDefs.properties[0].id = 101;
                                 *  element.itemDefs.properties[0].name = "Item Description";
                                 *  element.itemDefs.properties[0].dataType = drvtypes.Type.STRING;
                                 *  element.itemDefs.properties[0].val = "Property test";
                                 *
                                 * }*/
                            }
                            root.subBranches[0].items[i++] = element;
                        }
                    }
                }
                serverInemsDeflist.DefinitionsRoot = root;
            }

            XmlSerializer ser = new XmlSerializer(typeof(ConfigBuilder.DefinitionList));
            StringBuilder sb  = new StringBuilder();

            using (TextWriter writer = new StringWriter(sb))
            {
                ser.Serialize(writer, serverInemsDeflist);
            }

            sb.Replace("xsi:nil=\"true\" ", ""); // hack removing xsi:nil="true"

            StreamWriter sw = new StreamWriter(fileName);

            sw.Write(sb);
            //ser.Serialize(writer, serverInemsDeflist);
            sw.Close();
        }