日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

广工数控课设:平面凸轮的数控加工程序的编制

發布時間:2024/3/24 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 广工数控课设:平面凸轮的数控加工程序的编制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

廣工數控課設:平面凸輪的數控加工程序的編制

  • 1.前言
  • 2.軟件界面
  • 2.主程序設計與分析
    • 2.1參數輸入控件
    • 2.2生成凸輪輪廓
    • 2.2數控代碼的生成
    • 2.4一些附加功能
  • 3結束


受不了我的那個老師了,設計的軟件一眼都沒有看,報告也沒有看,都不知道怎么評分的,自己出的題一點都不清楚,感覺就一個牛馬


1.前言

網上數控課設多采用的是VB6.0編程的,感覺VB6.0已經好老的,軟件的設計界面也不好看,設計邏輯感覺也是非常的腦殘。所以分享一份基于QT的平面凸輪的數控課設(雖然QT是C++,但我基本上還是用了很多C編程)。完整的工程代碼見文末。

2.軟件界面


用戶可以選擇凸輪是什么類型的推桿,然后輸入凸輪參數,選擇保存參數,在選擇凸輪的運動規律,點擊生成輪廓就可以繪制出凸輪的曲線了,點擊生成數控代碼,就可以在代碼生成區中生成凸輪的數控代碼。

2.主程序設計與分析

2.1參數輸入控件

效果就是在主界面上輸入參數,然后點擊按鈕,將參數保存進來。
按鈕用的是pushButton控件,然后要怎么建立ui文件和cpp文件之間的聯系呢?這就要涉及到QT的信號與槽函數之間的關系了,具體實現方式如下:Qt七種信號與槽關聯方式小結
按鈕控件我用的是第四種方式。

參數輸入的控件用的textline,支持一行文本的輸入,傳入的參數為字符串型的變量,所以我用QString類來傳遞和轉換輸入進來的參數。具體效果如下:
當然咯,你在使用某個類的時候,一定要在前面加上它的頭文件#include <qstring.h>

//按下保存按鈕獲取各個參數 void MainWindow::on_pushButton_clicked() {/*****數據讀取*****///推程運動角QString str1 =ui->tsport_angle->text();sport_angle =str1.toInt();//遠休止角QString str2 =ui->far_angle->text();far_angle =str2.toInt();//回程運動角QString str3 =ui->hsort_angle->text();hsport_angle=str3.toInt();//近休止角QString str4=ui->near_angle->text();near_angle=str4.toInt();//基圓半徑QString str5=ui->yradius->text();yradius=str5.toInt();//偏距QString str6=ui->offset->text();offset =str6.toInt();//滾子半徑QString str7=ui->gradius->text();gradius=str7.toInt();//行程QString str8=ui->journey->text();journey =str8.toInt();qDebug() << "成功寫入參數";QMessageBox::information(this, tr("成功"), tr("成功保存凸輪參數!")); }

2.2生成凸輪輪廓

凸輪的運動規律選擇有5種,具體可以看機械原理課本,分別是等速運動、等加速等減速、五次多項式、余弦加速度和正弦加速度。這里我選擇的是5種都做出來。不同的運動規律的選擇,我用的是comboBox控件,可以讀取當前的判斷選擇的是那個運動的規律。
然后具體的實現過程也是利用轉到槽建立槽函數,comboBox里面的內容改變了就會進入一次槽函數,然后在槽函數讀取,這里我設定了兩個個全局變量tui和hui,用來標定用戶的凸輪推程和回程分別選擇的是什么運動規律。

//推程算法選擇(可以不用寫的)直接在計算那獲取索引值 void MainWindow::on_comboBox_currentIndexChanged(int index) {qDebug() << "%d";if( ui->comboBox->currentIndex() == 0){tui=0;}else if( ui->comboBox->currentIndex()==1){tui=1;}else if( ui->comboBox->currentIndex()==2){tui=2;}else if( ui->comboBox->currentIndex()==3){tui=3;}else if( ui->comboBox->currentIndex()==4){tui=4;} }//回程運動規律(可以不用寫的)直接在計算那獲取索引值 void MainWindow::on_comboBox_2_currentIndexChanged(int index) {qDebug("%d",tui);if(ui->comboBox_2->currentIndex()== 0){hui=0;}else if(ui->comboBox_2->currentIndex()==1){hui=1;}else if(ui->comboBox_2->currentIndex()==2){hui=2;}else if(ui->comboBox_2->currentIndex()==3){hui=3;}else if(ui->comboBox_2->currentIndex()==4){hui=4;} }

