//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; }
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)); //выкл }
private void AppyChange() { settingIsChanged = false; GlobalSetting.SaveToFile(); RefreshElements(); if (ControllerPlanetCNC.IsConnectedToController) { ControllerPlanetCNC.Reconnect(); } }
private void Execute() { if (!ControllerPlanetCNC.IsAvailability) { return; } if (tbSendGKode.Text.Trim() == "") { return; } ControllerPlanetCNC.ExecuteCommand(tbSendGKode.Text); tbSendGKode.Text = ""; }
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); }
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); }
private void button5_MouseDown(object sender, MouseEventArgs e) { button5.BackColor = Color.DarkGreen; ControllerPlanetCNC.StartManualMove("0", "0", "-", 100); }
private void btStopTask_Click(object sender, EventArgs e) { ControllerPlanetCNC.TASK_STOP(); }
private void buttonPauseTask_Click(object sender, EventArgs e) { ControllerPlanetCNC.TASK_PAUSE(); }
private void buttonAtoZero_Click(object sender, EventArgs e) { ControllerPlanetCNC.ResetToZeroAxes("A"); }
private void buttonSTOP_Click(object sender, EventArgs e) { ControllerPlanetCNC.EnergyStop(); //Аварийная остановка }
// поток выполняющий сканирование 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; }
private void button5_MouseUp(object sender, MouseEventArgs e) { button5.BackColor = Color.FromName("Control"); ControllerPlanetCNC.StopManualMove(); }
private void button9_MouseDown(object sender, MouseEventArgs e) { button9.BackColor = Color.DarkGreen; ControllerPlanetCNC.StartManualMove("-", "-", "0", (int)numericUpDown1.Value); }
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(); }