如何编写机械程序

如何编写机械程序,第1张

#include<stdio.h>

#include<graphics.h>

#include<math.h>

#include<dos.h>

#include<bios.h>

#include<ctype.h>

#include<process.h>

#include<conio.h>

#define COLOR WHITE

#define F1 59

#define F2 60

#define UP 72

#define DOWN 80

#define LEFT 75

#define RIGHT 77

#define HOME 71

#define END 79

#define PAGEUP 73

#define PAGEDOWN 81

int inc=1

typedef union/*返回键盘输入值*/

{char c[2]

int i

}KEY

KEY key

typedef struct /*定义点*/

{int x

int y

}DOT

DOT dis,firstdot,secdot,dot1

int point()

int do_that()

void mv_cp(int startx,int starty,int endx,int endy,int x,int y,int flag)/*移动函数*/

void fill(int startx,int starty,int endx,int endy)/*填充*/

void colour()/*颜色*/

void menu(void)/*主菜单*/

void save(void)/*保存*/

void load(void)/*打开文件*/

void xhairs(int a,int b)/*显示光标*/

void arr_key(char c)

/*--------------------------------主函数---------------------------------------*/

void main()

{

int k,j,m,r,x1,y1,xn,yn

int driver,mode

dis.x=200

dis.y=200

driver=DETECT

mode=VGAHI

registerbgidriver(EGAVGA_driver)

registerbgifont(TRIPLEX_FONT)

initgraph(&driver,&mode,"f:\\tc2.01\\BGI")

setbkcolor(BLUE)

cleardevice()

setcolor(YELLOW)

xhairs(dis.x,dis.y)

while(key.c[0]!='q')

{

menu()/*显示菜单*/

key.i=bioskey(0)

xhairs(dis.x,dis.y)

if(!key.c[0])

arr_key(key.c[1])

else

switch(tolower(key.c[0]))

{

case 'f':

xhairs(dis.x,dis.y)colour()break

case 'd':x1=y1=0xhairs(dis.x,dis.y)setcolor(LIGHTRED)

outtextxy(10,22+(13)*30,"b:begine point")

outtextxy(10,22+(14)*30,"g:give up")

x1=point()

fill(6,410,149,430)

xhairs(dis.x,dis.y)

outtextxy(10,22+(13)*30,"e:end point")

outtextxy(10,22+(14)*30,"g:give up")

y1=point()

fill(6,410,149,460)

setcolor(COLOR)

if(x1&&y1)

{outtextxy(10,22+(13)*30,"move the +")

outtextxy(10,22+(14)*30,"y:do n:no")

}

x1=0

xhairs(dis.x,dis.y)

x1=do_that()

if(x1)

{xn=dis.xyn=dis.y

mv_cp(firstdot.x,firstdot.y,secdot.x,secdot.y,xn,yn,0)

}

fill(6,410,149,460)break

case 'l':x1=y1=0/*画直线*/

xhairs(dis.x,dis.y)

setcolor(LIGHTRED)

outtextxy(10,22+(13)*30,"b:begin point")

outtextxy(10,22+(14)*30,"g:give up")

x1=point()

fill(6,410,149,430)

xhairs(dis.x,dis.y)

outtextxy(10,22+(13)*30,"e:end point")

outtextxy(10,22+(14)*30,"g:five up")

y1=point()

setcolor(COLOR)

if(x1&&y1)

line(firstdot.x,firstdot.y,secdot.x,secdot.y)

fill(6,410,155,460)

break

case 'o':/*画圆形*/

x1=y1=0

xhairs(dis.x,dis.y)

setcolor(LIGHTRED)

outtextxy(10,22+(13)*30,"b:radius")

outtextxy(10,22+(14)*30,"g:give up")

x1=point()

fill(6,410,149,430)

xhairs(dis.x,dis.y)

outtextxy(10,22+(13)*30,"e:radius")

outtextxy(10,22+(14)*30,"g:give up")

y1=point()

if(x1&&y1) setcolor(COLOR)

r=sqrt(fabs((secdot.x-firstdot.x)*(secdot.x-firstdot.x)+(secdot.y-firstdot.y)*(secdot.y-firstdot.y)))

if(x1&&y1) circle(firstdot.x,firstdot.y,r)

fill(6,410,149,460)break

case 'h':/*画矩形*/

x1=y1=0

xhairs(dis.x,dis.y)

setcolor(LIGHTRED)

outtextxy(10,22+(13)*30,"b:left top")

outtextxy(10,22+(14)*30,"g:give up")

x1=point()

fill(6,410,149,430)

xhairs(dis.x,dis.y)

outtextxy(10,22+(13)*30,"e:right bottom")

outtextxy(10,22+(14)*30,"g:give up")

y1=point()

if(x1&&y1)

{

setcolor(COLOR)

rectangle(firstdot.x,firstdot.y,secdot.x,secdot.y)

}

fill(6,410,155,460)break

case 's':cleardevice()break/*清屏*/

case 'w':save()break

case 'r':load()break

case 'm':x1=y1=0/*图形移动*/

xhairs(dis.x,dis.y)

setcolor(LIGHTRED)

outtextxy(10,22+(13)*30,"b:begin point")

outtextxy(10,22+(14)*30,"g:give up")

x1=point()

fill(6,410,149,430)

xhairs(dis.x,dis.y)

outtextxy(10,22+(13)*30,"e:end point")

outtextxy(10,22+(14)*30,"g:give up")

y1=point()

fill(6,410,149,460)

setcolor(COLOR)

if(x1&&y1)

{

outtextxy(10,22+(13)*30,"move the +")

outtextxy(10,22+(14)*30,"y:do n:no")

}

x1=0

xhairs(dis.x,dis.y)

x1=do_that()

if(x1)

{

xn=dis.xyn=dis.y

mv_cp(firstdot.x,firstdot.y,secdot.x,secdot.y,xn,yn,1)

}

fill(6,410,149,460)break

}

xhairs(dis.x,dis.y)

}

closegraph()

}

