Esempio n. 1
0
        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");
            }
        }
Esempio 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;
                    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();
            }
        }