コード例 #1
0
 public void runAction(AbstractCanDevice nodetem)
 {
     node = nodetem;
     init();
     start_time = DateTime.Now.ToString();
     ActionManager.getInstance().addAction(this);
 }
コード例 #2
0
        public static Repeat create(AbstractCanDevice nodetem, Action action, int ttimes)
        {
            Repeat acttem = Repeat.create(action, ttimes);

            acttem.node = nodetem;
            return(acttem);
        }
コード例 #3
0
ファイル: ActionDevice.cs プロジェクト: jume2003/SK800
        public bool GetRealY(AbstractCanDevice node_tem, ref int y)
        {
            bool ret = true;

            if (node_tem is MachineHandDevice)
            {
                var device = (MachineHandDevice)node_tem;
                ret = ret && device.CanComm.ReadRegister(device.Hand.YMotor.RealDistance.Addr);
                y   = device.CanComm.GetInt(device.Hand.YMotor.RealDistance.Addr, 0);
                y   = Convert.ToInt32(y / Convert.ToDecimal(device.Hand.YMotor.Factor.SetValue));
            }
            else if (node_tem is InjectorDevice)
            {
                var device = (InjectorDevice)node_tem;
                ret = ret && device.CanComm.ReadRegister(device.Injector.TMotor.RealDistance.Addr);
                y   = device.CanComm.GetInt(device.Injector.TMotor.RealDistance.Addr, 0);
                y   = Convert.ToInt32(y / Convert.ToDecimal(device.Injector.TMotor.Factor.SetValue));
            }
            else if (node_tem is PiercerDevice)
            {
                var device = (PiercerDevice)node_tem;
                ret = ret && device.CanComm.ReadRegister(device.Pie.YMotor.RealDistance.Addr);
                y   = device.CanComm.GetInt(device.Pie.YMotor.RealDistance.Addr, 0);
                y   = Convert.ToInt32(y / Convert.ToDecimal(device.Pie.YMotor.Factor.SetValue));
            }
            return(ret);
        }
コード例 #4
0
        public static MoveTo create(AbstractCanDevice nodetem, double ttime = 0, int xx = -1, int yy = -1, int zz = -1)
        {
            MoveTo acttem = create(ttime, xx, yy, zz);

            acttem.node = nodetem;
            return(acttem);
        }
コード例 #5
0
        public static InitInjectPump create(AbstractCanDevice nodetem, double ttime, Enterclose[] iinjects)
        {
            InitInjectPump acttem = InitInjectPump.create(ttime, iinjects);

            acttem.node = nodetem;
            return(acttem);
        }
コード例 #6
0
        public static InjectMoveTo create(AbstractCanDevice nodetem, double ttime, int [] yy)
        {
            InjectMoveTo acttem = InjectMoveTo.create(ttime, yy);

            acttem.node = nodetem;
            return(acttem);
        }
コード例 #7
0
        public static InjectMoveTo create(AbstractCanDevice nodetem, double ttime, Enterclose[] iinjects, int xx, int [] yy, int[] zz, int sspeed = 0)
        {
            InjectMoveTo acttem = InjectMoveTo.create(ttime, iinjects, xx, yy, zz, sspeed);

            acttem.node = nodetem;
            return(acttem);
        }
コード例 #8
0
        public static Sequence create(AbstractCanDevice nodetem, params Action[] actions)
        {
            Sequence acttem = Sequence.create(actions);

            acttem.node = nodetem;
            return(acttem);
        }
コード例 #9
0
        public void getAllRuningAct(AbstractCanDevice nodetem, ref List <ActionBase> action_list)
        {
            bool is_cok = (this is Sequence == false) && (this is Spawn == false) && (this is Repeat == false) && (this is SKSleep == false);

            if (is_cok && this.isinit && this.isfinish == false && node == nodetem)
            {
                action_list.Add(this);
            }
            if (this is Sequence seq)
            {
                foreach (var act in seq.actionlist)
                {
                    act.getAllRuningAct(nodetem, ref action_list);
                }
            }
            else if (this is Spawn spa)
            {
                foreach (var act in spa.actionlist)
                {
                    act.getAllRuningAct(nodetem, ref action_list);
                }
            }
            else if (this is Repeat rep)
            {
                rep.repeat_action.getAllRuningAct(nodetem, ref action_list);
            }
        }
コード例 #10
0
        public static InitXyz create(AbstractCanDevice nodetem, double ttime = 0, bool xx = true, bool yy = true, bool zz = true)
        {
            InitXyz acttem = InitXyz.create(ttime, xx, yy, zz);

            acttem.node = nodetem;
            return(acttem);
        }
コード例 #11
0
        public int getAllRuningActCount(AbstractCanDevice nodetem)
        {
            List <ActionBase> action_list = new List <ActionBase>();

            getAllRuningAct(nodetem, ref action_list);
            return(action_list.Count);
        }
コード例 #12
0
        public static SkWaitForAction create(AbstractCanDevice nodetem, ActionBase aaction)
        {
            SkWaitForAction acttem = SkWaitForAction.create(aaction);

            acttem.node = nodetem;
            return(acttem);
        }
コード例 #13
0
        public int getAllActionsCount(AbstractCanDevice node, ActionBase act = null)
        {
            List <ActionBase> action_list = getActionCount(node);

            action_list.Remove(act);
            return(action_list.Count());
        }
コード例 #14
0
ファイル: ActionDevice.cs プロジェクト: jume2003/SK800
        public bool GetRealPump(AbstractCanDevice node_tem, Enterclose[] injects, ref int[] pump)
        {
            bool ret = true;

            if (node_tem is InjectorDevice)
            {
                var device = (InjectorDevice)node_tem;
                foreach (var inject in injects)
                {
                    ret = ret && device.CanComm.ReadRegister(inject.PumpMotor.RealDistance.Addr);
                    if (inject.PumpMotor.Factor.SetValue <= 0)
                    {
                        ErrorSystem.WriteActError("加样通道:" + inject.Index + "校正因子不可为0", true, false, 9999);
                        return(false);
                    }
                    if (ret)
                    {
                        pump[inject.Index] = (int)device.CanComm.GetInt(inject.PumpMotor.RealDistance.Addr, 0);
                        pump[inject.Index] = Convert.ToInt32(pump[inject.Index] / Convert.ToDecimal(inject.PumpMotor.Factor.SetValue));
                    }
                    else
                    {
                        break;
                    }
                }
            }
            return(ret);
        }
