Ejemplo n.º 1
0
        //public static int numKadr = 0; //номер кадра


        ////применяем абсолютные координаты G90 = ИСТИНА
        ////применяем относительные координаты G91 = ложь
        //public static bool AbsolutlyPos = true;


        //// Для выполнения G-кода, нужно знать последнее посланное значение в контроллер
        //public static int lastPosXpulse = 0;
        //public static int lastPosYpulse = 0;
        //public static int lastPosZpulse = 0;
        //public static int lastPosApulse = 0;

        ////public static decimal lastPosIpulse = 0;
        ////public static decimal lastPosJpulse = 0;
        ////public static decimal lastPosKpulse = 0;

        /// <summary>
        /// Включение шпинделя
        /// </summary>
        public static void Spindel_ON()
        {
            ControllerPlanetCNC.DirectPostToController(BinaryData.pack_B5(true, 2, BinaryData.TypeSignal.Hz, PlanetCNC_Controller.ValueHz));

            //зафиксируем
            PlanetCNC_Controller.LastStatus.Machine.SpindelON = true;
        }
Ejemplo n.º 2
0
 private void buttonTest_Click(object sender, EventArgs e)
 {
     if (_ScanningNow)
     {
         return;                                                                                            //небудем вклиниваться если что....
     }
     ControllerPlanetCNC.AddBinaryDataToTask(BinaryData.pack_C0(0x01));                                     //вкл
     ControllerPlanetCNC.AddBinaryDataToTask(BinaryData.pack_D2((int)numSpeedScan.Value, numReturn.Value)); // + настройка отхода, и скорости
     ControllerPlanetCNC.AddBinaryDataToTask(BinaryData.pack_C0(0x00));                                     //выкл
 }
Ejemplo n.º 3
0
        private void AppyChange()
        {
            settingIsChanged = false;
            GlobalSetting.SaveToFile();
            RefreshElements();

            if (ControllerPlanetCNC.IsConnectedToController)
            {
                ControllerPlanetCNC.Reconnect();
            }
        }
Ejemplo n.º 4
0
        private void Execute()
        {
            if (!ControllerPlanetCNC.IsAvailability)
            {
                return;
            }

            if (tbSendGKode.Text.Trim() == "")
            {
                return;
            }

            ControllerPlanetCNC.ExecuteCommand(tbSendGKode.Text);

            tbSendGKode.Text = "";
        }
Ejemplo n.º 5
0
        private void button3_Click(object sender, EventArgs e)
        {
            if (!ControllerPlanetCNC.IsAvailability)
            {
                return;
            }

            string sGcode = @"G0 F" + (int)numericUpDown3.Value + " X" + numericUpDown6.Value + " Y" + numericUpDown5.Value + " Z" + numericUpDown4.Value;

            if (!ControllerPlanetCNC.IsAvailability)
            {
                return;
            }

            ControllerPlanetCNC.ExecuteCommand(sGcode);
        }
Ejemplo n.º 6
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();
        }
        private void SendCommand(string _X = "", string _Y = "", string _Z = "", string _A = "")
        {
            if (_X == "" && _Y == "" && _Z == "" && _A == "")
            {
                ControllerPlanetCNC.ExecuteCommand("M201"); //остановка ручного движения
                return;
            }

            string sendValue = "M200 F" + numericUpDown1.Value.ToString("0000");

            if (_X != "") sendValue += " X" + _X;
            if (_Y != "") sendValue += " Y" + _Y;
            if (_Z != "") sendValue += " Z" + _Z;
            if (_A != "") sendValue += " A" + _A;

            ControllerPlanetCNC.ExecuteCommand(sendValue);
        }
Ejemplo n.º 8
0
 private void button5_MouseDown(object sender, MouseEventArgs e)
 {
     button5.BackColor = Color.DarkGreen;
     ControllerPlanetCNC.StartManualMove("0", "0", "-", 100);
 }
Ejemplo n.º 9
0
 private void btStopTask_Click(object sender, EventArgs e)
 {
     ControllerPlanetCNC.TASK_STOP();
 }
Ejemplo n.º 10
0
 private void buttonPauseTask_Click(object sender, EventArgs e)
 {
     ControllerPlanetCNC.TASK_PAUSE();
 }
Ejemplo n.º 11
0
 private void buttonAtoZero_Click(object sender, EventArgs e)
 {
     ControllerPlanetCNC.ResetToZeroAxes("A");
 }