/*--------------------------------显示光标函数--------------------------------*/

void xhairs(int a,int b)

{

int i

for(i=a-3i<=a+3i++)

putpixel(i,b,15^getpixel(i,b))

for(i=b-3i<=b+3i++)

putpixel(a,i,15^getpixel(a,i))

}

/*------------------------------菜单函数------------------------------*/

void menu(void)

{

#define STARTX 10

#define STARTY 22

#define DISTANCE 30

int i

char *menu_name[]={"F1:setp=1",

"F2:step=5",

"l:draw line",

"o:draw cirle",

"h:graw box",

"s:clear screen",

"m:move",

"d:copy",

"f:fill color",

"w:save",

"r:load",

"q:quit"}

setcolor(WHITE)

rectangle(5,5,150,470)

rectangle(5,403,150,470)

rectangle(155,5,635,470)

setcolor(LIGHTBLUE)

settextstyle(TRIPLEX_FONT,HORIZ_DIR,2)

outtextxy(36,STARTY,"menu")

settextstyle(DEFAULT_FONT,HORIZ_DIR,1)

for(i=0i<12i++)

outtextxy(STARTX,STARTY+(i+1)*DISTANCE,menu_name[i])

}

/*---------------------------------保存函数---------------------------------*/

void save(void)

{int i,j

FILE *fp

if((fp=fopen("graph.dat","w+"))==NULL)

{printf("cannot open this file!")

exit(0)

}

fill(260,473,400,480)

for(i=5i<470i++)

for(j=155j<=635j++)

fputc(getpixel(j,i),fp)

fclose(fp)

outtextxy(260,471,"save over!")

}

/*-----------------------------------------打开函数------------------------*/

void load(void)

{

int i,j

FILE *fp

if((fp=fopen("graph.dat","r+"))==NULL)

{

outtextxy(260,471,"cannot open this file!")

getch()

exit(0)

}

fill(260,471,400,480)

outtextxy(280,471,"loading......")

for(i=5i<=470i++)

for(j=155j<=635j++)

putpixel(j,i,fgetc(fp))

fill(260,471,400,480)

fclose(fp)

outtextxy(280,471,"loading over")

}

/*-----------------------------------------移动复制函数---------------------------*/

void mv_cp(int startx,int starty,int endx,int endy,int x,int y,int flag)

{

int i,j

unsigned char c

if(startx>endx)

if(starty>endy)

{i=starty

starty=endyendy=i}

for(startx<=endxstartx++,x++)

for(i=starty,j=yi<=endyi++,j++)

{c=getpixel(startx,i)

if(flag) putpixel(startx,i,BLUE)

putpixel(x,j,c)

}

}

/*----------------------------返回点坐标函数----------------------------------*/

int point()