コード例 #15
0
        public static InjectAbsorbMove create(AbstractCanDevice nodetem, double ttime, Enterclose[] iinjects, int sspeed, params int[] aabsorbs)
        {
            InjectAbsorbMove acttem = InjectAbsorbMove.create(ttime, iinjects, sspeed, aabsorbs);

            acttem.node = nodetem;
            return(acttem);
        }
コード例 #16
0
ファイル: ActionDevice.cs プロジェクト: jume2003/SK800
        public bool GetRealX(AbstractCanDevice node_tem, ref int x)
        {
            bool ret = true;

            if (node_tem is MachineHandDevice)
            {
                var device = (MachineHandDevice)node_tem;
                ret = ret && device.CanComm.ReadRegister(device.Hand.XMotor.RealDistance.Addr);
                x   = device.CanComm.GetInt(device.Hand.XMotor.RealDistance.Addr, 0);
                x   = Convert.ToInt32(x / Convert.ToDecimal(device.Hand.XMotor.Factor.SetValue));
            }
            else if (node_tem is InjectorDevice)
            {
                var device = (InjectorDevice)node_tem;
                ret = ret && device.CanComm.ReadRegister(device.Injector.XMotor.RealDistance.Addr);
                x   = device.CanComm.GetInt(device.Injector.XMotor.RealDistance.Addr, 0);
                x   = Convert.ToInt32(x / Convert.ToDecimal(device.Injector.XMotor.Factor.SetValue));
            }
            else if (node_tem is GelWarehouseDevice)
            {
                var device = (GelWarehouseDevice)node_tem;
                ret = ret && device.CanComm.ReadRegister(device.GelWare.XMotor.RealDistance.Addr);
                x   = device.CanComm.GetInt(device.GelWare.XMotor.RealDistance.Addr, 0);
                x   = Convert.ToInt32(x / Convert.ToDecimal(device.GelWare.XMotor.Factor.SetValue));
            }
            else if (node_tem is OtherPartDevice)
            {
                var device = (OtherPartDevice)node_tem;
                ret = ret && device.CanComm.ReadRegister(device.OP.ScanMotor.RealDistance.Addr);
                x   = device.CanComm.GetInt(device.OP.ScanMotor.RealDistance.Addr, 0);
                x   = Convert.ToInt32(x / Convert.ToDecimal(device.OP.ScanMotor.Factor.SetValue));
            }
            return(ret);
        }
