예제 #1
0
        private void buttonStartTask_Click(object sender, EventArgs e)
        {
            ControllerPlanetCNC.CorrectionSpeed.UseCorrection = checkBoxManualSpeed.Checked;
            ControllerPlanetCNC.CorrectionSpeed.speed         = (int)numericUpDownChangeSpeed.Value;

            ControllerPlanetCNC.TASK_CLEAR();

            ControllerPlanetCNC.TASK_SendStartData();

            // Определимся с границами
            _nowPos = listGkodeCommand.SelectedIndex;

            if (listGkodeCommand.SelectedItems.Count == 1)
            {
                _endPos = listGkodeCommand.Items.Count;
            }
            else
            {
                _endPos = listGkodeCommand.SelectedIndex + listGkodeCommand.SelectedItems.Count;
            }

            if (_nowPos >= _endPos)
            {
                return;
            }

            bool needContinue = true;

            while (needContinue)
            {
                //DataRow dataRowNow = DataLoader.DataRows[_nowPos];

                ControllerPlanetCNC.ANALIZE_Command(listGkodeCommand.Items[_nowPos].ToString(), _nowPos);

                _nowPos++;

                //TODO: так-же добавить прерывание, в случае смены инструмента/паузы

                needContinue = (_nowPos < _endPos);
            }

            // данные переданы для выполнения, запустим....

            ControllerPlanetCNC.TASK_SendStopData();

            ControllerPlanetCNC.TASK_START();
        }
