//---------------------------------------------------------------------- /// <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; } } }
//---------------------------------------------------------------------------- // 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))); }
/// <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; } } }
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(); }