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(); } }
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; } } } } } }
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; } }