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); } }
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(); } }
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); } }
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); } }
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 { } }
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); } }
/// <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; }
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 { } }
/// <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(); }
public MonitorBoxAlertCommand(MonitorBox device, List <Register> alertReg, List <Register> statReg) { this.Device = device; this.AlertRegisters = alertReg; this.AllReg = statReg; }