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