数控实验报告

实验报告2

1.利用C++语言和运动控制卡库函数,采用逐点比较法编写直线插补程序。

打开F盘下dll文件夹,将 GT400data.h,GT400.lib,GT400.dll , userlib.h 4个文件拷贝到F盘中experiment_1文件夹中,打开文件夹中扩展名为dsw的文件,进入VC++中,找到已经建立的模版,在模版中有进给按钮XRun(-)、XRun(+)、YRun(-)、YRun(+)、直线插补按钮、初始化按钮、抬笔、压笔、以及打开伺服按钮PowerOn、关上伺服按钮PowerOff。双击任意一个按钮后可添加相应的程序。

void CTest3Dlg::OnBPowerOff()//关上伺服

{

for(int i=1;i<3;i++)

{

GT_Axis(i);//选择当前轴

GT_AbptStp();//立即停止当前轴的运动,将实际速度设置为零 GT_AxisOff();//关闭当前轴

Sleep(200); //重新初始化轴状态

GT_ClrSts();//清除当前轴状态

GT_Update();

GT_SetPos(0);

GT_SetVel(0);

GT_SetAcc(0);

GT_Update();

GT_ZeroPos();

}

}

void CTest3Dlg::OnBPowerOn() //打开伺服

{

for(int i=1;i<3;i++)

{

GT_Axis(i);

GT_SetKp(3);

GT_SetKd(10);//设置比例和微分参数

GT_Update();

GT_AxisOn();//打开当前轴

Sleep(100);

}

}

void CTest3Dlg::OnExit() //退出

{

OnBPowerOff();

GT_Close();

this->CloseWindow();

this->DestroyWindow();

}

void CTest3Dlg::OnInit() //初始化

{

GT_Close();

Sleep(200);

GT_Open();

Sleep(200);//使运动控制器复位

GT_LmtSns(0);// 置限位开关的有效电平,0为高电平触发 Sleep(200);

for(int i =1;i<3;i++)

{

GT_Axis(i);

GT_SetIntrMsk(0);// 设置当前轴中断屏蔽字,设置为0表示允许中断事

件向主机申请中断

GT_ClrSts(); //清除当前轴状态

GT_PrflT();//设置当前轴运动控制模式为梯形曲线模式

GT_Update();

}

}

void CTest3Dlg::OnBXRunMinus() //X向负方向进给一步

{

GT_ZeroPos();//目标位置清零

GT_Update();

GT_Axis(1);//选定X轴

//设置目标位置、速度、加速度

GT_SetPos(-1000);

GT_SetAcc(0.2);

GT_SetVel(5);

GT_Update();

}

void CTest3Dlg::OnBYRunAdd() // Y向正方向进给一步

{

GT_ZeroPos();

GT_Update();

GT_Axis(2);

GT_SetPos(1000);

GT_SetAcc(0.2);

GT_SetVel(5);

GT_Update();

}

void CTest3Dlg::OnBYRunMinus() // Y向负方向进给一步 {

GT_ZeroPos();

GT_Update();

GT_Axis(2);

GT_SetPos(-10000);

GT_SetAcc(0.2);

GT_SetVel(5);

GT_Update();

}

void CTest3Dlg::OnBXRunAdd()//X向正方向进给一步 {

GT_ZeroPos();

GT_Update();

GT_Axis(1);

GT_SetPos(10000);

GT_SetAcc(0.2);

GT_SetVel(5);

GT_Update();

}

void CTest3Dlg::OnPenUp() //抬笔

{

GT_ExOpt(0xff);

}

void CTest3Dlg::OnPenDown() //压笔

{

GT_ExOpt(0x0);

}

void CTest3Dlg::OnLineXY() //直线插补

{

int x=500,y=500;//直线终点坐标

int End_Flag=x+y;//进给完成判别

int Fij=0;

while(End_Flag)

{

if(Fij>=0)

{

//向X正方向进给一步 OnBXRunAdd(); Fij=Fij-y;

End_Flag=End_Flag-1; }

else

{

//向+y方向进给一步 OnBYRunAdd(); Fij=Fij+x;

End_Flag=End_Flag-1; }

}

}

实验报告3

利用C++和运动控制卡库函数采用数字积分(DDA)法在实验二编写的程序的基础上编写直线和圆弧插补程序。

程序清单:

void CExperiment_1Dlg::OnLineXY() // DDA直线插补

{

unsigned short Jvx,Jkx,Jvy,Jky;//定义累加器Jvx、Jvy和被积函数寄存器Jkx、Jky unsigned short x=6,y=4; //定义直线终点坐标

int n=3;//定义累加器和被积函数寄存器的位数

int j=pow(2,n);//终点判别j=2n

int p=j;//p用于判断累加器是否溢出

Jvx=x;Jvy=y;Jky=0;Jkx=0;//初始化累加器Jvx、Jvy和被积函数寄存器Jkx、Jky while(j>=0)//当终点判别j≥0时循环

{

Jkx=Jkx+Jvx;

Jky=Jky+Jvy;//累加器进行累加

if (Jkx>=p)//Jvx累加器有溢出时x向正方向进给一步

{

OnBXRunAdd();

}

if(Jky>=p)// Jvy累加器有溢出时y向正方向进给一步

{

OnBYRunAdd();

}

Sleep(1000);//延时

j=j-1;

Jkx=(Jkx&0x0007);

Jky=(Jky&0x0007);//保留被积函数寄存器前三位

}

}

void CExperiment_1Dlg::OnButton1() // DDA圆弧插补实验

{

unsigned short Jvx,Jkx,Jvy,Jky;// 累加器Jvx、Jvy和被积函数寄存器Jkx、Jky

unsigned short Xe=0,Ye=5,Xo=5,Yo=0;//终点坐标(0,5)和起点坐标(5,0) int jx=abs(Xe-Xo);int jy=abs(Ye-Yo);//终点判别

Jvx=Xe;Jvy=Ye;Jky=0;Jkx=0;// 初始化累加器Jvx、Jvy和被积函数寄存器Jkx、

Jky

While((jx+jy)>=0)

{

Jkx=Jkx+Jvx;

if(jx>0)

{

if (Jkx>=8) // 累加器Jvx是否有溢出

{

OnBXRunMinus();

Jvy=Jvy-1;

jx=jx-1;

}

}

Jky=Jky+Jvy;

if(jy>0)

{

if(Jky>=8) // 累加器Jvy是否有溢出

{

OnBYRunAdd();

Jvx=Jvx+1;

jy=jy-1;

}

}

Sleep(100);

Jkx=(Jkx&0x0007);

Jky=(Jky&0x0007);// 保留被积函数寄存器前三位 }

}

 

第二篇:数控实验报告

数控车床的操作与加工实验报告书

班级:      07 级     姓名: 小强      学号:---------

数控铣床的操作与加工实验报告书

班级:  07级     姓名:小强     学号:----------

相关推荐