#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
timer = new QTimer(this);//定义一个定时器
timer->setInterval( 500);//设置定时周期为3S
connect(timer,SIGNAL(timeout()),this,SLOT(timer_ovf()));
installEventFilter(this);
show1=0;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_loadbtn_clicked()
{ show1=0;
QFileDialog *fileDialog = new QFileDialog();
static QString path = "./";
filename = fileDialog->getOpenFileName(this, "Select job", path, "CNC Files (*.nc *.cnc *.ngc *.gc *.iso *.tap *.txt)");
QFile file( filename );
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){
return;
}
QString date = file.readAll ();
strList = date.split ("\n");
qDebug()<<strList.size ();
timer->start();
}
void MainWindow::timer_ovf()
{
//ui->gcodelab->clear();
//ui->mcodelab->clear();
//ui->fcodelab->clear();
//ui->scodelab->clear();
//ui->tcodelab->clear();
ui->xcodelab->clear();
ui->ycodelab->clear();
ui->zcodelab->clear();
ui->icodelab->clear();
ui->jcodelab->clear();
ui->kcodelab->clear();
ui->rcodelab->clear();
readgcodefile(strList.at(show1)) ;
show1++;
if(show1>strList.size ()-1){ timer->stop();
show1=0;
}
}
void MainWindow::readgcodefile(QString s)
{int gindex,mindex,findex,sindex,tindex;
int xindex,yindex,zindex,rindex,iindex,jindex,kindex;
int count;//存储指令出现的次数
float X,Y,Z,R,I,J,K;//坐标值
float F;//进给速度
float S;//主轴速度
int T;//刀号
QString Gcode,allgcode,GS ;//G指令
QString FS ;//F指令
QString SS ;//S指令
QString TS ;//T指令
QString Mcode,allmcode,MS ;//M指令
//**************Gcode*******************
//**************************************
GS=s;
count=GS.count("G");//查看有几个G指令
if(count>-1){
//qDebug()<<QString("count:%1").arg(count); ;
for(int i=0;i<count;i++)
{
gindex=GS.indexOf("G");
//qDebug()<<QString("t:%1").arg(t);
Gcode=GS.mid(gindex+1,2);
allgcode.append(Gcode);
allgcode.append(" ");
if (Gcode=="00"){//快速定位
ui->worktypelab->setText( QStringLiteral("快速定位"));
}
if (Gcode=="01"){//直线插补
ui->worktypelab->setText(QStringLiteral("直线插补"));
}
if (Gcode=="02"){//顺圆插补
ui->worktypelab->setText(QStringLiteral("顺圆插补"));
}
if (Gcode=="03"){//逆圆插补
ui->worktypelab->setText(QStringLiteral("逆圆插补"));
}
if (Gcode=="04"){//暂停
ui->worktypelab->setText(QStringLiteral("暂停"));
}
if (Gcode=="17"){//XY平面选择
}
if (Gcode=="18"){//ZX平面选择
}
if (Gcode=="19"){//YZ平面选择
}
if (Gcode=="20"){//英寸单位
}
if (Gcode=="21"){//毫米单位
}
if (Gcode=="22"){//脉冲单位
}
if (Gcode=="40"){//刀具半径补偿取消
}
if (Gcode=="41"){//左刀补
}
if (Gcode=="42"){//右刀补
}
if (Gcode=="43"){//刀具长度正向补偿
}
if (Gcode=="44"){//刀具长度负向补偿
}
if (Gcode=="49"){//刀具长度补偿取消
}
if (Gcode=="54"){//工件坐标系1选择
}
if (Gcode=="55"){//工件坐标系2选择
}
if (Gcode=="56"){//工件坐标系3选择
}
if (Gcode=="57"){//工件坐标系4选择
}
if (Gcode=="58"){//工件坐标系5选择
}
if (Gcode=="59"){//工件坐标系6选择
}
if (Gcode=="90"){//绝对式编程
ui->codetypelab->setText(QStringLiteral("绝对值编程"));
}
if (Gcode=="91"){//增量式编程
ui->codetypelab->setText(QStringLiteral("增量值编程"));
}
if (Gcode=="92"){//工件坐标系设定
}
if (Gcode=="98"){//固定循环返回起始点
}
if (Gcode=="99"){//固定循环返回到R点
}
GS=GS.mid(gindex+1);
}
qDebug()<< QString("G:%1").arg(allgcode);
ui->gcodelab->setText(allgcode);//输出所有的G指令
allgcode=" ";}
//**************Mcode*******************
//**************************************
MS=s;
count=MS.count("M");//查看有几个m指令
//qDebug()<<QString("count:%1").arg(count);
if(count>-1){
for(int i=0;i<count;i++)
{
mindex=MS.indexOf("M") ;
//qDebug()<<QString("t:%1").arg(t);
Mcode=MS.mid(mindex+1,2) ;
allmcode.append(Mcode);
allmcode.append(" ");
if (Mcode=="30"){//程序结束并返回程序起点
}
if (Mcode=="98"){//调用子程序
}
if (Mcode=="99"){//子程序结束
}
if (Mcode=="00"){//程序暂停
}
if (Mcode=="03"){//主轴正转
}
if (Mcode=="04"){//主轴反转
}
if (Mcode=="05"){//主轴停止
}
if (Mcode=="08"){//切屑液打开
}
if (Mcode=="09"){//切屑液关闭
}
if (Mcode=="13"){//送开
}
if (Mcode=="12"){//夹紧
}
MS=MS.mid(mindex+1);
}
qDebug()<< QString("M:%1").arg(allmcode);
ui->mcodelab->setText(allmcode);//输出所有的G指令
allmcode=" ";
}
//**************Tcode*******************
//**************************************
TS=s;
if(TS.indexOf("T")>-1){//有T
tindex=TS.indexOf("T");
T=TS.mid(tindex+1,2).toInt() ;
ui->tcodelab->setText(QString::number(T));
}
//**************Fcode*******************
//**************************************
FS=s;
if(FS.indexOf("F")>-1){//有F
findex=FS.indexOf("F");
F=value(FS.mid(findex+1).trimmed());
qDebug()<< QString("F:%1").arg(QString::number(F));
ui->fcodelab->setText(QString::number(F));
}
//**************Scode*******************
//**************************************
SS=s;
if(SS.indexOf("S")>-1){//有F
sindex=SS.indexOf("S");
S=value(SS.mid(sindex+1).trimmed());
qDebug()<< QString("S:%1").arg(QString::number(S));
ui->scodelab->setText(QString::number(S));
}
//**************X,Y,Z,I,J,K,Rcode*******************
//**************************************************
if(s.indexOf("X")>-1){//有X
xindex=s.indexOf("X");
X=value(s.mid(xindex+1).trimmed());
qDebug()<< QString("X:%1").arg(QString::number(X));
ui->xcodelab->setText(QString::number(X));
}
if(s.indexOf("Y")>-1){//有Y
yindex=s.indexOf("Y");
Y=value(s.mid(yindex+1).trimmed());
qDebug()<< QString("Y:%1").arg(QString::number(Y));
ui->ycodelab->setText(QString::number(Y));
}
if(s.indexOf("Z")>-1){//有Z
zindex=s.indexOf("Z");
Z=value(s.mid(zindex+1).trimmed());
ui->zcodelab->setText(QString::number(Z));
qDebug()<< QString("Z:%1").arg(QString::number(Z));
}
if(s.indexOf("R")>-1){//有R
rindex=s.indexOf("R");
R=value(s.mid(rindex+1).trimmed());
ui->rcodelab->setText(QString::number(R));
qDebug()<< QString("R:%1").arg(QString::number(R));
}
if(s.indexOf("I")>-1){//有I
iindex=s.indexOf("I");
I=value(s.mid(iindex+1).trimmed());
ui->icodelab->setText(QString::number(I));
qDebug()<< QString("I:%1").arg(QString::number(I));
}
if(s.indexOf("J")>-1){//有J
jindex=s.indexOf("J");
J=value(s.mid(jindex+1).trimmed());
ui->jcodelab->setText(QString::number(J));
qDebug()<< QString("J:%1").arg(QString::number(J));
}
if(s.indexOf("K")>-1){//有K
kindex=s.indexOf("K");
K=value(s.mid(kindex+1).trimmed());
ui->kcodelab->setText(QString::number(K));
qDebug()<< QString("K:%1").arg(QString::number(K));
}
}
float MainWindow::value(QString s)
{ QString str;
for(int k=0;k<s.length();k++)
数控机床G代码解析demo提取G代码中的各种数据
2星 需积分: 50 101 浏览量
2018-03-26
10:13:36
上传
评论 12
收藏 967KB ZIP 举报
梁道永
- 粉丝: 17
- 资源: 11
最新资源
- windows下NTFS文件系统读取.zip
- windows程序设计课程 相关代码.zip
- Windows via C++图书代码,升级Windows SDK 到10.zip
- matlab基于扩张卡尔曼滤波的磷酸铁锂蓄电池SOC检测,给出了电池模型和算法实现过程.zip
- matlab基于卡尔曼滤波的磷酸铁锂蓄电池SOC检测
- STM8S003F3P6最小系统AD版(包含原理图、PCB源文件)
- smg.uvproj
- nextjs turbo build
- mysql-connector-j-8.0.31.jar
- MATLAB Appdesigner 设计天气预报小程序:全国各城市天气查询系统Weather-capturer-v3
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