Ejemplo n.º 1
0
        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();
            }
        }
Ejemplo n.º 2
0
        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();
            }
        }