Пример #1
0
        private static void AddDataPoint(ModbusConfig modbusConfig,
                                         DataPoint dataPoint,
                                         string dataPointNumber,
                                         string deviceAddress,
                                         string dataPointStartingRegister,
                                         string dataPointName,
                                         string dataPointDataType,
                                         string dataDataDataPointType,
                                         string datapointDescription)
        {
            VerifyDataPoint(dataPointNumber, deviceAddress, dataPointStartingRegister);

            dataPoint.Number               = dataPointNumber;
            dataPoint.Name                 = string.IsNullOrEmpty(dataPointName) ? " " : dataPointName;
            dataPoint.DeviceAddress        = Convert.ToInt32(deviceAddress);
            dataPoint.StartRegisterAddress = Convert.ToInt32(dataPointStartingRegister);

            try
            {
                dataPoint.DataPointDataType = (DataPointDataType)Enum.Parse(typeof(DataPointDataType), dataPointDataType, true);
            }
            catch (Exception)
            {
                throw new Exception("DataPoint Number=" + dataPointNumber + "的DataType的值" + dataPointDataType + "是无效值,请确认填写有效的值");
            }

            try
            {
                dataPoint.DataPointType = (DataPointType)Enum.Parse(typeof(DataPointType), dataDataDataPointType, true);
            }
            catch (Exception)
            {
                throw new Exception("DataPoint Number=" + dataPointNumber + "的DataPointType的值" + dataPointDataType + "是无效值,请确认填写有效的值");
                ;
            }

            dataPoint.Description = string.IsNullOrEmpty(dataPointName) ? " " : datapointDescription;

            if (!modbusConfig.DataPointsFromConfigFile.ContainsKey(dataPointNumber))
            {
                modbusConfig.DataPointsFromConfigFile.Add(dataPoint.Number, dataPoint);
                modbusConfig.DataPointsFromConfigFileList.Add(dataPoint);
            }
            else
            {
                throw new Exception("DataPoint Number=" + dataPointNumber + "有重复");
            }
        }
Пример #2
0
        private static void AddModule(ModbusConfig modbusConfig,
                                      Module module,
                                      string moduleNumber,
                                      string moduleName,
                                      string moduleDescription)
        {
            module.Number      = moduleNumber;
            module.Name        = string.IsNullOrEmpty(moduleName) ? " " : moduleName;
            module.Description = string.IsNullOrEmpty(moduleDescription) ? " " : moduleDescription;

            if (!modbusConfig.ModulesFromConfigFile.ContainsKey(moduleNumber))
            {
                modbusConfig.ModulesFromConfigFile.Add(module.Number, module);
            }
            else
            {
                throw new Exception("Moduled Number=" + moduleNumber + "有重复");
            }
        }
