예제 #1
0
        private void DoCommandG01()
        {
            if ((owner == null) || (mCController == null) || (mCController.CommandHandle == null))
            {
                return;
            }
            if (!GetXYZ_FromStr(currentStrCommand, ref curGoalCoordts))
            {
                return;
            }

            Cut      ct        = new Cut(owner.CurWorkCoorts, curGoalCoordts);
            double   len       = 0;
            Vector3d nextPoint = owner.CurWorkCoorts;

            do
            {
                CSThreadMREvent.WaitOne(); //для паузы потока

                if (len > ct.Length)       //возможно прошли весь отрезок
                {
                    if (nextPoint == ct.EndPoint[false])
                    {
                        break; //прошли весь отрезок
                    }
                    else
                    {
                        nextPoint = curGoalCoordts;
                    }
                }
                else
                {
                    nextPoint = ct.GetPointLen(len);
                }

                TaskGoToRelativeCoorts(nextPoint);

                //А если робот передвинется раньше, чем ПК посчитает следующию точку??
                mCController.CommandHandle.WaitOne();//следующая команда будет отправлена тогда, когда завершится предыдущая операция
                SendTask();

                len = len + intrpStep;
            } while (true);
        }