Beispiel #1
0
        private void buttonInitMatrix_Click(object sender, EventArgs e)
        {
            // создадим матрицу
            ScanSurface.Init(new SurfacePoint((float)numStartPosX.Value, (float)numStartPosY.Value, (float)numZforStart.Value), (int)numCountPointX.Value, (int)numCountPointY.Value, (float)numStepX.Value, (float)numStepY.Value);

            labelNotInit.Visible = false;

            //и отобразим её
            RefrechDataGrid();
        }
        /// <summary>
        /// Предыдущее значение
        /// </summary>
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (_statusTask == ETaskStatus.Start)
            {
                Controller.SendBinaryData(BinaryData.pack_9E(0x05));
                Controller.SendBinaryData(BinaryData.pack_BF(GlobalSetting.ControllerSetting.AxleX.MaxSpeed, GlobalSetting.ControllerSetting.AxleY.MaxSpeed, GlobalSetting.ControllerSetting.AxleZ.MaxSpeed, GlobalSetting.ControllerSetting.AxleA.MaxSpeed));
                Controller.SendBinaryData(BinaryData.pack_C0());
                _statusTask = ETaskStatus.Work;
            }

            if (_statusTask == ETaskStatus.Stop)
            {
                Controller.SendBinaryData(BinaryData.pack_FF());
                Controller.SendBinaryData(BinaryData.pack_9D());
                Controller.SendBinaryData(BinaryData.pack_9E(0x02));
                Controller.SendBinaryData(BinaryData.pack_FF());
                Controller.SendBinaryData(BinaryData.pack_FF());
                Controller.SendBinaryData(BinaryData.pack_FF());
                Controller.SendBinaryData(BinaryData.pack_FF());
                Controller.SendBinaryData(BinaryData.pack_FF());
                _statusTask       = ETaskStatus.Off;
                Controller.Locked = false; //разблокируем
            }

            if (_statusTask == ETaskStatus.Work)
            {
                if (_nowPos >= _endPos)
                {
                    _statusTask = ETaskStatus.Stop;
                    return;
                }

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


                //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)
                if (dataRowNow.Machine.SpindelON != dataRowOld.Machine.SpindelON || dataRowNow.Machine.SpeedSpindel != dataRowOld.Machine.SpeedSpindel)
                {
                    Controller.SendBinaryData(BinaryData.pack_B5(dataRowNow.Machine.SpindelON, 2, BinaryData.TypeSignal.Hz, dataRowNow.Machine.SpeedSpindel));

                    //зафиксируем
                    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 (Controller.CorrectionPos.useCorrection)
                    {
                        //// применение пропорций
                        //pointX *= Setting.koeffSizeX;
                        //pointY *= Setting.koeffSizeY;

                        //применение смещения
                        pointX += (float)Controller.CorrectionPos.deltaX;
                        pointY += (float)Controller.CorrectionPos.deltaY;

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

                        pointZ += (float)Controller.CorrectionPos.deltaZ;
                    }

                    Controller.SendBinaryData(BinaryData.pack_CA(Controller.INFO.CalcPosPulse("X", (decimal)pointX),
                                                                 Controller.INFO.CalcPosPulse("Y", (decimal)pointY),
                                                                 Controller.INFO.CalcPosPulse("Z", (decimal)pointZ),
                                                                 Controller.INFO.CalcPosPulse("A", dataRowNow.POS.A),
                                                                 speedToSend,
                                                                 dataRowNow.numberRow));

                    //зафиксируем
                    PlanetCNC_Controller.LastStatus = dataRowNow;
                }

                if (_nowPos < _endPos)
                {
                    _nowPos++;
                }
            }
        }
Beispiel #3
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)
        }