Пример #3
0
        /// <summary>
        /// 从配置文件中读取:模块和数据点的配置
        /// </summary>
        /// <param name="modbusConfigFile">配置文件物理路径(包含名称+后缀):例如:Config/ModbusConfig.xml </param>
        private static List <ModbusConfig> ReadModbusConfigFromFile(string modbusConfigFile)
        {
            var modbusConfigs = new List <ModbusConfig>();

            if (System.IO.File.Exists(modbusConfigFile))
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(modbusConfigFile);

                XmlNodeList modbusConfigNodes = xmlDoc.SelectNodes("/ModbusConfigs/ModbusConfig");
                if (null != modbusConfigNodes && modbusConfigNodes.Count > 0)
                {
                    int moduleId    = 0;
                    int dataPointId = 0;

                    foreach (XmlNode mdCfgNode in modbusConfigNodes)
                    {
                        var modbusConfig = new ModbusConfig()
                        {
                            DataAnalyzeMode              = DataAnalyzeMode.DataHighToLow,
                            ModulesFromConfigFile        = new Dictionary <string, Module>(),
                            DataPointsFromConfigFile     = new Dictionary <string, DataPoint>(),
                            DataPointsFromConfigFileList = new List <DataPoint>()
                        };
                        XmlElement mdCfgNodeElement = (XmlElement)mdCfgNode;

                        XmlNode    dataAnalyzeModeNode    = mdCfgNodeElement.SelectSingleNode("DataAnalyzeMode");
                        XmlElement dataAnalyzeModeElement = (XmlElement)dataAnalyzeModeNode;
                        if (dataAnalyzeModeElement != null)
                        {
                            modbusConfig.DataAnalyzeMode = (DataAnalyzeMode)Enum.Parse(typeof(DataAnalyzeMode), dataAnalyzeModeElement.GetAttribute("Value"), true);
                        }

                        XmlNode    IPNode        = mdCfgNodeElement.SelectSingleNode("IP");
                        XmlElement IPNodeElement = (XmlElement)IPNode;
                        if (dataAnalyzeModeElement != null)
                        {
                            modbusConfig.IP = IPNodeElement.GetAttribute("Value");
                        }

                        XmlNode    PortNode        = mdCfgNodeElement.SelectSingleNode("Port");
                        XmlElement PortNodeElement = (XmlElement)PortNode;
                        if (dataAnalyzeModeElement != null)
                        {
                            modbusConfig.Port = Convert.ToInt32(PortNodeElement.GetAttribute("Value"));
                        }

                        XmlNodeList moduleNodes = mdCfgNodeElement.SelectNodes("Module");
                        if (null != moduleNodes && moduleNodes.Count > 0)
                        {
                            ClearConfigDictionary(modbusConfig);

                            foreach (XmlNode moduleNode in moduleNodes)
                            {
                                // Module
                                moduleId++;
                                XmlElement moduleElement = (XmlElement)moduleNode;
                                string     moduleNumber  = Convert.ToString(moduleId);
                                moduleElement.SetAttribute("Number", moduleNumber);

                                string moduleName        = moduleElement.GetAttribute("Name");
                                string moduleDescription = moduleElement.GetAttribute("Description");

                                Module module = new Module();
                                module.Number = moduleNumber;

                                AddModule(modbusConfig,
                                          module,
                                          moduleNumber,
                                          moduleName,
                                          moduleDescription);

                                //DataPoint
                                XmlNodeList dataPointNodes = moduleNode.ChildNodes;
                                if (dataPointNodes.Count > 0)
                                {
                                    foreach (XmlNode dataPointNode in dataPointNodes)
                                    {
                                        dataPointId++;
                                        XmlElement dataPointElement = (XmlElement)dataPointNode;

                                        string dataPointNumber = Convert.ToString(dataPointId);
                                        dataPointElement.SetAttribute("Number", dataPointNumber);

                                        string dataPointName             = dataPointElement.GetAttribute("Name");
                                        string deviceAddress             = dataPointElement.GetAttribute("DeviceAddress");
                                        string dataPointStartingRegister = dataPointElement.GetAttribute("StartingRegister");
                                        string dataPointDataType         = dataPointElement.GetAttribute("DataType");
                                        string dataDataDataPointType     = dataPointElement.GetAttribute("DataPointType");
                                        string datapointDescription      = dataPointElement.GetAttribute("Description");

                                        DataPoint dataPoint = new DataPoint();
                                        dataPoint.Number = Convert.ToString(dataPointId);

                                        AddDataPoint(modbusConfig,
                                                     dataPoint,
                                                     dataPointNumber,
                                                     deviceAddress,
                                                     dataPointStartingRegister,
                                                     dataPointName,
                                                     dataPointDataType,
                                                     dataDataDataPointType,
                                                     datapointDescription);

                                        module.DataPoints.Add(dataPoint);
                                    }
                                }
                            }

                            modbusConfigs.Add(modbusConfig);
                        }
                    }
                }

                xmlDoc.Save(modbusConfigFile);
            }

            return(modbusConfigs);
        }
Пример #4
0
 private static void ClearConfigDictionary(ModbusConfig modbusConfig)
 {
     modbusConfig.ModulesFromConfigFile.Clear();
     modbusConfig.DataPointsFromConfigFile.Clear();
 }