{int valid_p=0,g=1

key.c[0]=''

while(key.c[0]!='p')

{key.i=bioskey(0)

xhairs(dis.x,dis.y)

if(!key.c[0])

arr_key(key.c[1])

else

switch(tolower(key.c[0]))

{case 'b':putpixel(dis.x,dis.y,COLOR)

firstdot.x=dis.x

firstdot.y=dis.y

key.c[0]='p'

valid_p=1

break

case 'e':

putpixel(dis.x,dis.y,COLOR)

secdot.x=dis.x

secdot.y=dis.y

key.c[0]='p'

valid_p=2break

case 'g':

firstdot.x=secdot.x

firstdot.y=secdot.y

key.c[0]='p'

g=0break

}

xhairs(dis.x,dis.y)

if(valid_p==1||valid_p==2||g==0)

break

}

xhairs(dis.x,dis.y)

return valid_p

}

/*------------------------------确认 *** 作------------------------*/

int do_that()

{

int valid_p=0,g=1

key.c[0]=''

while(key.c[0]!='p')

{key.i=bioskey(0)

xhairs(dis.x,dis.y)

if(!key.c[0])

arr_key(key.c[1])

else

switch(tolower(key.c[0]))

{case 'y':

key.c[0]='p'

putpixel(dis.x,dis.y,COLOR)

valid_p=1break

case 'n':

key.c[0]='p'

firstdot.x=secdot.x

firstdot.y=secdot.y

g=0break}

xhairs(dis.x,dis.y)

if(valid_p==1||g==0)

break

}

xhairs(dis.x,dis.y)

return valid_p

}

/*-----------------------------填充-------------------------------*/

void fill(int startx,int starty,int endx,int endy)

{int i,j

for(i=startxi<=endxi++)

for(j=startyj<=endyj++)

{putpixel(i,j,BLUE)

}

}

/*-----------------------------------颜色定义--------------------------------*/

void colour()

{

key.c[0]=''

setcolor(RED)

outtextxy(10,412,"R")

setcolor(GREEN)

outtextxy(40,412,"G")

setcolor(CYAN)

outtextxy(70,412,"C")

setcolor(LIGHTBLUE)

outtextxy(10,432,"L")

setcolor(MAGENTA)

outtextxy(40,432,"M")

setcolor(YELLOW)

outtextxy(70,432,"Y")

setcolor(WHITE)

outtextxy(10,452,"W")

setcolor(BROWN)

outtextxy(40,452,"N")

setcolor(LIGHTRED)

outtextxy(70,452,"D")

while(key.c[0]!='p')

{

key.i=bioskey(0)

xhairs(dis.x,dis.y)

if(!key.c[0])

arr_key(key.c[0])

else

{switch(tolower(key.c[0]))

{case 'y' : setfillstyle(SOLID_FILL,YELLOW) break

case 'r' : setfillstyle(SOLID_FILL,RED)break

case 'g' : setfillstyle(SOLID_FILL,GREEN)break

case 'c' : setfillstyle(SOLID_FILL,CYAN)break

case 'l' : setfillstyle(SOLID_FILL,LIGHTBLUE)break

case 'm' : setfillstyle(SOLID_FILL,MAGENTA)break

case 'w' : setfillstyle(SOLID_FILL,WHITE)break

case 'n' : setfillstyle(SOLID_FILL,BROWN)break

case 'd' : setfillstyle(SOLID_FILL,LIGHTRED)break

}

key.c[0]='p'}

*-------------------------光标---------------------*/

xhairs(dis.x,dis.y)

}

xhairs(dis.x,dis.y)

floodfill(dis.x,dis.y,WHITE)

fill(6,410,149,460)

}

/*-----------------------------光标控制----------------------------*/

void arr_key(char c)

{switch(c)

{case LEFT : dis.x-=incbreak

case RIGHT : dis.x+=incbreak

case UP : dis.y-=incbreak

case DOWN : dis.y+=incbreak

case F1 : inc=1break

case F2 : inc=5break

}

}

一般说来,数控机床程序编制的内容与步骤包括:分析工件同样、确定加工工艺过程、数值计算、编写零件的加工程序单、程序输入数控系统、校对加工程序和首件试加工。

(1) 分析普通机床工件图样分析

工件的材料、形状、尺寸、精度及毛坯形状和热处理要求等,以便确定该零件是否适合在数控机床上加工,或适合在哪种类型的数控机床上加工。只有那些属于批量小、形状复杂、精度要求高及生产周期要求短的零件,才量适合数控加工。同时要明确加工内容和要求。

