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 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) }