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;
                            }
                        }
                    }
                }
            }
        }
Example #3
0
        public void Exec(int _tick)
        {
            if (!started)
            {
                return;
            }
            if (complete)
            {
                return;
            }
            SignalEvent se;

            switch (Step)
            {
            case 0:
                if (!IW.Thick)
                {
                    Step = 1;
                    break;
                }
                se = SL.CatchNext();
                if (se == null)
                {
                    break;
                }
                pr(se.ToString());
                if (!teCONTROL1On.Check(se))
                {
                    break;
                }
                Send(new TickPosition(teCONTROL1On.Tick, teCONTROL1On.Position));
                Step = 1;
                break;

            case 1:
                se = SL.CatchNext();
                if (se == null)
                {
                    break;
                }
                pr(se.ToString());
                if (!teCONTROL2On.Check(se))
                {
                    break;
                }
                Send(new TickPosition(teCONTROL2On.Tick, teCONTROL2On.Position));
                Step = 2;
                break;

            case 2:
                se = SL.CatchNext();
                if (se == null)
                {
                    break;
                }
                pr(se.ToString());
                if (!teCONTROL3On.Check(se))
                {
                    break;
                }
                Send(new TickPosition(teCONTROL3On.Tick, teCONTROL3On.Position));
                Speed = CalcSpeed();
                if (IW.Thick)
                {
                    waitPeriod = (Pars.Stand2 - Pars.Stand1) / Speed.Value;
                }
                else
                {
                    waitPeriod = (Pars.Stand3 - Pars.Stand2) / Speed.Value;
                }
                Step = 3;
                break;

            case 3:
                for (; ;)
                {
                    TickPosition nextTickPosition = new TickPosition(lastTickPosition);
                    nextTickPosition.tick     += ZoneSize / Speed.Value;
                    nextTickPosition.position += ZoneSize;
                    if (nextTickPosition.tick >= _tick - waitPeriod)
                    {
                        break;
                    }
                    Send(nextTickPosition);
                }
                se = SL.CatchNext();
                if (se == null)
                {
                    break;
                }
                pr(se.ToString());
                if (!teSGOutOn.Check(se))
                {
                    break;
                }
                Step = 4;
                break;

            case 4:
                for (; ;)
                {
                    TickPosition nextTickPosition = new TickPosition(lastTickPosition);
                    nextTickPosition.tick     += ZoneSize / Speed.Value;
                    nextTickPosition.position += ZoneSize;
                    if (nextTickPosition.tick >= _tick - waitPeriod)
                    {
                        break;
                    }
                    Send(nextTickPosition);
                }
                se = SL.CatchNext();
                if (se == null)
                {
                    break;
                }
                pr(se.ToString());
                if (IW.Thick)
                {
                    if (!teCONTROL1Off.Check(se))
                    {
                        break;
                    }
                    TubeLength = CalcTubeLength(teCONTROL1Off);
                    SendTubeLength();
                }
                else
                {
                    if (!teCONTROL2Off.Check(se))
                    {
                        break;
                    }
                    TubeLength = CalcTubeLength(teCONTROL2Off);
                    SendTubeLength();
                }
                for (; ;)
                {
                    TickPosition nextTickPosition = new TickPosition(lastTickPosition);
                    nextTickPosition.tick     += ZoneSize / Speed.Value;
                    nextTickPosition.position += ZoneSize;
                    if (nextTickPosition.position > Pars.Stand4 + TubeLength.Value)
                    {
                        break;
                    }
                    Send(nextTickPosition);
                }
                Finish();
                break;
            }
        }