(1)确定普通机床加工工艺过程

在对零件图样作了全面分析的前提下,确定零件的加工方法(如采用的工夹具、装夹定位方法等)、加工路线(如对刀点、换刀点、进给路线)及切削用量等工艺参数(如进给速度、主轴转速、切削宽度和切削深度等)。制定数控加工工艺时,除考虑数控机床使用的合理性及经济性外,还须考虑所用夹具应便于安装,便于协调工件和机床坐标系的尺寸关系,对刀点应选在容易找正井在加工过程中便于检查的位置,进给路线尽量短井使数值计算容易,加工安全可靠等因素。

(3)普通机床数值计算

根据工件图及确定的加工路线和切削用量,计算出数控机床所需的输入数据。数值计算主要包括计算工件轮廓的基点和节点坐标等。

(4)编写普通机床零件的加工程序单

根据加工路线,计算出刀具运动轨迹坐标值和己确定的切削用量以及辅助动作,依据数控装置规定使用的指令代码及程序段格式,逐段编写零件加工程序单。编程人员必须对所用的数控机床的性能、编程指令和代码都非常熟悉,才能正确编写加工程序。

(5)普通机床程序输入数控系统

程序单编好之后,需要通过一定的方法将其输入给数控系统。常用的输入方法有3种:    ①手动数据输入。按所编程序单的内容,通过 *** 作数控系统键盘上各数字、字母、符号键进行辅入,同时利用CRT显示内容进行检查。即将程序单的内容直接通过数控系统的键盘手动键入数控系统。②用控制介质输入。控制介质多采用穿孔纸带、磁带、磁盘等。穿孔纸带上的程序代码通过光电阅读机输入数控系统,控制数控机床工作。而磁带、磁盘是通过磁带收录机、磁盘驱动器等装置输入数控系统的。③通过机床的通信接口输入。通过与机床控制的通信接口连接的电缆将数控加工程序直接快速地输入机床的数控装置。

(6)校对普通机床加工程序

通常数控加工程序输入完成后,需要校对其是否有错误。一般是将加工程序上的加工信息插入数控系统进行空运转检验,也可在数控机床上用笔代替刀具,以坐标纸代替工件进行画图模拟加工,以检验机床动作和运动轨迹的正确性。

(7)普通机床首件试加工

校对后的加工程序还不能确定因编程计算不准确或刀具调整不当造成加工的误差大小,因而还必须经过首件试切的方法进行实际检查,进~步考察程序单的正确性并检查工件是否达到加工精度要求。根据试切情况反过来再进行程序单的修改以及采取尺寸补偿措施等,直到加工出满足要求的零件为止。

扩展资料

数控加工程序的结构

1. 程序的构成:由多个程序段组成。

O0001;O(FANUC-O,AB8400-P,SINUMERIK8M-%)机能指定程序号,每个程序号对应一个加工零件。

N010 G92 X0 Y0;分号表示程序段结束

2. 程序段格式:

1) 字地址格式:如N020 G90 G00 X50 Y60;

最常用的格式,现代数控机床都采用它。地址N为程序段号,地址G和数字90构成字地址为准备功能,...。

参考资料:百度百科-数控机床程序编制

用EDIT指令进入编辑状态后,可以用C、D、E、I、L、P、R、S、T等命令来进一步编辑。如:

1、C命令:改变编辑的程序,用一个新的程序代替。

2、D命令:删除从当前行算起的n行程序,n缺省时为删除当前行。

3、E命令:退出编辑返回监控模式。

4、I命令:将当前指令下移一行,以便插入一条指令。

5、P命令:显示从当前行往下n行的程序文本内容。

6、T命令:初始化关节插值程序示教模式,在该模式下,按一次示教盒上的“RECODE”按钮就将MOVE指令插到程序中。

扩展资料:

执行指令

ABORT指令:执行此指令后紧急停止(急停)。

DO指令:执行单步指令。

EXECUTE指令:此指令执行用户指定的程序n次,n可以从–32 768到 32 767,当n被省略时,程序执行一次。

NEXT指令:此命令控制程序在单步方式下执行。

PROCEED指令:此指令实现在某一步暂停、急停或运行错误后,自下一步起继续执行程序。

RETRY指令:指令的功能是在某一步出现运行错误后,仍自那一步重新运行程序。

参考资料来源:百度百科-机器人编程


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11362158.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存