예제 #2
0
        private void buttonStartTask_Click(object sender, EventArgs e)
        {
            ControllerPlanetCNC.TASK_CLEAR();

            ControllerPlanetCNC.TASK_SendStartData();

            // Определимся с границами
            _nowPos = listGkodeCommand.SelectedIndex;

            if (listGkodeCommand.SelectedItems.Count == 1)
            {
                _endPos = listGkodeCommand.Items.Count;
            }
            else
            {
                _endPos = listGkodeCommand.SelectedIndex + listGkodeCommand.SelectedItems.Count;
            }

            if (_nowPos >= _endPos)
            {
                return;
            }



            // При запуске передаем данные до точки, где нужно сменить инструмент, или сделать паузу


            bool needContinue = true;



            // для поиска различий при отправке данных
            DataRow dataRowOld = new DataRow(0, "");

            while (needContinue)
            {
                // сравним наличие изменений в данных, и проанализируем какие команды послать в контроллер
                DataRow dataRowNow = DataLoader.DataRows[_nowPos];
                if (_nowPos != 0)
                {
                    dataRowOld = DataLoader.DataRows[_nowPos - 1];
                }

                // В случае наличия изменений, отправим новые данные
                //if (dataRowNow.Machine.SpindelON != dataRowOld.Machine.SpindelON || dataRowNow.Machine.SpeedSpindel != dataRowOld.Machine.SpeedSpindel)
                //{
                ControllerPlanetCNC.AddBinaryDataToTask(BinaryData.pack_B5(dataRowNow.Machine.SpindelON, 2, BinaryData.TypeSignal.Hz, dataRowNow.Machine.SpeedSpindel));
                //TODO: это нужно переделать!!!!! зафиксируем
                PlanetCNC_Controller.LastStatus = dataRowNow;
                //  }


                if (dataRowNow.POS.X != dataRowOld.POS.X || dataRowNow.POS.Y != dataRowOld.POS.Y || dataRowNow.POS.Z != dataRowOld.POS.Z || dataRowNow.POS.Z != dataRowOld.POS.Z)
                {
                    //if (Controller.INFO.NuberCompleatedInstruction == 0)
                    //{
                    //    //если нет номера инструкции, то отправляем пока буфер не сильно занят
                    //    if (GlobalSetting.AppSetting.Controller == ControllerModel.PlanetCNC_MK1 && Controller.INFO.FreebuffSize < 4) return;
                    //    if (GlobalSetting.AppSetting.Controller == ControllerModel.PlanetCNC_MK2 && Controller.INFO.FreebuffSize < 230) return;
                    //}
                    //else
                    //{
                    //    //знаем номер инструкции, и будем отправлять пока не более 10 инструкций
                    //    if (_nowPos > (Controller.INFO.NuberCompleatedInstruction + GlobalSetting.ControllerSetting.MinBuffSize)) return;
                    //}

                    int speedToSend = dataRowNow.Machine.SpeedMaсhine;

                    if (checkBoxManualSpeed.Checked)
                    {
                        if (dataRowNow.Machine.NumGkode == 0)
                        {
                            speedToSend = (int)numericUpDown1.Value;
                        }

                        if (dataRowNow.Machine.NumGkode == 1)
                        {
                            speedToSend = (int)numericUpDown2.Value;
                        }
                    }

                    //координаты следующей точки
                    float pointX = (float)dataRowNow.POS.X;
                    float pointY = (float)dataRowNow.POS.Y;
                    float pointZ = (float)dataRowNow.POS.Z;

                    //добавление смещения G-кода
                    if (ControllerPlanetCNC.CorrectionPos.UseCorrection)
                    {
                        //// применение пропорций
                        //pointX *= Setting.koeffSizeX;
                        //pointY *= Setting.koeffSizeY;

                        //применение смещения
                        pointX += (float)ControllerPlanetCNC.CorrectionPos.DeltaX;
                        pointY += (float)ControllerPlanetCNC.CorrectionPos.DeltaY;

                        //применение матрицы поверхности детали
                        if (ControllerPlanetCNC.CorrectionPos.UseMatrix)
                        {
                            pointZ += ScanSurface.GetPosZ(pointX, pointY);
                        }

                        pointZ += (float)ControllerPlanetCNC.CorrectionPos.DeltaZ;
                    }

                    //отладка
                    ControllerPlanetCNC.AddBinaryDataToTask(BinaryData.pack_B5(dataRowNow.Machine.SpindelON, 2, BinaryData.TypeSignal.Hz, dataRowNow.Machine.SpeedSpindel));


                    ControllerPlanetCNC.AddBinaryDataToTask(BinaryData.pack_CA(ControllerPlanetCNC.Info.CalcPosPulse("X", (decimal)pointX),
                                                                               ControllerPlanetCNC.Info.CalcPosPulse("Y", (decimal)pointY),
                                                                               ControllerPlanetCNC.Info.CalcPosPulse("Z", (decimal)pointZ),
                                                                               ControllerPlanetCNC.Info.CalcPosPulse("A", dataRowNow.POS.A),
                                                                               speedToSend,
                                                                               dataRowNow.numberRow, dataRowNow.Machine.TimeOutPause));

                    //TODO: это нужно переделать!!!!! зафиксируем
                    PlanetCNC_Controller.LastStatus = dataRowNow;
                }

                _nowPos++;

                //TODO: так-же добавить прерывание, в случае смены инструмента/паузы

                // вариант 1 - выполняется до последней строчки
                needContinue = (_nowPos < _endPos);

                // вариант 2 - выполняется до смены инструмента, и активируется остановка
                if (dataRowNow.Tools.NeedChange)
                {
                    needContinue = false;
                    MessageBox.Show("Возникла необходимость смены инструмента № " + dataRowNow.Tools.NumberTools +
                                    ", с диамтром: " + dataRowNow.Tools.DiametrTools);
                }
            }


            // данные переданы для выполнения, запустим....

            ControllerPlanetCNC.TASK_SendStopData();

            ControllerPlanetCNC.TASK_START();



            //////TODO: НУЖНО ОСТАНОВИТЬ ПЕРЕДАЧУ ДАННЫХ, если будет смена инструмента, с последующей паузой
            //////if (dataRowNow.Tools.NeedChange)
            //////{
            //////    //timerTask.Enabled = false;
            //////    //_statusTask = ETaskStatus.Pause;
            //////    //Controller.TestAllowActions = false; //разблокируем
            //////    //MessageBox.Show(@"Для дальнейшей работы, установите инструмент № " + dataRowNow.Tools.NumberTools + ", диаметром " + dataRowNow.Tools.DiametrTools + ", после установки нового инструмента, нужно продолжить выполнение (сейчас включена пауза)");
            //////    //_nowPos++;
            //////    //timerTask.Enabled = true;

            //////    return;
            //////}

            //////TODO: пока не работает
            //////if (dataRowNow.Extra.NeedPause)
            //////{
            //////    //MessageBox.Show(@"Выполняется пауза длительностью " + dataRowNow.Extra.timeoutMsec + @" мс.", "",
            //////    //    MessageBoxButtons.OK);
            //////    //System.Threading.Thread.Sleep(dataRowNow.Extra.timeoutMsec);
            //////}

            //////Сравнить, и установить в случае необходимости
            //////1) Шпиндель и скорость работы
            //////2) Выполнить движение с необходимой скоростью

            //////if (dataRowNow.Machine != dataRowOld.Machine)
        }