Exemplo n.º 1
0
        public void RunScript(DishBuilder dish, TimeSpan time, bool broadcastClock)
        {
            if (!dish.isOk())
            {
                throw (new SystemException("Script is not valid"));
            }
            m_runScript = true;
            m_suspendClock.Reset();
            m_process = new Thread(() => DishProcess(dish));
            m_process.Start();


            m_clockThread = new Thread(() => BroadcastClock(time));
            m_clockThread.Start();
        }
Exemplo n.º 2
0
        public void RunScript(DishBuilder dish, bool broadcastClock)
        {
            if (m_runScript == true)
            {
                throw (new SystemException("Already running"));
            }

            if (!dish.isOk())
            {
                throw (new SystemException("Script is not valid"));
            }
            m_suspendClock.Reset();
            m_runScript = true;
            m_process   = new Thread(() => DishProcess(dish));
            m_process.Start();


            m_clockThread = new Thread(() => UpdateClock(dish.getTotalTime()));
            m_clockThread.Start();
        }
Exemplo n.º 3
0
        void DishProcess(DishBuilder dishList)
        {
            pCallback("ScriptStarted", "");
            int jumploop         = -1;
            int loopStartAddress = -1;
            int pc = 0;

            while (m_runScript)
            {
                try
                {
                    Tuple <MOTOR_CMD, float> n = dishList.getCommand(pc);
                    switch (n.Item1)
                    {
                    case MOTOR_CMD.MOVMENT:
                        if ((int)n.Item2 > m_motorLength)
                        {
                            m_runScript = false;
                            m_suspendClock.Set();
                            string s = (int)n.Item2 + "  " + m_motorLength;
                            pCallback("Position error", s);
                            return;
                        }
                        else
                        if ((int)n.Item2 > MaxLength)
                        {
                            m_runScript = false;
                            m_suspendClock.Set();
                            string s = (int)n.Item2 + "  " + MaxLength;
                            pCallback("Position error", s);
                            return;
                        }
                        else
                        if ((int)n.Item2 < MinLength)
                        {
                            m_runScript = false;
                            m_suspendClock.Set();
                            string s = (int)n.Item2 + "  " + MinLength;
                            pCallback("Position error", s);
                            return;
                        }
                        SetNewPosition((int)n.Item2);
                        m_event.Reset();
                        m_event.WaitOne();
                        break;

                    case MOTOR_CMD.SPEED:
                        m_speedLevel = (int)n.Item2;
                        break;

                    case MOTOR_CMD.WAIT:
                        m_suspendClock.Set();
                        m_timerCounter.WaitOne((int)n.Item2 * 1000);
                        m_suspendClock.Reset();
                        break;

                    case MOTOR_CMD.LOOP_START:
                        jumploop         = (int)n.Item2;
                        loopStartAddress = pc + 1;
                        break;

                    case MOTOR_CMD.LOOP_END:
                        jumploop--;
                        if (jumploop > 0)
                        {
                            pc = loopStartAddress;
                            continue;
                        }
                        break;
                    }
                    pc++;
                }
                catch (Exception err)
                {
                    if (err.Message == "Finished")
                    {
                        m_runScript = false;
                        m_runmotor  = false;
                        m_suspendClock.Set();
                        pCallback("Finished", "");
                        return;
                    }
                }
            }
        }