コード例 #1
0
        public async Task <bool> AddReadingAsync(MonitorBox monitorBox)
        {
            try {
                //using var this._context = new FacilityContext();
                var device = await this._context.ModbusDevices.FindAsync(monitorBox.Id);

                if (device != null)
                {
                    monitorBox.LastRead.GenericMonitorBoxId = monitorBox.Id;
                    this._context.MonitorBoxAlerts.Add(monitorBox.LastRead.MonitorBoxAlert);
                    this._context.MonitorBoxReadings.Add(monitorBox.LastRead);
                    this._context.Entry <ModbusDevice>(device).State = EntityState.Modified;
                    await this._context.SaveChangesAsync();

                    return(true);
                }
                else
                {
                    return(false);
                }
            } catch (Exception e) {
                StringBuilder builder = new StringBuilder();
                builder.AppendFormat("{0} Save Failed", monitorBox.Identifier)
                .AppendFormat("Exception: {0}", e.Message).AppendLine();
                if (e.InnerException != null)
                {
                    builder.AppendFormat("Inner Exception: {0}", e.InnerException.Message).AppendLine();
                }
                return(false);
            }
        }
コード例 #2
0
        private static void ImportModbusGeneric()
        {
            using (FacilityContext context = new FacilityContext()) {
                MonitorBox monitorBox = new MonitorBox();
                monitorBox.IpAddress                 = "172.21.100.30";
                monitorBox.Port                      = 502;
                monitorBox.Identifier                = "GasBay";
                monitorBox.SlaveAddress              = 0;
                monitorBox.Status                    = "Okay";
                monitorBox.AnalogChannelCount        = 16;
                monitorBox.DigitalInputChannelCount  = 39;
                monitorBox.DigitalOutputChannelCount = 10;
                monitorBox.ModbusComAddr             = 39;
                monitorBox.SoftwareMaintAddr         = 40;
                monitorBox.WarningAddr               = 41;
                monitorBox.AlarmAddr                 = 42;
                monitorBox.ReadInterval              = 2;
                monitorBox.SaveInterval              = 300;
                context.ModbusDevices.Add(monitorBox);
                context.SaveChanges();
                if (ImportModbusSettings.ImportSensorType(monitorBox, context))
                {
                    Console.WriteLine("Success: Sensor Types Imported");
                }
                else
                {
                    Console.WriteLine("Error: Sensor Import Failed");
                }

                if (ImportModbusSettings.ImportAnalog(monitorBox, context))
                {
                    Console.WriteLine("Success: Analog Channels Imported");
                }
                else
                {
                    Console.WriteLine("Error: Analog Import Failed");
                }

                if (ImportModbusSettings.ImportDigital(monitorBox, context))
                {
                    Console.WriteLine("Success: Digital Channels Imported");
                }
                else
                {
                    Console.WriteLine("Error: Digital Import Failed");
                }

                if (ImportModbusSettings.ImportOutput(monitorBox, context))
                {
                    Console.WriteLine("Success: Output Channels Imported");
                }
                else
                {
                    Console.WriteLine("Error: Output Import Failed");
                }
                Console.WriteLine();
                Console.WriteLine("Done, Press any key to exit");
                Console.ReadKey();
            }
        }