Ejemplo n.º 12
0
 private void buttonSTOP_Click(object sender, EventArgs e)
 {
     ControllerPlanetCNC.EnergyStop(); //Аварийная остановка
 }
Ejemplo n.º 13
0
        // поток выполняющий сканирование
        private void DoWork(object data)
        {
            _ThreadDoWorks = true;
            _ScanningNow   = true;

            //текущие координаты сканирования
            int _indexScanX = 0;
            int _indexScanY = 0;

            while (_ScanningNow && _ThreadDoWorks)  //цикл работает пока не прийдет команда внеплановой остановки, или не бутет выполнено всё сканирование
            {
                // 1) получаем координаты
                SurfacePoint mp = ScanSurface.Matrix[_indexScanX, _indexScanY];

                //Дальше не двигаемся, т.к. контроллер занят какой-то другой задачей
                if (ControllerPlanetCNC.IsAvailability)
                {
                    continue;
                }

                // подходим к точке сканирования
                //Controller.TestAllowActions = true;
                //Controller.ExecuteCommand(@"G0 F" + numSpeedMove.Value +
                //    " X" + mp.PosX.ToString("###0,###") +
                //    " Y" + mp.PosY.ToString("###0,###") +
                //    " Z" + numZforStart.Value.ToString("###0,###"));
                //Controller.TestAllowActions = false;

                // ждем завершения движения
                //WaitStop();

                Thread.Sleep(500); //задержка небольшая, что-бы станок успел разогнаться
                while (ControllerPlanetCNC.Info.ShpindelMoveSpeed != 0)
                {
                    Thread.Sleep(100);
                }

                //запускаем сканирование, с остановкой при касании
                ControllerPlanetCNC.AddBinaryDataToTask(BinaryData.pack_C0(0x01));                       //вкл
                ControllerPlanetCNC.AddBinaryDataToTask(BinaryData.pack_D2((int)numSpeedScan.Value, 0)); // + настройка отхода, и скорости
                ControllerPlanetCNC.AddBinaryDataToTask(BinaryData.pack_C0(0x00));                       //выкл

                //WaitStop(); //ждем остановки

                Thread.Sleep(1000); //задержка небольшая, что-бы станок успел разогнаться
                while (ControllerPlanetCNC.Info.ShpindelMoveSpeed != 0)
                {
                    Thread.Sleep(100);
                }

                //фиксируем точку
                mp.PosZ = (float)ControllerPlanetCNC.Info.AxesZ_PositionMM;

                // установим флаг что можно обновлять таблицу на форме
                _refreshDataFromMatrix = true;

                // 2) поднимаемся обратно
                ControllerPlanetCNC.AddBinaryDataToTask(BinaryData.pack_C0(0x01));                                     //вкл
                ControllerPlanetCNC.AddBinaryDataToTask(BinaryData.pack_D2((int)numSpeedScan.Value, numReturn.Value)); // + настройка отхода, и скорости
                ControllerPlanetCNC.AddBinaryDataToTask(BinaryData.pack_C0(0x00));                                     //выкл

                WaitStop();                                                                                            //ждем остановки

                // 2) перемещаемся к новой точке
                if (_indexScanX == ScanSurface.CountPointX - 1)
                {
                    // 3) проверяем что не дошли до конца массива
                    if (_indexScanY == ScanSurface.CountPointY - 1)
                    {
                        _ThreadDoWorks = false;
                    }
                    else
                    {
                        _indexScanX = 0;
                        _indexScanY++;
                    }
                }
                else
                {
                    _indexScanX++;
                }
            }
            // Поток завершен
            _ThreadDoWorks = false;
            _ScanningNow   = false;
        }
Ejemplo n.º 14
0
 private void button5_MouseUp(object sender, MouseEventArgs e)
 {
     button5.BackColor = Color.FromName("Control");
     ControllerPlanetCNC.StopManualMove();
 }
Ejemplo n.º 15
0
 private void button9_MouseDown(object sender, MouseEventArgs e)
 {
     button9.BackColor = Color.DarkGreen;
     ControllerPlanetCNC.StartManualMove("-", "-", "0", (int)numericUpDown1.Value);
 }
Ejemplo n.º 16
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)
        }
 private void button13_Click(object sender, EventArgs e)
 {
     ControllerPlanetCNC.EnergyStop();
 }