private static RiserNode CreateRiserNode(string channelName, string name, int n, int nodeOffset, ChannelNode channelNode, RiserAddress addr) { var riserNode = new RiserNode { Active = Data.Config.ReadBool(channelName, name, true), NodeType = Data.Config.ReadInteger(channelName, name + "_NodeType", 0), Index = n, Name = name, Node = addr.Riser + nodeOffset, NextFetching = DateTime.Now + new TimeSpan(channelNode.FetchTime * TimeSpan.TicksPerSecond), Channel = channelNode.Index, Overpass = addr.Overpass, Way = addr.Way, Product = addr.Product, Riser = addr.Riser, TotalRequests = 0, TotalErrors = 0, BarometerValue = 30, MarginalLimit = 15, FailLimit = 30, TimeMarginal = new TimeSpan(0, 0, 15), TimeFail = new TimeSpan(0, 1, 0), }; return(riserNode); }
public FormTaskDataEditor(string number, string ntype, int factheight, int setpoint, RiserAddress addr) { InitializeComponent(); foreach (var item in TypeDataKeeper.GetWaggonTypeItems().OrderBy(item => int.Parse(item.NType))) { cbNtype.Items.Add(item); } if (!string.IsNullOrWhiteSpace(number)) { tbNumber.Text = number; FindWaggon(tbNumber.Text); } if (!string.IsNullOrWhiteSpace(ntype)) { cbNtype.Text = ntype; cbNtype_SelectionChangeCommitted(null, null); } if (factheight > 0) { tbFactHeight.Text = factheight.ToString("0"); } if (setpoint > 0) { tbSetpoint.Text = setpoint.ToString("0"); UpdateMinMax(tbSetpoint); } _address = addr; }
private static void LoadFetchConfiguration() { var list = new List <string>(); const string section = "FetchConfiguration"; if (Data.Config.SectionExists(section)) { list.AddRange(Data.Config.ReadSectionValues(section)); } else { list.Add("1;2;2;D;Дизель;33;63;2;MOXA_MB01;10.9.4.51;0;1,9600,N"); list.Add("1;2;2;D;Дизель;65;95;2;MOXA_MB02;10.9.4.52;0;2,9600,N"); list.Add("1;4;4;D;Дизель;1;32;1;MOXA_MB03;10.9.4.53;0;3,38400,N"); list.Add("1;2;2;T;ТС;34;94;2;MOXA_MB04;10.9.4.54;0;1,38400,N"); list.Add("2;35;3,5;D;Дизель;53;67;1;MOXA_MB05;10.9.4.55;-52;1,9600,N"); list.Add("2;35;3,5;D;Дизель;68;104;1;MOXA_MB06;10.9.4.56;-52;2,19200,N"); list.Add("2;35;3,5;M;Мазут, газойль;1;13;1;MOXA_MB07;10.9.4.57;100;1,38400,N"); list.Add("2;35;3,5;M;Мазут, газойль;40;52;1;MOXA_MB07;10.9.4.57;100;1,38400,N"); list.Add("2;35;3,5;M;Мазут, газойль;14;39;1;MOXA_MB08;10.9.4.58;100;2,38400,N"); list.Add("4;12;12;B;Бензин;1;37;1;MOXA_MB09;10.9.4.59;0;1,19200,N"); list.Add("4;13;13;D;Дизель;38;74;1;MOXA_MB10;10.9.4.60;0;1,19200,N"); // для ремонтного канала list.Add("0;0;0;R;Для ремонта стояков;247;247;1;Для ремонта;10.9.4.61;0;1,9600,N"); var n = 0; foreach (var line in list) { Data.Config.WriteString(section, n.ToString("0"), line); n++; } Data.Config.UpdateFile(); } foreach (var line in list) { AddFetchLine(line); } // для ремонтных контроллеров foreach (var channelNode in Data.ChannelNodes.Where(item => item.Overpass > 0)) { var channelName = String.Format("Channel{0}", channelNode.Index + 1); var addr = new RiserAddress { Channel = channelNode.Index, Overpass = channelNode.Overpass, Way = channelNode.Way, Product = channelNode.Product, Riser = 247 }; var name = String.Format("N{0}{1}{2}{3:D3}", addr.Overpass, addr.Way, addr.Product, addr.Riser); var riserNode = CreateRiserNode(channelName, name, channelNode.Risers.Count, 0, channelNode, addr); channelNode.Risers.Add(riserNode); Data.RiserNodes.Add(addr, riserNode); } }
// ReSharper disable InconsistentNaming public static void SendToTrend(string name, RiserAddress addr, int level, int low, int high, int levlow, int levhigh, int levbigoff, int setpoint, int curlevel, int curalarm, bool hr3_3, bool hr3_4, bool hr1_14, bool hr4_9, bool hr3_2, bool hr1_13, bool hr4_13, bool hr4_8, bool hr3_1, bool hr1_12, bool hr4_12, bool hr1_8, bool hr3_14, bool hr3_15, bool hr3_6, bool hr3_10, bool hr3_11, string sdt = null) { var dt = DateTime.Now; if (sdt != null) { DateTime.TryParse(sdt, out dt); } var list = new[] { dt.ToString("yyyy-MM-dd HH:mm:ss.fff"), addr.Channel.ToString("0"), addr.Overpass.ToString("0"), addr.Way.ToString("0"), addr.Product, addr.Riser.ToString("0").PadLeft(3), level.ToString("0"), low.ToString("0"), high.ToString("0"), levlow.ToString("0"), levhigh.ToString("0"), levbigoff.ToString("0"), setpoint.ToString("0"), curlevel.ToString("0"), curalarm.ToString("0"), hr3_3 ? "1" : "0", hr3_4 ? "1" : "0", hr1_14 ? "1" : "0", hr4_9 ? "1" : "0", hr3_2 ? "1" : "0", hr1_13 ? "1" : "0", hr4_13 ? "1" : "0", hr4_8 ? "1" : "0", hr3_1 ? "1" : "0", hr1_12 ? "1" : "0", hr4_12 ? "1" : "0", hr1_8 ? "1" : "0", hr3_14 ? "1" : "0", hr3_15 ? "1" : "0", hr3_6 ? "1" : "0", hr3_10 ? "1" : "0", hr3_11 ? "1" : "0" }; AppendToTrend(dt, name, String.Join("\t", list)); }
private static void AddFetchLine(string config) { var vals = config.Split(new[] { ';' }); if (vals.Length != 12) { return; } var comvals = vals[11].Split(new[] { ',' }); if (comvals.Length != 3) { return; } int overpass, way, first, last, step, offset, comport, baudrate; var parity = comvals[2]; if (!int.TryParse(vals[0], out overpass) || !int.TryParse(vals[1], out way) || !int.TryParse(vals[5], out first) || !int.TryParse(vals[6], out last) || !int.TryParse(vals[7], out step) || !int.TryParse(vals[10], out offset) || !int.TryParse(comvals[0], out comport) || !int.TryParse(comvals[1], out baudrate) || !(new [] { "N", "O", "E" }).Contains(parity)) { return; } var arg = new FetchArg { Channel = 0, Overpass = overpass, Way = way, WayFine = vals[2], Product = vals[3], ProductFine = vals[4], RiserFirst = first, RiserLast = last, RiserStep = step, MoxaName = vals[8], MoxaIp = vals[9], NodeOffset = offset, Comport = comport, Baudrate = baudrate, Parity = parity }; var list = new List <RiserNode>(); var channelNode = Data.ChannelNodes.FirstOrDefault( item => item.Name.Equals(arg.MoxaName) && item.IpAddr.Equals(arg.MoxaIp)); var newChannel = false; const int fetchTime = 1; if (channelNode == null) { var risersList = new List <int>(); for (var i = arg.RiserFirst; i <= arg.RiserLast; i = i + arg.RiserStep) { risersList.Add(i); } risersList.Sort(); var index = Data.ChannelNodes.Count; var channelName = String.Format("Channel{0}", index + 1); channelNode = new ChannelNode { Active = Data.Config.ReadBool("FetchChannels", channelName, true), Index = index, Name = arg.MoxaName, IpAddr = arg.MoxaIp, LinkType = Data.Config.ReadInteger("FetchChannels", channelName + "_LinkType", 0), Comport = arg.Comport, Baudrate = arg.Baudrate, Parity = arg.Parity, FetchTime = fetchTime, NextFetching = DateTime.Now + new TimeSpan(fetchTime * TimeSpan.TicksPerSecond), TotalRequests = 0, TotalErrors = 0, BarometerValue = 30, MarginalLimit = 15, FailLimit = 30, TimeMarginal = new TimeSpan(0, 0, 15), TimeFail = new TimeSpan(0, 1, 0), SendTimeout = 3, ReceiveTimeout = 3, Risers = new List <RiserNode>(), Overpass = arg.Overpass, Way = arg.Way, WayFine = arg.WayFine, Product = arg.Product, ProductFine = arg.ProductFine, RisersRange = risersList.ToArray(), RisersRangeFine = arg.RiserStep > 1 ? String.Format("{0},{1} ... {2}", arg.RiserFirst, arg.RiserFirst + 2, arg.RiserLast) : String.Format("{0} ... {1}", arg.RiserFirst, arg.RiserLast) }; channelNode.Descriptor = arg.Overpass == 0 ? channelNode.ProductFine : String.Format("Эстакада {0}. Путь {1}. {2}. Стояки {3}", channelNode.Overpass, channelNode.WayFine, channelNode.ProductFine, channelNode.RisersRangeFine); newChannel = true; } arg.Channel = channelNode.Index; var npp = channelNode.Risers.Count; for (var riserNumber = arg.RiserFirst; riserNumber <= arg.RiserLast; riserNumber = riserNumber + arg.RiserStep) { var addr = new RiserAddress { Channel = channelNode.Index, Overpass = arg.Overpass, Way = arg.Way, Product = arg.Product, Riser = riserNumber }; var channelName = String.Format("Channel{0}", channelNode.Index + 1); var name = String.Format("N{0}{1}{2}{3:D3}", arg.Overpass, arg.Way, arg.Product, riserNumber); var riser = CreateRiserNode(channelName, name, npp, arg.NodeOffset, channelNode, addr); list.Add(riser); Data.RiserNodes.Add(addr, riser); // загрузка записанных заданий налива var riserKey = String.Format("N{0}{1}{2}{3}", addr.Overpass, addr.Way, addr.Product, addr.Riser.ToString("000")); riser.Number = Data.Tasks.ReadString(riserKey, "Number", ""); riser.Ntype = Data.Tasks.ReadString(riserKey, "NType", ""); riser.FactHeight = Data.Tasks.ReadInteger(riserKey, "FactHeight", 0); riser.Setpoint = Data.Tasks.ReadInteger(riserKey, "Setpoint", 0); npp++; } channelNode.Risers.AddRange(list); if (newChannel) { Data.ChannelNodes.Add(channelNode); } else { var risersList = new List <int>(channelNode.RisersRange); for (var i = arg.RiserFirst; i <= arg.RiserLast; i = i + arg.RiserStep) { risersList.Add(i); } risersList.Sort(); channelNode.RisersRange = risersList.ToArray(); var addition = arg.RiserStep > 1 ? String.Format(", {0},{1} ... {2}", arg.RiserFirst, arg.RiserFirst + 2, arg.RiserLast) : String.Format(", {0} ... {1}", arg.RiserFirst, arg.RiserLast); channelNode.RisersRangeFine += addition; channelNode.Descriptor += addition; } var worker = new BackgroundWorker(); Workers.Add(worker); worker.DoWork += WorkerDoWork; worker.ProgressChanged += WorkerProgressChanged; worker.WorkerSupportsCancellation = true; worker.RunWorkerAsync(arg); }