コード例 #3
0
 public static bool ImportDigital(MonitorBox box, FacilityContext context)
 {
     if (File.Exists(digitalFile))
     {
         try {
             List <DigitalInputChannel> channels = new List <DigitalInputChannel>();
             var lines = File.ReadAllLines(digitalFile);
             foreach (var line in lines)
             {
                 var                 row       = line.Split('\t');
                 bool                connected = (row[4] == "TRUE") ? true : false;
                 LogicType           type      = (row[3] == "HIGH") ? LogicType.HIGH : LogicType.LOW;
                 DigitalInputChannel channel   = new DigitalInputChannel(row[0], Convert.ToInt32(row[1]), Convert.ToInt32(row[2]), connected, row[5], type);
                 channel.AlarmAction = RegisterConverters.GetAction(row[7]);
                 channel.Bypass      = (row[6] == "TRUE") ? false : true;
                 channel.Device      = box;
                 box.Registers.Add(channel);
                 context.Registers.Add(channel);
             }
             context.SaveChanges();
             return(true);
         } catch {
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
コード例 #4
0
        public static bool ImportSensorType(MonitorBox box, FacilityContext context)
        {
            if (File.Exists(sensorFile))
            {
                try {
                    var lines = File.ReadAllLines(sensorFile);
                    foreach (var line in lines)
                    {
                        var row = line.Split('\t');

                        SensorType sensor = new SensorType();
                        sensor.Name      = row[0];
                        sensor.ZeroPoint = Convert.ToDouble(row[1]);
                        sensor.MaxPoint  = Convert.ToDouble(row[2]);
                        sensor.Units     = row[3];
                        context.Categories.Add(sensor);
                    }
                    context.SaveChanges();
                    return(true);
                } catch {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
コード例 #5
0
ファイル: XMLOperate.cs プロジェクト: Klutzdon/SIOTS_HHZX
        public void DeleteMonitorInfo(MonitorBox info)
        {
            try
            {
                XmlNode root = xml.SelectSingleNode("MonitorList");

                XmlNodeList nodeList = xml.SelectNodes("/MonitorList/Monitor");
                if (nodeList != null)
                {
                    foreach (XmlNode xnlist in nodeList)//遍历所有子节点
                    {
                        XmlElement xe1 = (XmlElement)xnlist;

                        foreach (XmlNode xn in xnlist.ChildNodes)//遍历所有子节点
                        {
                            XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型

                            // mbInfo.Number = Int32.Parse(xe.GetAttribute("No"));

                            if (xe.Name == "ID" && xe.InnerText == info.ID)
                            {
                                root.RemoveChild(xnlist);
                            }
                        }
                    }

                    SaveXML();
                }
            }
            catch
            {

            }
        }
コード例 #6
0
        public static bool ImportAnalog(MonitorBox box, FacilityContext context)
        {
            if (File.Exists(analogFile))
            {
                try {
                    List <AnalogChannel> channels = new List <AnalogChannel>();
                    var lines = File.ReadAllLines(analogFile);
                    foreach (var line in lines)
                    {
                        var           row       = line.Split('\t');
                        bool          connected = (row[3] == "TRUE") ? true : false;
                        AnalogChannel channel   = new AnalogChannel(row[0], Convert.ToInt32(row[1]), Convert.ToInt32(row[2]), connected, row[4]);
                        channel.Slope      = Convert.ToDouble(row[5]);
                        channel.Offset     = Convert.ToDouble(row[6]);
                        channel.Resistance = Convert.ToDouble(row[7]);

                        channel.ZeroValue = Convert.ToDouble(row[8]);
                        channel.MaxValue  = Convert.ToDouble(row[9]);

                        channel.Alarm1SetPoint = Convert.ToDouble(row[10]);
                        channel.Alarm1Enabled  = (row[11] == "TRUE") ? true : false;
                        channel.Alarm1Action   = RegisterConverters.GetAction(row[12]);

                        channel.Alarm2SetPoint = Convert.ToDouble(row[13]);
                        channel.Alarm2Enabled  = (row[14] == "TRUE") ? true : false;
                        channel.Alarm2Action   = RegisterConverters.GetAction(row[15]);

                        channel.Alarm3SetPoint = Convert.ToDouble(row[16]);
                        channel.Alarm3Enabled  = (row[17] == "TRUE") ? true : false;
                        channel.Alarm3Action   = RegisterConverters.GetAction(row[18]);

                        string sname = row[19];
                        channel.ValueDivisor = Convert.ToDouble(row[20]);
                        var sensor = context.Categories.OfType <SensorType>().Include(e => e.Registers).FirstOrDefault(e => e.Name == sname);
                        if (sensor != null)
                        {
                            channel.SensorType = sensor;
                        }
                        channel.Device = box;
                        box.Registers.Add(channel);
                        context.Registers.Add(channel);
                    }
                    context.SaveChanges();
                    return(true);
                } catch {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
コード例 #7
0
ファイル: XMLOperate.cs プロジェクト: Klutzdon/SIOTS_HHZX
        /// <summary>
        /// 获取所有ID列表
        /// </summary>
        /// <returns></returns>
        public List<MonitorBox> GetMonitorList()
        {
            List<MonitorBox> mbList = new List<MonitorBox>();

            try
            {
                //XmlNode root = xml.SelectSingleNode("/MonitorList");
                XmlNodeList nodeList = xml.SelectNodes("/MonitorList/Monitor");
                if (nodeList != null)
                {
                    foreach (XmlNode xnlist in nodeList)//遍历所有子节点
                    {
                        MonitorBox mbInfo = new MonitorBox();

                        foreach (XmlNode xn in xnlist.ChildNodes)//遍历所有子节点
                        {
                            XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型

                            // mbInfo.Number = Int32.Parse(xe.GetAttribute("No"));
                            switch (xe.Name)
                            {
                                case "IP":
                                    mbInfo.IP = xe.InnerText;
                                    break;
                                case "Name":
                                    mbInfo.Name = xe.InnerText;
                                    break;
                                case "No":
                                    mbInfo.Number = xe.InnerText;
                                    break;
                                case "ID":
                                    mbInfo.ID = xe.InnerText;
                                    break;
                            }
                        }

                        mbInfo.Index = mbList.Count + 1;
                        mbList.Add(mbInfo);
                    }
                }
            }
            catch
            {

            }
            return mbList;
        }
コード例 #8
0
ファイル: XMLOperate.cs プロジェクト: Klutzdon/SIOTS_HHZX
        public void UpdateMonitorInfo(MonitorBox info)
        {
            try
            {
                XmlNodeList nodeList = xml.SelectNodes("/MonitorList/Monitor");
                if (nodeList != null)
                {
                    foreach (XmlNode xnlist in nodeList)//遍历所有子节点
                    {
                        foreach (XmlNode xn in xnlist.ChildNodes)//遍历所有子节点
                        {
                            XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型

                            // mbInfo.Number = Int32.Parse(xe.GetAttribute("No"));

                            if (xe.Name == "ID" && xe.InnerText == info.ID)
                            {
                                foreach (XmlNode eduitNode in xnlist.ChildNodes)
                                {
                                    XmlElement eduitxe = (XmlElement)eduitNode;

                                    switch (eduitxe.Name)
                                    {
                                        case "IP":
                                            eduitxe.InnerText = info.IP;
                                            break;
                                        case "Name":
                                            eduitxe.InnerText = info.Name;
                                            break;
                                        case "No":
                                            eduitxe.InnerText = info.Number;
                                            break;
                                    }
                                }
                                break;
                            }
                        }
                    }

                    SaveXML();
                }
            }
            catch
            {

            }
        }
コード例 #9
0
ファイル: XMLOperate.cs プロジェクト: Klutzdon/SIOTS_HHZX
        /// <summary>
        /// 保存IP
        /// </summary>
        /// <param name="info"></param>
        public void SaveMonitorInfo(MonitorBox info)
        {
            XmlNode root = xml.SelectSingleNode("MonitorList");//查找<Employees>
            XmlElement xe1 = xml.CreateElement("Monitor");//创建一个<Node>节点

            XmlElement xesub1 = xml.CreateElement("No");
            xesub1.InnerText = info.Number;//设置文本节点
            xe1.AppendChild(xesub1);//添加到<Node>节点中

            XmlElement xesub2 = xml.CreateElement("Name");
            xesub2.InnerText = info.Name;
            xe1.AppendChild(xesub2);

            XmlElement xesub3 = xml.CreateElement("IP");
            xesub3.InnerText = info.IP;
            xe1.AppendChild(xesub3);

            XmlElement xesub4 = xml.CreateElement("ID");
            xesub4.InnerText = Guid.NewGuid().ToString();
            xe1.AppendChild(xesub4);

            root.AppendChild(xe1);//添加到<Employees>节点中

            SaveXML();
        }
コード例 #10
0
 public MonitorBoxAlertCommand(MonitorBox device, List <Register> alertReg, List <Register> statReg)
 {
     this.Device         = device;
     this.AlertRegisters = alertReg;
     this.AllReg         = statReg;
 }