public void Exec(int _tick) { if (IsComplete) { return; } if (IsError) { return; } foreach (IJob job in J) { job.Exec(_tick); if (job.IsError) { LastError = job.LastError; SL.oRESULT.Val = false; SL.oSTROBE.Val = false; SL.oRESULT_COMMON.Val = false; Finish(); return; } } switch (Step) { case 0: prst("Ждем ЦЕПИ УПРАВЛЕНИЯ бесконечно"); Step = 1; break; case 1: if (!SL.iCC.Val) { break; } jAlarm.Add(SL.iCC, true); prst("Ждем ЦИКЛ бесконечно"); Step = 2; break; case 2: if (!SL.iCYCLE.Val) { break; } jAlarm.Add(SL.iCYCLE, true); prst("Ждем ГОТОВНОСТЬ бесконечно"); Step = 3; break; case 3: if (!SL.iREADY.Val) { break; } prst("Проверяем датчики"); if (!SGSet.SCheckDTypeSize(jCollectCross == null ? null : jCollectCross.lcard)) { LastError = "Датчик группы прочности не соответствуют типоразмеру"; break; } prst("Подготавливаем устройства"); SL.oRESULT.Val = false; SL.oRESULT_COMMON.Val = false; SL.oSTROBE.Val = false; if (IW.Cross) { jRectifierThCross.Start(0); } if (IW.Line) { jRectifierThLine.Start(0); jInverterTh.Start(0); } if (IW.Thick) { jThick.Start(0); } startTick = _tick; Step = 4; break; case 4: if (IW.Thick) { if (jThick.State != JThick.EState.Rotation) { if (_tick - startTick > ParAll.ST.Defect.Thick.RotationWait * 1000) { LastError = "Не дождались раскручивания толщиномера"; } break; } } if (IW.Cross) { UITH uith = jRectifierThCross.GetUITH(); pr(uith == null ? "uith==null" : uith.ToString()); if (uith == null || !uith.IsOk) { if (_tick - startTick > ParAll.ST.Defect.Cross.Rectifiers.MagnitWait * 1000) { LastError = "Не дождались магнитных полей поперечного"; } break; } } if (IW.Line) { UITH uith = jRectifierThLine.GetUITH(); if (uith == null || !uith.IsOk) { if (_tick - startTick > ParAll.ST.Defect.Line.Rectifiers.MagnitWait * 1000) { LastError = "Не дождались магнитных полей продольного"; } break; } } RK.ST.result = new Result(); if (IW.Thick) { RK.ST.result.Thick.MaxThickness = jThick.MaxThickness; RK.ST.result.Thick.Border1 = jThick.Border1; RK.ST.result.Thick.Border2 = jThick.Border2; } if (IW.Cross) { SL.oWORK2.Val = true; } if (IW.Line) { SL.oWORK3.Val = true; } if (IW.SG) { jWorkSG.Start(_tick); } prst("Ждем снятия ГОТОВНОСТЬ 10 с"); startTick = _tick; Step = 5; break; case 5: if (_tick - startTick > 10000) { LastError = "Не дождались снятия готовности"; break; } bank.Start(_tick); jTransport.Start(_tick); jResult.Start(_tick); if (IW.Thick) { jThick.Collect = true; } if (IW.Cross) { jCollectCross.Start(_tick); } if (IW.Line) { jCollectLine.Start(_tick); } jBankResult.Start(_tick); prst("Ждем Контроль 20 с"); startTick = _tick; Step = 6; break; case 6: if (_tick - startTick > 20000) { LastError = "Не дождались КОНТРОЛЬ за 20 с"; break; } if (!SL.iCONTROL1.Val && !SL.iCONTROL2.Val && !SL.iCONTROL3.Val) { break; } prst("Ждем получения всех зон"); Step = 7; break; case 7: pr(bank.Complete); if (!bank.IsGaveZones) { break; } RK.ST.result.Compute(); List <EClass> LL = RK.ST.result.Sum.MClass; for (int i = 0; i < LL.Count; i++) { bank.AddResultZone(i, Classer.ToBool(LL[i])); } pr("Отправили все результирующие зоны bank.NoWait = true"); bank.NoWait = true; Send("DRAW"); jAlarm.Finish(); jTransport.Finish(); if (IW.Thick) { jThick.Finish(); } if (IW.Cross) { jRectifierThCross.Finish(); jCollectCross.Finish(); } if (IW.Line) { jRectifierThLine.Finish(); jCollectLine.Finish(); jInverterTh.Finish(); } if (IW.SG) { } pr("Ждем завершения банка"); jBankResult.Finish(); Step = 8; break; case 8: if (bank.Complete != null) { pr(bank.Complete); break; } prst("Ждем отправки результатов"); Step = 9; break; case 9: if (!jResult.IsComplete) { break; } if (IW.SG) { if (!jWorkSG.IsComplete) { break; } } jAlarm.Clear(); SL.oWORK2.Val = false; SL.oWORK3.Val = false; interrupt = true; Send("RESTART"); prst("Ждем продолжения работы"); Step = 10; break; case 10: if (interrupt) { break; } bank.SetResultTube(RK.ST.result.Sum.RClass); jResult.SendResult(); jResult.Finish(); //prst("Записываем в базу данных и в файл"); //RK.ST.result.Line.SaveBINDKB2_Msg(); RK.ST.result.TubeLength = bank.TubeLength == null ? 0 : Convert.ToDouble(bank.TubeLength.Value) / 1000; RK.ST.result.SaveToDB(); Send("STATIST"); Finish(); IsComplete = true; prst("Данные собраны"); break; default: LastError = "Ошибка: Неизвестный шаг: " + Step.ToString(); break; } if (IsError) { Finish(); } }
public void Exec(int _tick) { if (IsComplete) { return; } if (IsError) { return; } foreach (IJob job in J) { job.Exec(_tick); if (job.IsError) { LastError = job.LastError; Finish(); return; } } switch (Step) { case 0: Send("CLEAR"); Send("SETRESULT"); jAlarm.Add(SL.iCC, true); if (!ParAll.ST.Defect.Some.TestWithMagnit) { Step = 101; break; } prst("Ждем магнитные поля "); if (jRectifierThCross != null) { jRectifierThCross.Start(0); } if (jRectifierThLine != null) { jRectifierThLine.Start(0); } startTick = _tick; Step = 100; break; case 100: if (jRectifierThCross != null) { if (_tick - startTick > ParAll.ST.Defect.Cross.Rectifiers.MagnitWait * 1000) { LastError = "Не дождались магнитных полей поперечного"; break; } UITH uith = jRectifierThCross.GetUITH(); if (uith == null || !uith.IsOk) { break; } } if (jRectifierThLine != null) { if (_tick - startTick > ParAll.ST.Defect.Line.Rectifiers.MagnitWait * 1000) { LastError = "Не дождались магнитных полей продольного"; break; } UITH uith = jRectifierThLine.GetUITH(); if (uith == null || !uith.IsOk) { break; } } Step = 101; break; case 101: startTick = Environment.TickCount; bank.Start(startTick); jTransportTest.Start(startTick); if (jCollectCross != null) { jCollectCross.Start(startTick); } if (jCollectLine != null) { jCollectLine.Start(startTick); } prst("Ждем завершения Банка"); Step = 1; break; case 1: bool was = false; BankZoneDataA z = bank.GetNextZoneCross(); if (z != null) { was = true; RK.ST.result.Cross.AddZoneA(bank.CrossData, z); } z = bank.GetNextZoneLine(); if (z != null) { was = true; RK.ST.result.Line.AddZoneA(bank.LineData, z); } if (was) { RK.ST.result.Sum.Compute(RK.ST.result.Cross, RK.ST.result.Line, null); List <EClass> L = RK.ST.result.Sum.MClass; for (int i = 0; i < L.Count; i++) { bank.AddResultZone(i, Classer.ToBool(L[i])); } Send("DRAW"); if (was) { break; } } for (; ;) { if (bank.GetNextResultZone() == null) { break; } } if (!bank.IsGaveZones) { break; } bank.NoWait = true; for (; ;) { if (bank.GetNextResultZone() == null) { break; } } RK.ST.result.Compute(); List <EClass> LL = RK.ST.result.Sum.MClass; for (int i = 0; i < LL.Count; i++) { bank.AddResultZone(i, Classer.ToBool(LL[i])); } Send("DRAW"); if (bank.Complete != null) { pr(bank.Complete); break; } Step = 1000; break; case 1000: IsComplete = true; prst("работа выполнена"); Finish(); break; default: LastError = "Неизвестный шаг"; break; } if (IsError) { Finish(); } }