public void Exec(int _tick) { if (IsComplete) { return; } bool was = false; if (IW.Cross) { for (BankZoneDataA z = bank.GetNextZoneCross(); z != null; z = bank.GetNextZoneCross()) { was = true; RK.ST.result.Cross.AddZoneA(bank.CrossData, z); } } if (IW.Line) { for (BankZoneDataA z = bank.GetNextZoneLine(); z != null; z = bank.GetNextZoneLine()) { was = true; RK.ST.result.Line.AddZoneA(bank.LineData, z); } } if (IW.Thick) { for (BankZoneThick z = bank.GetNextZoneThick(); z != null; z = bank.GetNextZoneThick()) { was = true; RK.ST.result.Thick.MZone.Add(z); } } if (IW.SG) { BankZoneData z = bank.GetNextZoneSG(); if (z != null) { was = true; string lret; RK.ST.result.SG.sgState = SGSet.SaveToDb(bank.SGData, z.size, out lret); if (lret != null) { prsl(1, lret); } } } if (was) { Result result = RK.ST.result; result.Sum.Compute(result.Cross, result.Line, result.Thick); List <EClass> L = result.Sum.MClass; for (int i = 0; i < L.Count; i++) { bank.AddResultZone(i, Classer.ToBool(L[i])); } Send("DRAW"); } }
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(); } }