700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 广工数控课设:平面凸轮的数控加工程序的编制

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

时间:2024-02-15 04:27:50

相关推荐

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

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

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就可以直接运行),当然为了避免白嫖,我会收点小费用的(哈哈,码字费)。链接如下:数控课设

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。