然后就要生成理論廓線和實際工作廓線。具體的方法用的方法是凸輪的解析法,按照選擇的運動規律,計算推桿的行程s和s對角度的微分(自己求導,然后用公式在程序里面表達出來)。具體的步驟可以參照機械原理課本的案例,照著它來一步一步的編程序,先寫一個運動規律,其余的運動規律也會很好寫了。

實現過程如下:

  • 使用pushButton控件,然后建立槽函數
  • //計算各個參數并生成輪廓曲線的槽函數 void MainWindow::on_pushButton_3_clicked() { }
  • 數據讀取
    為了防止用戶沒有點擊上面的保存參數按鈕,而是直接點擊生成輪廓按鈕,導致出現了錯誤,所以我在這在讀取一遍數據,代碼跟上面的一樣就行了。

  • 行程s的計算
    利用for循環不斷的計算對應角度的s,還有ds,這里我推程角,遠休止角,回程角和近休止角都是從0開始算到最大值的。
    放在槽函數的程序如下,利用switch語句來判斷選擇的是哪種運動規律:

  • float x[360],y[360],x1[360],y1[360];float s1[360],s2[360],s3[360],s4[360];float dx1[360],dx2[360],dx3[360],dx4[360];float dy1[360],dy2[360],dy3[360],dy4[360];float ds1[360],ds2[360],ds3[360],ds4[360]; //對心平底凸輪s0=sqrt(yradius*yradius-offset*offset); //計算s0//推程的算法計算switch (tui) {case 0:qDebug()<<"推程運動規律:等速運動";for (int k=0;k<sport_angle;k++) {s1[k]=((k*pi) /(sport_angle*pi))*journey;ds1[k]=journey/(sport_angle*pi);dx1[k]=(journey/(sport_angle*pi))*sin(k*pi)+(s0+s1[k])*cos(k*pi);dy1[k]=(journey/(sport_angle*pi))*cos(k*pi)-(s0+s1[k])*sin(k*pi);}break;case 1:qDebug()<<"推程運動規律:等加速等減速";for (int k=0;k<sport_angle;k++) {if(k < sport_angle/2){s1[k]=(pow((k*pi),2)/pow((sport_angle*pi),2))*2*journey;ds1[k]=4*journey*(k*pi)/pow(sport_angle*pi,2);dx1[k]=(4*journey*(k*pi)/pow(sport_angle*pi,2))*sin(k*pi)+(s0+s1[k])*cos(k*pi);dy1[k]=(4*journey*(k*pi)/pow(sport_angle*pi,2))*cos(k*pi)-(s0+s1[k])*sin(k*pi);}else {s1[k]=journey-(pow((sport_angle*pi-k*pi),2)/pow((sport_angle*pi),2))*2*journey;ds1[k]=4*journey*(sport_angle*pi-k*pi)/pow(sport_angle*pi,2);dx1[k]=(4*journey*(sport_angle*pi-k*pi)/pow(sport_angle*pi,2))*sin(k*pi)+(s0+s1[k])*cos(k*pi);dy1[k]=(4*journey*(sport_angle*pi-k*pi)/pow(sport_angle*pi,2))*cos(k*pi)-(s0+s1[k])*sin(k*pi);}}break;case 2: qDebug()<<"推程運動規律:五次多項式";for (int k=0;k<sport_angle;k++) {s1[k]=(10*journey*pow((k*pi),3))/(pow((sport_angle*pi),3))-15*journey*pow((k*pi),4)/pow((sport_angle*pi),4)+6*journey*pow((k*pi),5)/pow((sport_angle*pi),5);ds1[k]=30*journey*pow(k*pi,2)/pow((sport_angle*pi),3)-60*journey*pow(k*pi,3)/pow((sport_angle*pi),4)+30*journey*pow(k*pi,4)/pow((sport_angle*pi),5);dx1[k]=(30*journey*pow(k*pi,2)/pow((sport_angle*pi),3)-60*journey*pow(k*pi,3)/pow((sport_angle*pi),4)+30*journey*pow(k*pi,4)/pow((sport_angle*pi),5))*sin(k*pi)+(s0+s1[k])*cos(k*pi);dy1[k]=(30*journey*pow(k*pi,2)/pow((sport_angle*pi),3)-60*journey*pow(k*pi,3)/pow((sport_angle*pi),4)+30*journey*pow(k*pi,4)/pow((sport_angle*pi),5))*cos(k*pi)-(s0+s1[k])*sin(k*pi);}break;case 3:qDebug()<<"推程運動規律:余弦加速度";for (int k=0;k<sport_angle;k++) {s1[k]=(1-(cos(3.14*(k*pi)/(sport_angle*pi))))*journey/2;ds1[k]=3.14159*journey*(sin(3.14*(k*pi)/(sport_angle*pi)))/(2*sport_angle*pi);dx1[k]=(3.14159*journey*(sin(3.14*(k*pi)/(sport_angle*pi)))/(2*sport_angle*pi))*sin(k*pi)+(s0+s1[k])*cos(k*pi);dy1[k]=(3.14159*journey*(sin(3.14*(k*pi)/(sport_angle*pi)))/(2*sport_angle*pi))*cos(k*pi)-(s0+s1[k])*sin(k*pi);}break;case 4:qDebug()<<"推程運動規律:正弦加速度";for (int k=0;k<sport_angle;k++) {s1[k]=((k*pi)/(sport_angle*pi)-sin(2*3.14159*(k*pi)/(sport_angle*pi))/(2*3.14159))*journey;ds1[k]=journey*(1-cos(2*k*pi))/(sport_angle*pi);dx1[k]=(journey*(1-cos(2*k*pi))/(sport_angle*pi))*sin(k*pi)+(s0+s1[k])*cos(k*pi);dy1[k]=(journey*(1-cos(2*k*pi))/(sport_angle*pi))*cos(k*pi)-(s0+s1[k])*sin(k*pi);}break;default:break;}//遠休止算法計算for (int k=0;k<far_angle;k++) {s2[k]=journey;ds2[k]=0;dx2[k]=(yradius+s2[k])*cos(sport_angle*pi+k*pi);dy2[k]=-(yradius+s2[k])*sin(sport_angle*pi+k*pi);}//回程的算法計算switch (hui) {case 0:qDebug()<<"回程運動規律:等速運動";for (int k=0;k<hsport_angle;k++) {s3[k]=journey*(1-(k*pi)/(hsport_angle*pi));ds3[k]=-journey/(hsport_angle*pi);dx3[k]=(-journey/(hsport_angle*pi))*sin(sport_angle*pi+far_angle*pi+k*pi)+(s0+s3[k])*cos(sport_angle*pi+far_angle*pi+k*pi);dy3[k]=(-journey/(hsport_angle*pi))*cos(sport_angle*pi+far_angle*pi+k*pi)-(s0+s3[k])*sin(sport_angle*pi+far_angle*pi+k*pi);}break;case 1:qDebug()<<"回程運動規律:等加速等減速";for (int k=0;k<hsport_angle;k++) {if(k< hsport_angle/2){s3[k]=journey-(pow((k*pi),2)/pow((hsport_angle*pi),2))*2*journey;ds3[k]=-4*journey*(k*pi)/pow(hsport_angle*pi,2);dx3[k]=(-4*journey*(k*pi)/pow(hsport_angle*pi,2))*sin(sport_angle*pi+far_angle*pi+k*pi)+(s0+s3[k])*cos(sport_angle*pi+far_angle*pi+k*pi);dy3[k]=(-4*journey*(k*pi)/pow(hsport_angle*pi,2))*cos(sport_angle*pi+far_angle*pi+k*pi)-(s0+s3[k])*sin(sport_angle*pi+far_angle*pi+k*pi);}else {s3[k]=(pow((hsport_angle*pi-k*pi),2)/pow((hsport_angle*pi),2))*2*journey;ds3[k]=-4*journey*(hsport_angle*pi-k*pi)/pow(hsport_angle*pi,2);dx3[k]=(-4*journey*(hsport_angle*pi-k*pi)/pow(hsport_angle*pi,2))*sin(sport_angle*pi+far_angle*pi+k*pi)+(s0+s3[k])*cos(sport_angle*pi+far_angle*pi+k*pi);dy3[k]=(-4*journey*(hsport_angle*pi-k*pi)/pow(hsport_angle*pi,2))*cos(sport_angle*pi+far_angle*pi+k*pi)-(s0+s3[k])*sin(sport_angle*pi+far_angle*pi+k*pi);}}break;case 2:qDebug()<<"回程運動規律:五次多項式";for (int k=0;k<hsport_angle;k++) {s3[hsport_angle-1-k]=(10*journey*pow((k*pi),3))/(pow((hsport_angle*pi),3))-15*journey*pow((k*pi),4)/pow((hsport_angle*pi),4)+6*journey*pow((k*pi),5)/pow((hsport_angle*pi),5);}for (int k=0;k<hsport_angle;k++) {ds3[k]=30*journey*pow(k*pi,2)/pow((hsport_angle*pi),3)-60*journey*pow(k*pi,3)/pow((hsport_angle*pi),4)+30*journey*pow(k*pi,4)/pow((hsport_angle*pi),5);dx3[k]=(30*journey*pow(k*pi,2)/pow((hsport_angle*pi),3)-60*journey*pow(k*pi,3)/pow((hsport_angle*pi),4)+30*journey*pow(k*pi,4)/pow((hsport_angle*pi),5))*sin(sport_angle*pi+far_angle*pi+k*pi)+(yradius+s3[k])*cos(sport_angle*pi+far_angle*pi+k*pi);dy3[k]=(30*journey*pow(k*pi,2)/pow((hsport_angle*pi),3)-60*journey*pow(k*pi,3)/pow((hsport_angle*pi),4)+30*journey*pow(k*pi,4)/pow((hsport_angle*pi),5))*cos(sport_angle*pi+far_angle*pi+k*pi)-(yradius+s3[k])*sin(sport_angle*pi+far_angle*pi+k*pi);}break;case 3:qDebug()<<"回程運動規律:余弦加速度";for (int k=0;k<hsport_angle;k++) {s3[k]=(1+(cos(3.14159*(k*pi)/(hsport_angle*pi))))*journey/2;ds3[k]=-3.14159*journey*(sin(3.14*(k*pi)/(hsport_angle*pi)))/(2*hsport_angle*pi);dx3[k]=(-3.14159*journey*(sin(3.14*(k*pi)/(hsport_angle*pi)))/(2*hsport_angle*pi))*sin(sport_angle*pi+far_angle*pi+k*pi)+(s0+s3[k])*cos(sport_angle*pi+far_angle*pi+k*pi);dy3[k]=(-3.14159*journey*(sin(3.14*(k*pi)/(hsport_angle*pi)))/(2*hsport_angle*pi))*cos(sport_angle*pi+far_angle*pi+k*pi)-(s0+s3[k])*sin(sport_angle*pi+far_angle*pi+k*pi);}break;case 4:qDebug()<<"回程運動規律:正弦加速度";for (int k=0;k<hsport_angle;k++) {s3[k]=(1-(k*pi)/(hsport_angle*pi)+sin(2*3.14159*(k*pi)/(hsport_angle*pi))/(2*3.14159))*journey;ds3[k]=-journey*(1-cos(2*k*pi))/(hsport_angle*pi);dx3[k]=(-journey*(1-cos(2*k*pi))/(hsport_angle*pi))*sin(sport_angle*pi+far_angle*pi+k*pi)+(s0+s3[k])*cos(sport_angle*pi+far_angle*pi+k*pi);dy3[k]=(-journey*(1-cos(2*k*pi))/(hsport_angle*pi))*cos(sport_angle*pi+far_angle*pi+k*pi)-(s0+s3[k])*sin(sport_angle*pi+far_angle*pi+k*pi);}break;default:break;}//近休止算法計算for (int k=0;k<near_angle;k++) {s4[k]=0;ds4[k]=0;dx4[k]=(yradius+s4[k])*cos(sport_angle*pi+far_angle*pi+hsport_angle*pi+k*pi);dy4[k]=-(yradius+s4[k])*sin(sport_angle*pi+far_angle*pi+hsport_angle*pi+k*pi);}
  • 理論廓線和實際廓線的計算
    這個按照書本的解析法來寫,從0到360°,不過寫的時候要注意過渡點的計算,我的程序是不計算的最大角度,而是最大角度作為下一段的初始角度,這樣就能夠實現均勻的過度了。
  • //計算理論廓線for (int i=0;i<=360;i++) {if(i>=0 &&i<sport_angle){x[i]=(s0+s1[i])*sin(i*pi)+offset*cos(i*pi);y[i]=(s0+s1[i])*cos(i*pi)-offset*sin(i*pi);}else if ((i>=sport_angle) && i<(sport_angle+far_angle)) {x[i]=(yradius+s2[i-sport_angle])*sin(i*pi);y[i]=(yradius+s2[i-sport_angle])*cos(i*pi);}else if (i>=(sport_angle+far_angle) && i<(sport_angle+far_angle+hsport_angle)) {x[i]=(yradius+s3[i-sport_angle-far_angle])*sin(i*pi);y[i]=(yradius+s3[i-sport_angle-far_angle])*cos(i*pi);}else{x[i]=(yradius+s4[i-sport_angle-far_angle-hsport_angle])*sin(i*pi);y[i]=(yradius+s4[i-sport_angle-far_angle-hsport_angle])*cos(i*pi);}points[i]=QPointF(x[i]*3, -y[i]*3);}//計算工作廓線for (int i=0;i<=360;i++) {if(i>=0 && i<sport_angle){x[0]=0;x1[i]=x[i]-(-dy1[i]/sqrt(pow(dx1[i],2)+pow(dy1[i],2)))*gradius;y1[i]=y[i]-(dx1[i]/sqrt(pow(dx1[i],2)+pow(dy1[i],2)))*gradius;// qDebug("x%d:%f", i,x[0]);// qDebug("y%d:%f", i,y[0]);}else if (i>=sport_angle && i<(sport_angle+far_angle)) {x1[i]=x[i]-gradius*(-dy2[i-sport_angle]/sqrt(pow(dx2[i-sport_angle],2)+pow(dy2[i-sport_angle],2)));y1[i]=y[i]-gradius*(dx2[i-sport_angle]/sqrt(pow(dx2[i-sport_angle],2)+pow(dy2[i-sport_angle],2)));}else if (i>=(sport_angle+far_angle) && i<(sport_angle+far_angle+hsport_angle)) {x1[i]=x[i]-gradius*(-dy3[i-sport_angle-far_angle]/sqrt(pow(dx3[i-sport_angle-far_angle],2)+pow(dy3[i-sport_angle-far_angle],2)));y1[i]=y[i]-gradius*(dx3[i-sport_angle-far_angle]/sqrt(pow(dx3[i-sport_angle-far_angle],2)+pow(dy3[i-sport_angle-far_angle],2)));}else{int k=i-sport_angle-far_angle-hsport_angle;x1[i]=x[i]-gradius*(-dy4[k]/sqrt(pow(dx4[k],2)+pow(dy4[k],2)));y1[i]=y[i]-gradius*(dx4[k]/sqrt(pow(dx4[k],2)+pow(dy4[k],2)));}kx1[i]=x1[i];ky1[i]=y1[i];points2[i]=QPointF(x1[i]*3, -y1[i]*3);}
  • 凸輪曲線的繪制
    曲線的繪制利用的是QT中的 QPainter類,具體的使用可以參考這個:QPainter詳解
    我設置的是兩個畫家,后來發現可以不用的,一個就行了,Qpen設置畫筆,因為理論廓線是用虛線畫的。整個圖像的白色畫布直接畫了個矩形,然后根據事假的更新來控制繪畫。
  • // 畫圖設置 void MainWindow::paintEvent(QPaintEvent *event) {QPainter painter(this);QPainter painter2(this);QPixmap pixmap;QPen pen;painter.setRenderHint(QPainter::Antialiasing); // 啟用抗鋸齒效果painter.translate(568, 243); // 把坐標原點移動到 widget 的中心 // qDebug("%d",width()/2+30); // qDebug("%d",height()/2-70);painter2.setRenderHint(QPainter::Antialiasing); // 啟用抗鋸齒效果painter2.translate(568, 243); // 把坐標原點移動到 widget 的中心//繪制畫布,為避免刷新只啟用一次painter.fillRect(QRect(-172, -172,390,400), QBrush(Qt::white));painter.drawRect(QRect(-172, -172,390,400));pixmap.load("D:/qt project/shukong/shukongsheji/1.bmp");painter.drawPixmap(120, 250,100, 100, pixmap);if(huabu==0){huitu=1;}if(huabu==1){huitu=0;}if(huitu==1){painter.save();pen.setStyle(Qt::DashLine);painter.setPen(pen);painter.drawPolygon(points, 360);painter.restore();painter.drawPolygon(points2, 360);huitu=0;}else {} }

    2.2數控代碼的生成

    利用的是按鈕控件和textEdit控件,點擊按鈕然后在textEdit上輸出數控代碼,具體的代碼如下:
    這里的代碼會有的長,一開始想字符串的拼接,但是嫌麻煩懶得搞了。然后后面知道了可以利用Qstring類來進行字符串的拼接和處理。有想法的可以試一下。

    //數控代碼生成按鈕函數 void MainWindow::on_pushButton_4_clicked() { ui->textEdit->clear(); //清空原有數據qDebug("%d",daobu);QInputDialog *inputDialog = new QInputDialog(this);bool getInfo;QString down = inputDialog->getText(this,"輸入","請輸入加工凸輪厚度",QLineEdit::Normal,"",&getInfo,Qt::WindowFlags(0),Qt::ImhNone);if(getInfo){houdu=down.toInt();}qDebug("%d",houdu);//機床啟動代碼ui->textEdit->insertPlainText("%0010\n");ui->textEdit->insertPlainText("G90 MO3 S"); //絕對坐標編程ui->textEdit->insertPlainText(QString::number(Spindle_speed));ui->textEdit->insertPlainText("\n");ui->textEdit->insertPlainText("G54 ");if(daobu==1){ui->textEdit->insertPlainText("G01 G41 X0 Y0 D01 Z10 F");ui->textEdit->insertPlainText(QString::number(Feed_rate));ui->textEdit->insertPlainText("\n");//走刀坐標輸出//工件移動置加工起點,下刀ui->textEdit->insertPlainText("G01 X");ui->textEdit->insertPlainText(QString::number(kx1[0]));ui->textEdit->insertPlainText(" Y");ui->textEdit->insertPlainText(QString::number(ky1[0]));ui->textEdit->insertPlainText("\n");ui->textEdit->insertPlainText("Z-");ui->textEdit->insertPlainText(QString::number(houdu));ui->textEdit->insertPlainText("\n");//推程段的非圓曲線逼近for (int i=1;i<sport_angle;i++) {ui->textEdit->insertPlainText("G01 X");ui->textEdit->insertPlainText(QString::number(kx1[i]));ui->textEdit->insertPlainText(" Y");ui->textEdit->insertPlainText(QString::number(ky1[i]));ui->textEdit->insertPlainText("\n");}//遠休止段的圓形加工,采用R指令ui->textEdit->insertPlainText("G02 X");ui->textEdit->insertPlainText(QString::number(kx1[180]));ui->textEdit->insertPlainText(" Y");ui->textEdit->insertPlainText(QString::number(ky1[180]));ui->textEdit->insertPlainText(" R");ui->textEdit->insertPlainText(QString::number(yradius+journey));ui->textEdit->insertPlainText("\n");//回程段的非圓曲線逼近for (int i=(sport_angle+far_angle);i<(sport_angle+far_angle+hsport_angle);i++) {ui->textEdit->insertPlainText("G01 X");ui->textEdit->insertPlainText(QString::number(kx1[i]));ui->textEdit->insertPlainText(" Y");ui->textEdit->insertPlainText(QString::number(ky1[i]));ui->textEdit->insertPlainText("\n");}//近休止段的圓形加工,采用R指令ui->textEdit->insertPlainText("G02 X");ui->textEdit->insertPlainText(QString::number(kx1[0]));ui->textEdit->insertPlainText(" Y");ui->textEdit->insertPlainText(QString::number(ky1[0]));ui->textEdit->insertPlainText(" R");ui->textEdit->insertPlainText(QString::number(yradius));ui->textEdit->insertPlainText("\n");} //右刀補else if(daobu==2){qDebug("右");ui->textEdit->insertPlainText("G01 G42 X0 Y0 D01 Z10 F");ui->textEdit->insertPlainText(QString::number(Feed_rate));ui->textEdit->insertPlainText("\n");//走刀坐標輸出//工件移動置加工起點,下刀,默認加工深度為10ui->textEdit->insertPlainText("G01 X");ui->textEdit->insertPlainText(QString::number(kx1[0]));ui->textEdit->insertPlainText(" Y");ui->textEdit->insertPlainText(QString::number(ky1[0]));ui->textEdit->insertPlainText("\n");ui->textEdit->insertPlainText("Z-");ui->textEdit->insertPlainText(QString::number(houdu));ui->textEdit->insertPlainText("\n");//近休止段的圓形加工,采用R指令ui->textEdit->insertPlainText("G03 X");ui->textEdit->insertPlainText(QString::number(kx1[sport_angle+far_angle+hsport_angle]));ui->textEdit->insertPlainText(" Y");ui->textEdit->insertPlainText(QString::number(ky1[sport_angle+far_angle+hsport_angle]));ui->textEdit->insertPlainText(" R");ui->textEdit->insertPlainText(QString::number(yradius));ui->textEdit->insertPlainText("\n");//回程段的非圓曲線逼近for (int i=(sport_angle+far_angle+hsport_angle);i>(sport_angle+far_angle);i--) {ui->textEdit->insertPlainText("G01 X");ui->textEdit->insertPlainText(QString::number(kx1[i]));ui->textEdit->insertPlainText(" Y");ui->textEdit->insertPlainText(QString::number(ky1[i]));ui->textEdit->insertPlainText("\n");}//遠休止段的圓形加工,采用R指令ui->textEdit->insertPlainText("G03 X");ui->textEdit->insertPlainText(QString::number(kx1[sport_angle]));ui->textEdit->insertPlainText(" Y");ui->textEdit->insertPlainText(QString::number(ky1[sport_angle]));ui->textEdit->insertPlainText(" R");ui->textEdit->insertPlainText(QString::number(yradius+journey));ui->textEdit->insertPlainText("\n");//推程段的非圓曲線逼近for (int i=sport_angle;i>0;i--) {ui->textEdit->insertPlainText("G01 X");ui->textEdit->insertPlainText(QString::number(kx1[i]));ui->textEdit->insertPlainText(" Y");ui->textEdit->insertPlainText(QString::number(ky1[i]));ui->textEdit->insertPlainText("\n");}}//解除刀補ui->textEdit->insertPlainText("G40 X0 Y0 Z10");ui->textEdit->insertPlainText("\n");//機床停止運行代碼ui->textEdit->insertPlainText("M05 M30"); }

    2.4一些附加功能

  • 參數錯誤提示功能
  • //參數輸入錯誤提示窗口 void MainWindow::onMessageBox() {//含有為0的提示輸入完整參數,都不為0則判斷角度是否正確if (sport_angle==0 ||far_angle==0 || hsport_angle==0 || near_angle==0 ||yradius==0 ){QMessageBox::critical(this, "錯誤的參數", "請輸入完整的參數",QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);}else{if(sport_angle+far_angle+hsport_angle+near_angle!=360){QMessageBox::critical(this, "錯誤的參數", "角度輸入錯誤",QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);}} }
  • 清空功能
  • //清空數據 void MainWindow::on_pushButton_2_clicked() {ui->textEdit->clear(); //清空數據huabu=1;update();//更新畫圖,重新畫個白布進行填充 }
  • 代碼導出功能
  • 用到的是QFileDialog這個類

    //導出數控代碼 void MainWindow::NCexport() {QFileDialog dlg(this);//獲取內容的保存路徑QString fileName = dlg.getSaveFileName(this, tr("Save As"), "./", tr("Text File(*.txt)"));if( fileName == "" ){return;}//內容保存到路徑文件QFile file(fileName);//以文本方式打開if( file.open(QIODevice::WriteOnly | QIODevice::Text) ){QTextStream out(&file); //IO設備對象的地址對其進行初始化out << ui->textEdit->toPlainText() << endl; //輸出QMessageBox::information(this, tr("結束"), tr("成功保存到文件!"));file.close();}else{QMessageBox::warning(this, tr("錯誤"), tr("保存文件失敗!"));} }

    4.代碼一鍵復制功能
    用到的是 QClipboard這個類

    //一鍵復制到剪切板 void MainWindow::on_pushButton_5_clicked() {QClipboard *clipboard = QApplication::clipboard();clipboard->setText( ui->textEdit->toPlainText());QMessageBox::information(this, tr("復制成功"), tr("代碼成功復制到剪切板")); }

    3結束

    感覺QT還是非常的好入門的,只要是想認真搞這個課設的,稍微花一點時間還是會很輕松的拿下的,需要用到什么功能可以參考我的博客。附上自己的整個工程的代碼還有報告,里面還有個可以直接運行的程序(不用QT就可以直接運行),當然為了避免白嫖,我會收點小費用的(哈哈,碼字費)。鏈接如下:數控課設

    總結

    以上是生活随笔為你收集整理的广工数控课设:平面凸轮的数控加工程序的编制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。