コード例 #17
0
 public bool findDevInOccList(AbstractCanDevice device)
 {
     foreach (var dev in occupydev_list)
     {
         if (device != null && dev == device)
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #18
0
ファイル: ActionDevice.cs プロジェクト: jume2003/SK800
        public bool GetRealZ(AbstractCanDevice node_tem, Enterclose[] injects, ref int[] z)
        {
            bool ret = true;

            if (node_tem is InjectorDevice)
            {
                var device = (InjectorDevice)node_tem;
                foreach (var inject in injects)
                {
                    ret             = ret && device.CanComm.ReadRegister(inject.ZMotor.RealDistance.Addr);
                    z[inject.Index] = device.CanComm.GetInt(inject.ZMotor.RealDistance.Addr, 0);
                    z[inject.Index] = Convert.ToInt32(z[inject.Index] / Convert.ToDecimal(inject.ZMotor.Factor.SetValue));
                }
            }
            return(ret);
        }
コード例 #19
0
ファイル: ActionDevice.cs プロジェクト: jume2003/SK800
        public bool GetRealY(AbstractCanDevice node_tem, Enterclose[] injects, ref int[] y)
        {
            bool ret = true;

            System.Diagnostics.Debug.Assert(y.Count() == 4);
            if (node_tem is InjectorDevice)
            {
                var device = (InjectorDevice)node_tem;
                foreach (var inject in injects)
                {
                    ret             = ret && device.CanComm.ReadRegister(inject.YMotor.RealDistance.Addr);
                    y[inject.Index] = device.CanComm.GetInt(inject.YMotor.RealDistance.Addr, 0);
                    y[inject.Index] = Convert.ToInt32(y[inject.Index] / Convert.ToDecimal(inject.YMotor.Factor.SetValue));
                }
            }
            return(ret);
        }
コード例 #20
0
        public List <ActionBase> getAllActions(AbstractCanDevice node)
        {
            List <ActionBase> action_listret = new List <ActionBase>();
            var action_list = getActions(node);

            lock (lockObj)
            {
                foreach (var act in action_list)
                {
                    if (act.isInit())
                    {
                        if (act.node == node)
                        {
                            action_listret.Add(act);
                        }
                    }
                }
            }
            return(action_listret);
        }
コード例 #21
0
        public List <ActionBase> getActionCount(AbstractCanDevice node)
        {
            List <ActionBase> action_listret = new List <ActionBase>();
            var action_list = getActions(node);

            lock (lockObj)
            {
                foreach (var act in action_list)
                {
                    if (act.getIsStop() == false)
                    {
                        List <ActionBase> action_listtem = new List <ActionBase>();
                        act.getAllAct(node, ref action_listtem);
                        if (action_listtem.Count != 0)
                        {
                            action_listret.Add(act);
                        }
                    }
                }
            }
            return(action_listret);
        }
コード例 #22
0
ファイル: ActionDevice.cs プロジェクト: jume2003/SK800
        public bool GetRealZ(AbstractCanDevice node_tem, ref int z)
        {
            bool ret = true;

            if (node_tem is MachineHandDevice)
            {
                var device = (MachineHandDevice)node_tem;
                ret = ret && device.CanComm.ReadRegister(device.Hand.ZMotor.RealDistance.Addr);
                z   = device.CanComm.GetInt(device.Hand.ZMotor.RealDistance.Addr, 0);
                z   = Convert.ToInt32(z / Convert.ToDecimal(device.Hand.ZMotor.Factor.SetValue));
            }
            else if (node_tem is InjectorDevice)
            {
                System.Diagnostics.Debug.Assert(false);
            }
            else if (node_tem is PiercerDevice)
            {
                var device = (PiercerDevice)node_tem;
                ret = ret && device.CanComm.ReadRegister(device.Pie.ZMotor.RealDistance.Addr);
                z   = device.CanComm.GetInt(device.Pie.ZMotor.RealDistance.Addr, 0);
                z   = Convert.ToInt32(z / Convert.ToDecimal(device.Pie.ZMotor.Factor.SetValue));
            }
            else if (node_tem is CentrifugeMDevice)
            {
                var device = (CentrifugeMDevice)node_tem;
                ret = ret && device.CanComm.ReadRegister(device.Centrifugem.Motor.RealDistance.Addr);
                z   = device.CanComm.GetInt(device.Centrifugem.Motor.RealDistance.Addr, 0);
                z   = Convert.ToInt32(z / Convert.ToDecimal(device.Centrifugem.Motor.Factor.SetValue));
            }
            else if (node_tem is CouveuseMixerDevice)
            {
                var device = (CouveuseMixerDevice)node_tem;
                ret = ret && device.CanComm.ReadRegister(device.CouMixer.Mixer.RealDistance.Addr);
                z   = device.CanComm.GetInt(device.CouMixer.Mixer.RealDistance.Addr, 0);
                z   = Convert.ToInt32(z / Convert.ToDecimal(device.CouMixer.Mixer.Factor.SetValue));
            }
            return(ret);
        }
コード例 #23
0
        public List <ActionBase> getActions(AbstractCanDevice node)
        {
            List <ActionBase> actionlisttem = new List <ActionBase>();

            lock (lockObj)
            {
                for (int i = 0; i < actionlist.Count; i++)
                {
                    if (actionlist[i].node == node)
                    {
                        actionlisttem.Add(actionlist[i]);
                    }
                }
                for (int i = 0; i < actiontemlist.Count; i++)
                {
                    if (actiontemlist[i].node == node)
                    {
                        actionlisttem.Add(actiontemlist[i]);
                    }
                }
            }
            return(actionlisttem);
        }
コード例 #24
0
        public void Logic(double dt)
        {
            lock (mylock)
            {
                if (action_tree.Count == 0)
                {
                    return;
                }
                //机器手空闲回零
                if (actionmanager.getAllActionsCount(injectorDevice) == 0 && injectorDevice.Injector.XMotor.CurrentDistance != 0)
                {
                    inj_wait_time += dt;
                    if (inj_wait_time > 1000)
                    {
                        var act = Sequence.create(
                            InjectMoveTo.create(injectorDevice, 3000, injectorDevice.GetSeleteced(), -1, IMask.Gen(-1), IMask.Gen(0)),
                            InjectMoveTo.create(injectorDevice, 3000, injectorDevice.GetSeleteced(), 0, IMask.Gen(0), IMask.Gen(-1)),
                            InitXyz.create(injectorDevice, 10000, injectorDevice.GetSeleteced(), true, true, true));
                        act.runAction(injectorDevice);
                        inj_wait_time = 0;
                    }
                }
                var act_group = action_tree[0];
                if (act_group.Count != 0 && act_group[0].State == 0)
                {
                    var seque_act            = Sequence.create();
                    AbstractCanDevice device = null;
                    if (act_group[0].InjectCount != 0)
                    {
                        foreach (var act_tem in act_group)
                        {
                            resmanager.tip_count += act_tem.InjectCount;
                        }
                        device = injectorDevice;
                        foreach (var act in act_group)
                        {
                            act.UpdataPoints();
                        }
                        seque_act = generater.GenerateAction(act_group);
                    }
                    else
                    {
                        foreach (var act in act_group)
                        {
                            act.UpdataPoints();
                            switch (act.StepClass)
                            {
                            case TestStepEnum.LoadGel:
                            {
                                device = handDevice;
                                var paper_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "4");
                                //var ware_seat = resmanager.GetResByCode(act.GetGelMask(), "T_BJ_GelWarehouse");
                                seque_act.AddAction(HandTakeGelFromWare.create(handDevice, 3001, gelwareDevice, act.GelMaskID, act.GetGelMask(), act.SampleBarCode));
                                seque_act.AddAction(HandPutGelToNormal.create(handDevice, 3001, gelwareDevice, paper_seat));
                            }
                            break;

                            case TestStepEnum.KaiKongGel:
                            {
                                int handrx      = 0;
                                var device_hand = new ActionDevice(handDevice);
                                var paper_seat  = resmanager.GetResByCode(act.GetGelMask(), "T_BJ_GelSeat", "", "4");
                                if (paper_seat != null && device_hand.GetRealX(ref handrx) &&
                                    (handrx + 1000) < paper_seat.X && ActionDevice.hand_tx < paper_seat.X)
                                {
                                    device = piercerDevice;
                                    seque_act.AddAction(PaperCard.create(piercerDevice, 3000, paper_seat));
                                    seque_act.AddAction(SkCallBackFun.create((ActionBase acttem) => {
                                            resmanager.gel_count++;
                                            return(true);
                                        }));
                                }
                                else
                                {
                                    return;
                                }
                            }
                            break;

                            case TestStepEnum.JYJS:
                            {
                                device = injectorDevice;
                                //得到剩下动作
                                List <T_GelStep> act_list = new List <T_GelStep>();
                                foreach (var act_tem in action_tree)
                                {
                                    if (act_tem.Count == 1 && act_tem[0].StepClass != TestStepEnum.GELEND)
                                    {
                                        act_tem[0].State = 2;
                                        act_list.Add(act_tem[0]);
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                                act_list.Remove(act);
                                var actplist   = ActionPoint.GenActList(act_list);
                                var paper_seat = resmanager.GetResByCode(act.GetGelMask(), "T_BJ_GelSeat", "", "4");
                                foreach (var actp in actplist)
                                {
                                    paper_seat.ActionList.Add(actp.type);
                                    if (actp.hatchtime != 0)
                                    {
                                        paper_seat.HatchTime = actp.hatchtime;
                                    }
                                }
                                seque_act.AddAction(SkCallBackFun.create((ActionBase acttem) =>
                                    {
                                        paper_seat.InjectFinish = true;
                                        return(true);
                                    }));
                            }
                            break;
                            }
                        }
                    }

                    if (device != null)
                    {
                        seque_act.AddAction(SkCallBackFun.create((ActionBase act) =>
                        {
                            act_group[0].State = 2;
                            return(true);
                        }));
                        act_group[0].State = 1;
                        seque_act.runAction(device);
                    }
                    else
                    {
                        act_group[0].State = 2;
                    }
                }
            }
        }
コード例 #25
0
 public void runAction(AbstractCanDevice nodetem)
 {
     node = nodetem;
     runAction();
 }
コード例 #26
0
        public override void run(double dt)
        {
            bool resultx               = true;
            bool resulty               = true;
            bool resultz               = true;
            int  device_rx             = 0;
            int  device_cx             = 0;
            AbstractCanDevice checkdev = null;
            var handdev   = ActionGenerater.getInstance().handDevice;
            var injectdev = ActionGenerater.getInstance().injectorDevice;

            if (CountTime(dt))
            {
                return;
            }
            var device = new ActionDevice(node);

            if (node is InjectorDevice)
            {
                checkdev  = ActionGenerater.getInstance().handDevice;
                device_cx = (int)handdev.Hand.XMotor.CurrentDistance;
            }
            else if (node is MachineHandDevice)
            {
                checkdev  = ActionGenerater.getInstance().injectorDevice;
                device_cx = (int)injectdev.Injector.XMotor.CurrentDistance;
            }
            switch (step)
            {
            case 0:
                if (x >= 0 && checkdev != null && false)
                {
                    sumdt      = 0;
                    wait_time += dt;
                    if (wait_time > 500)
                    {
                        wait_time = 0;
                        bool is_timeout = false;
                        if (checkdev is MachineHandDevice)
                        {
                            handdev.CanComm.ReadRegister(handdev.Hand.XMotor.RealDistance.Addr);
                            device_rx = handdev.CanComm.GetIntBlock(handdev.Hand.XMotor.RealDistance.Addr, 1000, out is_timeout);
                        }
                        else if (checkdev is InjectorDevice)
                        {
                            injectdev.CanComm.ReadRegister(injectdev.Injector.XMotor.RealDistance.Addr);
                            device_rx = injectdev.CanComm.GetIntBlock(injectdev.Injector.XMotor.RealDistance.Addr, 1000, out is_timeout);
                        }
                        if (is_timeout == false)
                        {
                            int device_max = 10000 - x;
                            if (device_max < 0)
                            {
                                device_max = 0;
                            }
                            if (device_rx <= device_max && device_cx <= device_max)
                            {
                                step++;
                            }
                            else if (ActionManager.getInstance().getAllRuningActionsCount(checkdev) == 0)
                            {
                                Sequence          sequ = null;
                                List <Enterclose> ents = new List <Enterclose>();
                                ents.Add(injectdev.Injector.Entercloses[0]);
                                if (checkdev is MachineHandDevice)
                                {
                                    sequ = Sequence.create(MoveTo.create(checkdev, 3000, -1, -1, 0), MoveTo.create(checkdev, 3000, device_max, -1, -1));
                                }
                                else if (checkdev is InjectorDevice)
                                {
                                    sequ = Sequence.create(InjectMoveTo.create(3000, ents.ToArray(), -1, IMask.Gen(-1), IMask.Gen(0)), MoveTo.create(checkdev, 3000, device_max, -1, -1));
                                }
                                sequ.runAction(checkdev);
                            }
                        }
                    }
                }
                else
                {
                }
                step++;
                break;

            case 1:
                if (x >= 0)
                {
                    resultx = device.MoveX((int)x);
                }
                if (y >= 0)
                {
                    resulty = device.MoveY((int)y);
                }
                if (z >= 0)
                {
                    resultz = device.MoveZ((int)z, speed);
                }
                if (resultx && resulty && resultz)
                {
                    step++;
                }
                break;

            case 2:
                if (xdone == false)
                {
                    xdone = device.DoneX();
                }
                if (ydone == false)
                {
                    ydone = device.DoneY();
                }
                if (zdone == false)
                {
                    zdone = device.DoneZ();
                }
                isfinish = xdone && ydone && zdone;
                break;
            }
        }
コード例 #27
0
        public void ActLogic(List <T_GelStep> act_group, List <T_GelStep> act_group_next, double dt)
        {
            if (act_group != null && act_group.Count != 0 && act_group[0].State == 0)
            {
                int next_state    = 2;
                var seque_act     = Sequence.create();
                var exper_package = ((ExperimentPackage)act_group[0].ExperPackage);
                seque_act.exp_pack = exper_package;
                AbstractCanDevice device = null;
                foreach (var act in act_group)
                {
                    resmanager.tip_count += act.InjectCount;
                }
                if (act_group[0].InjectCount != 0)
                {
                    var act_next = act_group_next == null ? null : act_group_next[0];
                    device = injectorDevice;
                    act_group.Sort((a, b) => { return(((ExperimentPackage)a.ExperPackage).piercer_index > ((ExperimentPackage)b.ExperPackage).piercer_index ? 1 : -1); });
                    seque_act = generater.GenerateAction(act_group);
                    if (act_next != null && act_next.InjectCount == 0)
                    {
                        seque_act.AddAction(SkCallBackFun.create((ActionBase act_tem) =>
                        {
                            inj_wait_time = 9999;
                            return(true);
                        }));
                    }
                }
                else
                {
                    var act      = act_group[0];
                    var act_next = act_group_next == null ? null : act_group_next[0];
                    var resinfo  = resmanager.GetResByCode(exper_package.GetGelMask(), "T_BJ_GelSeat");
                    if (resinfo == null)
                    {
                        resinfo = resmanager.GetResByCode(exper_package.GetGelMask(), "T_BJ_Centrifuge");
                    }
                    if ((resinfo == null || !resinfo.PutOk) && act.StepClass != TestStepEnum.LoadGel)
                    {
                        return;
                    }
                    switch (act.StepClass)
                    {
                    case TestStepEnum.LoadGel:
                    {
                        if (actionmanager.getAllActionsCount(handDevice) == 0)
                        {
                            var take_seat  = resmanager.GetResByCode(exper_package.GetGelMask(), "T_BJ_GelSeat", "", "3");
                            var paper_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "4", null, exper_package.is_crossmatching);
                            if (paper_seat != null)
                            {
                                device = handDevice;
                                if (take_seat != null)
                                {
                                    generater.GenerateTakeGelFromNormal(take_seat, ref seque_act);
                                }
                                else
                                {
                                    seque_act.AddAction(HandTakeGelFromWare.create(handDevice, 3001, gelwareDevice, exper_package.gel_mask_id, exper_package.GetGelMask(), exper_package.GetSampleCode(act.SampleIndex)));
                                }
                                seque_act.AddAction(HandPutGelToNormal.create(handDevice, 3001, gelwareDevice, paper_seat));
                                if (act_next != null && act_next.StepClass != TestStepEnum.LoadGel)
                                {
                                    seque_act.AddAction(SkCallBackFun.create((ActionBase act_tem) => {
                                            hand_wait_time = 999999;
                                            var ware_act   = MoveTo.create(gelwareDevice, 3000, 0);
                                            ware_act.runAction(gelwareDevice);
                                            return(true);
                                        }));
                                }
                                exper_package.piercer_index             = paper_seat.CountX;
                                paper_seat.Values[paper_seat.CountX, 0] = new ResInfoData();
                                seque_act.destroyfun = (ActionBase act_tem) =>
                                {
                                    paper_seat.Values[paper_seat.CountX, 0] = null;
                                    return(true);
                                };
                                next_state = 2;
                            }
                            else
                            {
                                next_state = 0;
                            }
                        }
                        else
                        {
                            next_state = 0;
                        }
                    }
                    break;

                    case TestStepEnum.KaiKongGel:
                    {
                        int handrx      = 0;
                        int injrx       = 0;
                        var device_hand = new ActionDevice(handDevice);
                        var device_inj  = new ActionDevice(injectorDevice);
                        next_state = 0;
                        if (resinfo.Purpose != "4")
                        {
                            var put_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "4");
                            if (put_seat == null && resinfo.Purpose != "3")
                            {
                                put_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "3");
                            }
                            if (put_seat != null)
                            {
                                device = handDevice;
                                ResInfoData put_gel = null;
                                if (resinfo.Purpose == "lxj")
                                {
                                    put_gel = generater.GenerateTakeGelFromCent(resinfo, resinfo.CenCode, ref seque_act);
                                }
                                else
                                {
                                    put_gel = generater.GenerateTakeGelFromNormal(resinfo, ref seque_act);
                                }
                                generater.GeneratePutGelToNormal(put_seat, put_gel, ref seque_act);
                                next_state = 0;
                            }
                        }
                        else
                        {
                            bool is_next_kaikong = act_next != null ? act_next.StepClass == TestStepEnum.KaiKongGel : false;
                            var  paper_seat      = resmanager.GetResByCode(exper_package.GetGelMask(), "T_BJ_GelSeat", "", "4");
                            int  yb = is_next_kaikong ? -1 : 0;
                            if (paper_seat != null &&
                                device_hand.GetRealX(ref handrx) &&
                                (handrx + 1000) < paper_seat.X && ActionDevice.hand_tx < paper_seat.X &&
                                device_inj.GetRealX(ref injrx) &&
                                (injrx + 1000) < paper_seat.InjectorX && ActionDevice.inj_tx < paper_seat.InjectorX + 1000)
                            {
                                device = piercerDevice;
                                seque_act.AddAction(PaperCard.create(piercerDevice, 3000, paper_seat, yb));
                                seque_act.AddAction(SkCallBackFun.create((ActionBase acttem) =>
                                    {
                                        exper_package.is_open = true;
                                        resmanager.gel_count++;
                                        return(true);
                                    }));
                                next_state = 2;
                            }
                        }
                    }
                    break;

                    case TestStepEnum.JYJS:
                    {
                        exper_package.is_jyjs = true;
                        next_state            = 2;
                    }
                    break;

                    case TestStepEnum.ZKDFY:
                    {
                        next_state = 0;
                        if (resinfo.Purpose == "1")
                        {
                            next_state = 0;
                            exper_package.hatch_cur_time += dt;
                            if (exper_package.hatch_cur_time >= exper_package.hatch_time)
                            {
                                next_state = 2;
                            }
                        }
                        else if (!(resinfo.Purpose == "4" && actionmanager.getAllActionsCount(piercerDevice) != 0))
                        {
                            var put_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "1");
                            if (put_seat == null && resinfo.Purpose != "3")
                            {
                                put_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "3");
                            }
                            if (put_seat != null)
                            {
                                device = handDevice;
                                ResInfoData put_gel = null;
                                if (resinfo.Purpose == "lxj")
                                {
                                    put_gel = generater.GenerateTakeGelFromCent(resinfo, resinfo.CenCode, ref seque_act);
                                }
                                else
                                {
                                    put_gel = generater.GenerateTakeGelFromNormal(resinfo, ref seque_act);
                                }
                                exper_package.hatch_cur_time = 0;
                                generater.GeneratePutGelToNormal(put_seat, put_gel, ref seque_act);
                                next_state = 0;
                            }
                            else
                            {
                                next_state = 0;
                            }
                        }
                    }
                    break;

                    case TestStepEnum.ZKDLXJ:
                    {
                        if (actionmanager.getAllActionsCount(handDevice) == 0)
                        {
                            next_state = 0;
                            if (resinfo.Purpose != "lxj" && !(resinfo.Purpose == "4" && actionmanager.getAllActionsCount(piercerDevice) != 0))
                            {
                                //查看可用离心机
                                var centrifuge_list = resmanager.centrifuge_list.Where(item => item.Status == 1).ToList();
                                centrifuge_list.Sort((a, b) => { return(a.LastUseTime < b.LastUseTime ? 1 : -1); });
                                foreach (var seat in centrifuge_list)
                                {
                                    CentrifugeMDevice cendev = cenMrg.GetCentrifugeByCode(seat.Code);
                                    if (seat.Status == 1 && cendev != null)
                                    {
                                        device = handDevice;
                                        bool is_last_cent = seat == centrifuge_list[centrifuge_list.Count - 1];
                                        bool iscanputcen  = IsCanPutCen(cendev);
                                        var  put_seat     = resmanager.GetResByCode("null", "T_BJ_Centrifuge", cendev.Centrifugem.Code.SetValue);
                                        if (iscanputcen == false)
                                        {
                                            put_seat = null;
                                        }
                                        //放进待定位
                                        if (put_seat == null && resinfo.Purpose != "3" && is_last_cent)
                                        {
                                            put_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "3");
                                        }
                                        if (put_seat != null)
                                        {
                                            var spaw      = Spawn.create();
                                            var put_seque = Sequence.create();
                                            if (put_seat.Purpose == "lxj")
                                            {
                                                //打开离心机门
                                                var opendoor_act = HandOpenCloseDoor.create(handDevice, 5000, cendev.Centrifugem.Code.SetValue, true);
                                                put_seque.AddAction(opendoor_act);
                                            }
                                            var put_gel = generater.GenerateTakeGelFromNormal(resinfo, ref put_seque);
                                            spaw.AddAction(put_seque);
                                            seque_act.AddAction(spaw);
                                            if (put_seat.Purpose == "lxj")
                                            {
                                                spaw.AddAction(MoveTo.create(cendev, 30001, -1, -1, put_seat.CenGelP[put_seat.CountX]));
                                                generater.GeneratePutGelToCent(cendev.Centrifugem.Code.SetValue, put_seat, put_gel, ref seque_act);
                                            }
                                            else
                                            {
                                                generater.GeneratePutGelToNormal(put_seat, put_gel, ref seque_act);
                                            }
                                            seat.LastUseTime = Engine.getInstance().getSystemMs();
                                            break;
                                        }
                                        else
                                        {
                                            next_state = 0;
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            next_state = 0;
                        }
                    }
                    break;

                    case TestStepEnum.PutPeiGelBack:
                    {
                        var put_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "2");
                        if (put_seat != null && resinfo.Purpose == "lxj")
                        {
                            device = handDevice;
                            var put_gel = generater.GenerateTakeGelFromCent(resinfo, resinfo.CenCode, ref seque_act);
                            generater.GeneratePutGelToNormal(put_seat, put_gel, ref seque_act);
                            next_state = 2;
                        }
                    }
                    break;

                    case TestStepEnum.XJPD:
                    {
                        var put_seat     = resmanager.GetResByCode("", "T_BJ_Camera");               //相机位
                        var wasted_seat  = resmanager.GetResByCode("", "T_BJ_WastedSeat", "", "1");  //垃圾位
                        var daiding_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "3"); //待定位
                        if (put_seat != null && wasted_seat != null && !(resinfo.Purpose == "4" && actionmanager.getAllActionsCount(piercerDevice) != 0))
                        {
                            device = handDevice;
                            ResInfoData put_gel = null;
                            if (resinfo.Purpose == "lxj")
                            {
                                put_gel = generater.GenerateTakeGelFromCent(resinfo, resinfo.CenCode, ref seque_act);
                            }
                            else
                            {
                                put_gel = generater.GenerateTakeGelFromNormal(resinfo, ref seque_act);
                            }

                            seque_act.AddAction(MoveTo.create(handDevice, 3000, -1, -1, 0));
                            seque_act.AddAction(MoveTo.create(handDevice, 3000, (int)put_seat.X, (int)(put_seat.Y), -1));
                            seque_act.AddAction(MoveTo.create(handDevice, 3000, -1, -1, (int)(put_seat.Z)));
                            //拍照分析
                            seque_act.AddAction(SkCallBackFun.create((ActionBase acttem) =>
                                {
                                    opDevice.CameraLight(true);
                                    bool result = true;
                                    if (cameraDevice.IsOpen == false)
                                    {
                                        result = cameraDevice.Open();
                                    }
                                    var bm = cameraDevice.CaptureImage();
                                    cameraDevice.Save(bm, exper_package);
                                    opDevice.CameraLight(false);
                                    return(true);
                                }));
                            //是否还有动作
                            if (exper_package.action_list.Count > 1 && daiding_seat != null)
                            {
                                seque_act.AddAction(MoveTo.create(handDevice, 3000, -1, -1, 0));
                                generater.GeneratePutGelToNormal(daiding_seat, put_gel, ref seque_act);
                            }
                            else
                            {
                                seque_act.AddAction(MoveTo.create(handDevice, 3000, -1, -1, 0));
                                seque_act.AddAction(MoveTo.create(handDevice, 3000, (int)wasted_seat.X, (int)(wasted_seat.Y)));
                                seque_act.AddAction(HandPutCard.create(handDevice, 3000, (int)wasted_seat.ZPut, 0));
                                seque_act.AddAction(SkCallBackFun.create((ActionBase act_tem) => {
                                        DelPackage(exper_package);
                                        return(true);
                                    }));
                            }
                            next_state = 2;
                        }
                    }
                    break;

                    case TestStepEnum.ECONOMIZECOUNTTIME:
                    {
                        next_state = 0;
                        if (exper_package.is_open)
                        {
                            exper_package.after_kktime -= dt;
                            if (exper_package.after_kktime <= 0)
                            {
                                device     = handDevice;
                                next_state = 2;
                                exper_package.after_kktime = 0;
                                ResInfoData put_gel = null;
                                if (resinfo.Purpose == "lxj")
                                {
                                    put_gel = generater.GenerateTakeGelFromCent(resinfo, resinfo.CenCode, ref seque_act);
                                }
                                else
                                {
                                    put_gel = generater.GenerateTakeGelFromNormal(resinfo, ref seque_act);
                                }

                                var wasted_seat = resmanager.GetResByCode("", "T_BJ_WastedSeat");        //垃圾位
                                seque_act.AddAction(MoveTo.create(handDevice, 3000, -1, -1, 0));
                                seque_act.AddAction(MoveTo.create(handDevice, 3000, (int)wasted_seat.X, (int)(wasted_seat.Y)));
                                seque_act.AddAction(HandPutCard.create(handDevice, 3000, (int)wasted_seat.ZPut, 0));
                            }
                        }
                    }
                    break;
                    }
                }
                if (device != null)
                {
                    seque_act.AddAction(SkCallBackFun.create((ActionBase act) =>
                    {
                        foreach (var act_tem in act_group)
                        {
                            act_tem.State = next_state;
                        }
                        return(true);
                    }));
                    foreach (var act_tem in act_group)
                    {
                        act_tem.State = 1;
                    }
                    seque_act.runAction(device);
                }
                else
                {
                    foreach (var act_tem in act_group)
                    {
                        act_tem.State = next_state;
                    }
                }
            }
        }
