Example #1
0
 public void Exec(int _tick)
 {
     if (!started)
     {
         return;
     }
     if (complete)
     {
         return;
     }
     for (; ;)
     {
         SignalEvent se = SL.CatchNext();
         if (se == null)
         {
             break;
         }
         pr(se.ToString());
         TESignal te = LTE[0];
         if (!te.Check(se))
         {
             continue;
         }
         pr(te.ToString());
         if (te.need)
         {
             L.Add(new TickPosition(te.Tick, te.Position));
         }
         else
         {
             if (TubeLength == null)
             {
                 TubeLength = CalcTubeLength(te);
                 CalcTubeLength2(te);
                 new ExecSQL("update ThickWork set TubeLength = " + TubeLength.Value.ToString());
                 bank.TubeLength = TubeLength;
             }
             L.Add(new TickPosition(te.Tick, te.Position + TubeLength.Value));
         }
         LTE.RemoveAt(0);
         if (LTE.Count == 0)
         {
             complete = true;
             break;
         }
         foreach (TickPosition tp in L)
         {
             pr(tp.ToString());
             bank.AddTickPosition(tp);
             ExecSQL E = new ExecSQL(string.Format("insert into TickPositions values({0},{1},{2})",
                                                   tp_index++.ToString(),
                                                   tp.tick.ToString(),
                                                   tp.position.ToString()));
         }
         L.Clear();
     }
 }
Example #2
0
        public void Exec(int _tick)
        {
            if (!started)
            {
                return;
            }
            if (complete)
            {
                return;
            }
            for (; ;)
            {
                SignalEvent se = SL.CatchNext();
                if (se == null)
                {
                    break;
                }
                switch (step)
                {
                case 0:
                    // Ждем начала
                    if (!teOn.Check(se))
                    {
                        break;
                    }
                    pr(teOn.ToString());
                    L.Add(new TickPosition(teOn.Tick, teOn.Position));
                    teStrobe.FirstTick = teOn.Tick;
                    step = 2;
                    break;

                case 2:
                    // Собираем стробы
                    if (teStrobe.Check(se))
                    {
                        pr(teStrobe.ToString());
                        L.Add(new TickPosition(teStrobe.Tick,
                                               teStrobe.Position));
                    }
                    if (!teOff0.Was)
                    {
                        if (teOff0.Check(se))
                        {
                            // Если снялся контроль - вычисляем длину трубы.
                            pr(teOff0.ToString());
                            {
                                int curr_position = teStrobe.Position + CalcDelta(teOff0.Tick);
                                //                            int TubeLength = curr_position - teOff0.Position;
                                int TubeLength = curr_position - teOff0.Position;
                                pr("curr_position=" + curr_position.ToString());
                                pr("teOn.Position=" + teOn.Position.ToString());
                                pr("teOff0.Position=" + teOff0.Position.ToString());
                                pr("TubeLength=" + TubeLength.ToString());
                                bank.TubeLength = TubeLength;
                                SendTubeLength(TubeLength);
                                L.Add(new TickPosition(teOff0.Tick, teOff0.Position + TubeLength));
                            }
                        }
                    }
                    break;
                }
                //foreach (TickPosition tp in L)
                //{
                //    Send(tp);
                //    bank.AddTickPosition(tp);
                //}
                //L.Clear();

                if (teOff0.Was)
                {
                    // Если Знаем конец трубы - сбрасываем зоны в банк
                    foreach (TickPosition tp in L)
                    {
                        Send(tp);
                        bank.AddTickPosition(tp);
                    }
                    L.Clear();
                }
                else
                {
                    // Если НЕ знаем конец трубы - сбрасываем в банк только те стробы,
                    // после которых уже пришли стробы на длину, не менее длины
                    // между первым и последним контролем.
                    //
                    // Иначе говоря зедержим тот строб, которым может оказаться за границей трубы, чтобы не выдать зону из воздуха.
                    if (L.Count != 0)
                    {
                        double last_position = L[L.Count - 1].position;
                        for (; ;)
                        {
                            TickPosition p = L[0];
                            if (last_position - p.position >= teOff0.Position -
                                teOn.Position)
                            {
                                Send(p);
                                bank.AddTickPosition(p);
                                L.Remove(p);
                            }
                            else
                            {
                                //							AnsiString a = "";
                                //							a += last_position;
                                //							a += "-";
                                //							a += p->position;
                                //							a+=">";
                                //							a+=teOff0->Position();
                                //							a+="-";
                                //							a+=teOn->Position();
                                //							pr(a);
                                break;
                            }
                            if (L.Count == 0)
                            {
                                break;
                            }
                        }
                    }
                }
            }
        }