一个工业数控上的G代码编译程序

[复制链接]
查看2556 | 回复8 | 2011-3-14 12:43:00 | 显示全部楼层 |阅读模式
这个函数是一个工业数控上的G代码编译程序,
G代码的格式如下,我把它存在了记事本中。现在利用CStdioFile fs.Open打开文件,然后利用ReadString对文件的每一行进行读取。读取出来一行字符串后在接着对字符串中的字符进行处理。现在的关键问题是程序按行读取字符串没有问题。可是要求程序有循环指令,也就是遇到G22就要进行循环,它的循环体式G22到G80之间的行数.

G代码格式:
G22 L4
G1 U-120 V-110
U120 V110
G80
M60
G0 X-123 Y0 Z0
M62
G22 L4
G1 U120 V-110
U-120 V-110
G80
M60
M00
G0 X123 Y0 Z0
M62
G22 L4
G1 U-120 V-110
U120 V-110
G80
M60
部分代码
if(fs.Open(SourPath, CFile::modeRead | CFile::typeText))
while(1)
{  
if(fs.ReadString(str1)==NULL)break; // 利用ReadString读取每一行代码
str1+='\n'; //在行结束的时候给它加上一个换行符
while(str1[n]!='\n') //对字符串中的每个字符进行判断
{  
switch(str1[n])
{  
case 'X':case 'x':
Read(str1,n,xn); //如果有X,就把X后边的数字读取出来,赋值给xn,以备下边的处理。
bX=true;
break;
case 'Y':case 'y':
Read(str1,n,yn);  
bY=true;
break;   
case 'Z':case 'z':
Read(str1,n,zn);
bZ=true;
break;
case 'U':case 'u':
ReadNum(str1,n,un1);
bU=true;
break;
case 'V':case 'v':
ReadNum(str1,n,vn);
bV=true;
break;
case 'W':case 'w':
Read(str1,n,wn);
bW=true;
break;   
case 'G':case 'g': //如果遇到G,就把G后边的数字读取出来。
Read(str1,n,code);
switch(code)
{ //5
case 0:
case 1:
case 2:
case 3:
Line=code;  
break;
case 4: //G04暂停G04 X或者是P,X和P都为暂停时间,单位不一样
case 17:
case 18:
case 19:
PlanGroup=code;
break;
case 22:  
bG22=true;


case 80: //绝对值方式编程
bG80=true;   
break;
  
break;
default:
break;
} switch(str1[n])判断到这里一个字符判断完毕

   
n++;
} while(str1[n]!='\n')
zhangyanpei | 2011-6-19 17:33:00 | 显示全部楼层
看不懂不明白啥意思?
dcrmaster | 2011-6-30 15:20:00 | 显示全部楼层
高深喽
guangshan | 2011-7-20 15:32:00 | 显示全部楼层
看来离入门还很远~完全看不懂
wskdwjstd | 2011-7-30 10:51:00 | 显示全部楼层
这么高深,很要努力学习啊
icbuy555 | 2011-8-9 09:21:00 | 显示全部楼层
MSP430单片机以其超低功耗被业内人士所钟爱,但因原厂对渠道的严格管控,市场上贸易商基本上没有机会拿到货,也导致我们买小批量的时候很困难,代理商又对量要求较高,这个一直困扰着我,想用又怕用,但就在前不久,我听说MSP430在中国最大的代理商--利尔达,在其旗下的网上商城(ICBUY亿芯网)开通了网上订购样片的渠道,价格合适,品质绝对OK,真是方便又快捷呀,赞一个!
guoying1975 | 2011-8-17 22:19:00 | 显示全部楼层
看不懂不明白啥意思?
重庆在路上 | 2011-9-19 16:07:00 | 显示全部楼层
我要报名学习做点胶机,我会VB和三菱FX系列PLC简单的通讯
917346 | 2012-2-22 13:15:53 | 显示全部楼层
先将文件读到一个字符串数组应该循环处理就没问题了
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则