コード例 #28
0
        private bool RunLogic(IList <T_LogicStep> steps, out String msg)
        {
            msg = null;
            var seque_root = Sequence.create();
            var seque      = Sequence.create();
            var resmanager = ResManager.getInstance();
            var generater  = ActionGenerater.getInstance();
            int loop_times = 0;

            foreach (var step in steps)
            {
                switch (step.StepEnum)
                {
                case LogicStepEnum.Alert:
                    seque.AddAction(SkCallBackFun.create((ActionBase act_tem) =>
                    {
                        ErrorSystem.WriteActError(step.Parameters, true, false, 9999);
                        return(true);
                    }));
                    break;

                case LogicStepEnum.InitAll:
                    var act_init = opDevice.InitAllDevice();
                    seque.AddAction(act_init);
                    break;

                case LogicStepEnum.Centrifuge:
                {
                    CommonAction action = Convert2T <CommonAction>(step.Parameters);
                    var          cen    = cenMrg.GetCentrifugeByCode(action.Code);
                    if (cen != null)
                    {
                        if (action.DoAction == 0)        //正常离心程序
                        {
                            int hspeed  = (int)cen.Centrifugem.HightSpeed.SetValue;
                            int lspeed  = (int)cen.Centrifugem.LowSpeed.SetValue;
                            int htime   = (int)cen.Centrifugem.HightSpeedTime.SetValue;
                            int ltime   = (int)cen.Centrifugem.LowSpeedTime.SetValue;
                            int uphtime = (int)cen.Centrifugem.AddHSpeedTime.SetValue;
                            int upltime = (int)cen.Centrifugem.AddLSpeedTime.SetValue;
                            int stime   = (int)cen.Centrifugem.StopSpeedTime.SetValue;
                            var act     = CentrifugeStart.create(cen, 3000000, hspeed, lspeed, htime, ltime, uphtime, upltime, stime);
                            seque.AddAction(act);
                        }
                        else if (action.DoAction == 1)        //移动指定卡位
                        {
                            var resinfo = ResManager.getInstance().SearchGelCard("T_BJ_Centrifuge", action.Code, "", (int)action.SeatIndex);
                            var act     = MoveTo.create(cen, 30000, -1, -1, resinfo.CenGelP[resinfo.CountX], 5);
                            seque.AddAction(act);
                        }
                        else if (action.DoAction == 2)        //开舱门
                        {
                            var act = HandOpenCloseDoor.create(handDevice, 3000, action.Code, true);
                            seque.AddAction(act);
                        }
                        else if (action.DoAction == 3)        //关舱门
                        {
                            var act = HandOpenCloseDoor.create(handDevice, 3000, action.Code, false);
                            seque.AddAction(act);
                        }
                        else if (action.DoAction == 4)        //初始化
                        {
                            var act = InitXyz.create(cen, 3000, false, false, true);
                            seque.AddAction(act);
                        }
                    }
                    else
                    {
                        ErrorSystem.WriteActError("找不到指定离心机", true, false, 9999);
                    }
                }
                break;

                case LogicStepEnum.Couveuse:
                {
                }
                break;

                case LogicStepEnum.Delay:
                {
                    int DelayTime = Convert.ToInt32(step.Parameters);
                    seque.AddAction(SKSleep.create(DelayTime));
                }
                break;

                case LogicStepEnum.DetectSquid:
                {
                    DetectAction      action   = Convert2T <DetectAction>(step.Parameters);
                    List <Enterclose> iinjects = new List <Enterclose>();
                    foreach (var entindex in action.Indexs)
                    {
                        iinjects.Add(injDevice.Injector.Entercloses[entindex]);
                    }
                    seque.AddAction(InjectDetector.create(3000, iinjects.ToArray(), IMask.Gen((int)action.Start), IMask.Gen((int)action.ZLimit), IMask.Gen(0)));
                }
                break;

                case LogicStepEnum.SimpleAction:
                {
                    SimpleAction      action = Convert2T <SimpleAction>(step.Parameters);
                    AbstractCanDevice device = null;
                    switch (action.Device)
                    {
                    case "加样器":
                        device = injDevice;
                        break;

                    case "机械手":
                        device = handDevice;
                        break;

                    case "卡仓":
                        device = gelwareDevice;
                        break;

                    case "破孔器":
                        device = gelwareDevice;
                        break;
                    }
                    if (action.Action == "移动")
                    {
                        ActionBase act_move = null;
                        int        x        = action.Direction == "X" ? (int)action.Value : -1;
                        int        y        = action.Direction == "Y" ? (int)action.Value : -1;
                        int        z        = action.Direction == "Z"? (int)action.Value:-1;
                        if (action.Direction == "XYZ")
                        {
                            x = y = z = (int)action.Value;
                        }
                        if (device is InjectorDevice)
                        {
                            act_move = InjectMoveTo.create(device, 3000, injDevice.Injector.Entercloses, x, IMask.Gen(y), IMask.Gen(z));
                        }
                        else
                        {
                            act_move = MoveTo.create(device, 3000, x, y, z);
                        }
                        seque.AddAction(act_move);
                    }
                    else if (action.Action == "初始化")
                    {
                        ActionBase act_move = null;
                        bool       x        = action.Direction == "X" ? true : false;
                        bool       y        = action.Direction == "Y" ? true : false;
                        bool       z        = action.Direction == "Z" ? true : false;
                        if (action.Direction == "XYZ")
                        {
                            x = y = z = true;
                        }
                        if (device is InjectorDevice)
                        {
                            act_move = InitXyz.create(device, 30000, injDevice.Injector.Entercloses, x, y, z);
                        }
                        else
                        {
                            act_move = InitXyz.create(device, 30000, x, y, z);
                        }
                        seque.AddAction(act_move);
                    }
                }
                break;

                case LogicStepEnum.TakeAndPutDownGel:
                {
                    GelAction[] actions = Convert2T <GelAction[]>(step.Parameters);
                    seque.AddAction(MoveTo.create(handDevice, 3000, -1, -1, 0));
                    ResInfoData take_seat = null;
                    if (actions[0].BJType == "T_BJ_GelSeat")
                    {
                        take_seat = resmanager.SearchGelCard("T_BJ_GelSeat", "", "", actions[0].Index, 0, true, actions[0].BJName);
                        generater.GenerateTakeGelFromNormal(take_seat, ref seque);
                    }
                    else if (actions[0].BJType == "T_BJ_Centrifuge")
                    {
                        take_seat = resmanager.SearchGelCard("T_BJ_Centrifuge", "", "", actions[0].Index, 0, true, actions[0].BJName);
                        var act = generater.GenerateTakeGelFromCent(take_seat, "", ref seque);
                    }
                    else if (actions[0].BJType == "T_BJ_GelWarehouse")
                    {
                        take_seat = resmanager.SearchGelCard("T_BJ_GelWarehouse", "", "", actions[0].Index, 0, true, actions[0].BJName);
                        var act = generater.GenerateTakeGelFromWare(take_seat, ref seque);
                    }

                    if (actions[1].BJType == "T_BJ_GelSeat")
                    {
                        var put_seat = resmanager.SearchGelCard("T_BJ_GelSeat", "", "", actions[1].Index, 0, true, actions[1].BJName);
                        generater.GeneratePutGelToNormal(put_seat, take_seat, ref seque);
                    }
                    else if (actions[1].BJType == "T_BJ_Centrifuge")
                    {
                        var put_seat = resmanager.SearchGelCard("T_BJ_Centrifuge", "", "", actions[1].Index, 0, true, actions[1].BJName);
                        generater.GeneratePutGelToCent(put_seat.CenCode, put_seat, take_seat, ref seque);
                    }
                    else if (actions[1].BJType == "T_BJ_GelWarehouse")
                    {
                        var put_seat = resmanager.SearchGelCard("T_BJ_GelWarehouse", "", "", actions[1].Index, 0, true, actions[1].BJName);
                        generater.GeneratePutGelToWare(put_seat, take_seat, ref seque);
                    }
                }
                break;

                case LogicStepEnum.TakeGel:
                {
                    GelAction   action    = Convert2T <GelAction>(step.Parameters);
                    ResInfoData take_seat = null;
                    if (action.BJType == "T_BJ_GelSeat")
                    {
                        take_seat = resmanager.SearchGelCard("T_BJ_GelSeat", "", "", action.Index, 0, true, action.BJName);
                        generater.GenerateTakeGelFromNormal(take_seat, ref seque);
                    }
                    else if (action.BJType == "T_BJ_Centrifuge")
                    {
                        take_seat = resmanager.SearchGelCard("T_BJ_Centrifuge", "", "", action.Index, 0, true, action.BJName);
                        var act = generater.GenerateTakeGelFromCent(take_seat, "", ref seque);
                    }
                    else if (action.BJType == "T_BJ_GelWarehouse")
                    {
                        take_seat = resmanager.SearchGelCard("T_BJ_GelWarehouse", "", "", action.Index, 0, true, action.BJName);
                        var act = generater.GenerateTakeGelFromWare(take_seat, ref seque);
                    }
                    break;
                }

                case LogicStepEnum.PutDownGel:
                {
                    GelAction   action    = Convert2T <GelAction>(step.Parameters);
                    ResInfoData take_seat = resmanager.handseat_resinfo;
                    if (action.BJType == "T_BJ_GelSeat")
                    {
                        var put_seat = resmanager.SearchGelCard("T_BJ_GelSeat", "", "", action.Index, 0, true, action.BJName);
                        generater.GeneratePutGelToNormal(put_seat, take_seat, ref seque);
                    }
                    else if (action.BJType == "T_BJ_Centrifuge")
                    {
                        var put_seat = resmanager.SearchGelCard("T_BJ_Centrifuge", "", "", action.Index, 0, true, action.BJName);
                        generater.GeneratePutGelToCent(put_seat.CenCode, put_seat, take_seat, ref seque);
                    }
                    else if (action.BJType == "T_BJ_GelWarehouse")
                    {
                        var put_seat = resmanager.SearchGelCard("T_BJ_GelWarehouse", "", "", action.Index, 0, true, action.BJName);
                        generater.GeneratePutGelToWare(put_seat, take_seat, ref seque);
                    }
                    break;
                }

                case LogicStepEnum.TakeTip:
                {
                    TakeTipAction      action   = Convert2T <TakeTipAction>(step.Parameters);
                    var                ents     = injDevice.Injector.Entercloses.Where(ent => ent.Valid && action.Indexs.Contains(ent.Index)).ToArray();
                    var                tipseat  = Constants.BJDict[typeof(T_BJ_Tip).Name].Where(item => item.Name == action.TipBoxName).FirstOrDefault() as T_BJ_Tip;
                    List <ActionPoint> tip_seat = new List <ActionPoint>();
                    foreach (var ent in ents)
                    {
                        int x     = (int)(tipseat.X - action.C * tipseat.GapX);
                        int y     = (int)(tipseat.Y + action.R * tipseat.GapY);
                        var point = new ActionPoint();
                        point.x     = x;
                        point.y     = y;
                        point.z     = (int)tipseat.Limit;
                        point.type  = TestStepEnum.JXZT;
                        point.index = ent.Index;
                        tip_seat.Add(point);
                    }
                    var sequ_taketip = Sequence.create();
                    var move_act     = InjectMoveActs.create(injDevice, 3000, tip_seat.ToArray(), false);
                    sequ_taketip.AddAction(InjectMoveTo.create(injDevice, 3000, ents, -1, IMask.Gen(-1), IMask.Gen(0)));
                    sequ_taketip.AddAction(move_act);
                    seque.AddAction(sequ_taketip);
                }
                break;

                case LogicStepEnum.OutTip:
                {
                    TakeTipAction      action        = Convert2T <TakeTipAction>(step.Parameters);
                    var                ents          = injDevice.Injector.Entercloses.Where(ent => ent.Valid && action.Indexs.Contains(ent.Index)).ToArray();
                    var                sequ_puttip   = Sequence.create();
                    List <ActionPoint> unload_seat   = new List <ActionPoint>();
                    var                inject_unload = resmanager.unload_list;
                    if (inject_unload.Count() == 1)
                    {
                        var unloader = inject_unload[0];
                        for (int i = 0; i < 4; i++)
                        {
                            var unload_point = new ActionPoint((int)unloader.X, (int)unloader.Y + i * (int)unloader.FZ, (int)unloader.Z, TestStepEnum.JXZT);
                            unload_point.puttip_x = (int)unloader.FirstX;
                            unload_seat.Add(unload_point);
                        }
                        sequ_puttip.AddAction(InjectMoveTo.create(injDevice, 3000, ents, -1, IMask.Gen(-1), IMask.Gen(0)));
                        sequ_puttip.AddAction(InjectMoveActs.create(injDevice, 3000, unload_seat.ToArray(), true));
                        seque.AddAction(sequ_puttip);
                    }
                }
                break;

                case LogicStepEnum.Piercer:
                {
                    var paper_seat = resmanager.GetResByCode("", "T_BJ_GelSeat", "", "4");
                    seque.AddAction(PaperCard.create(pieDevice, 3000, paper_seat, 0));
                }
                break;

                case LogicStepEnum.LoopStart:
                {
                    LogicLoop logicLoop = Convert2T <LogicLoop>(step.Parameters);
                    loop_times = logicLoop.Count;
                    seque_root.AddAction(seque);
                    seque = Sequence.create();
                }
                break;

                case LogicStepEnum.LoopEnd:
                {
                    var act_repat = Repeat.create(seque, loop_times);
                    seque_root.AddAction(act_repat);
                    seque      = Sequence.create();
                    loop_times = 0;
                }
                break;
                }
            }
            seque_root.AddAction(seque);
            seque_root.runAction(opDevice);
            return(true);
        }
コード例 #29
0
 public ActionDevice(AbstractCanDevice nodetem)
 {
     node = nodetem;
 }