Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        // 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));
        }
Ejemplo n.º 5
0
        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);
        }