生活随笔
收集整理的這篇文章主要介紹了
广工数控课设:平面凸轮的数控加工程序的编制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
廣工數控課設:平面凸輪的數控加工程序的編制
- 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
); 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
;}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);
painter2
.setRenderHint(QPainter
::Antialiasing
); painter2
.translate(568, 243); 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");}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");}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");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");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");}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()
{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
); 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就可以直接運行),當然為了避免白嫖,我會收點小費用的(哈哈,碼字費)。鏈接如下:數控課設
總結
以上是生活随笔為你收集整理的广工数控课设:平面凸轮的数控加工程序的编制的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。