固高平台开发实验报告.docx
- 文档编号:9424562
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:20
- 大小:206.09KB
固高平台开发实验报告.docx
《固高平台开发实验报告.docx》由会员分享,可在线阅读,更多相关《固高平台开发实验报告.docx(20页珍藏版)》请在冰点文库上搜索。
固高平台开发实验报告
《机电控制子系统综合设计实践》方案设计
1类别:
PC机控制直流伺服电机XY工作台运动
目的:
掌握逐点比较法、数字积分法等常见直线插补、圆弧插补原理和实现方法;通过利用运动控制器的基本控制指令实现直线插补和圆弧插补,掌握基本数控插补算法的软件实现。
2目标:
利用固高系列运动控制器函数库中的函数,实现逐点比较法直线插补和圆弧插补,绘制出设计图形。
如图:
3原理:
利用直线插补与圆弧插补可近似的画出想要的图像
3.1逐点比较法直线插补
逐点比较法是使用阶梯折线来逼近被插补直线或圆弧轮廓的方法,一般是按偏差判别、进给控制、偏差计算和终点判别四个节拍来实现一次插补过程。
以第一象限为例,取直线起点为坐标原点,如右图所示,m为动点,有下面关系:
取
作为偏差判别式:
若Fm=0,表明m点在OA直线上;
若Fm>0,表明m点在OA直线上方的m′处;
若Fm<0,表明m点在OA直线下方的m″处。
从坐标原点出发,当Fm≧0时,沿+X方向走一步,当Fm<0,沿+Y方向走一步,当两方向所走的步数与终点坐标(Xe,Ye)相等时,停止插补。
当Fm≧0时,沿+X方向走一步,则Xm+1=Xm+1,Ym+1=Ym
新的偏差为:
Fm+1=Ym+1Xe-Xm+1Ye=YmXe-(Xm+1)Ye
Fm+1=Fm-Ye
当Fm<0时,沿+Y方向走一步,则Xm+1=Xm,Ym+1=Ym+1
新的偏差为:
Fm+1=Ym+1Xe-Xm+1Ye=(Ym+1)Xe-XmYe
Fm+1=Fm+Xe
其它三个象限的计算方法,可以用相同的原理获得,下表为四个象限插补时,其偏差计算公式和进给脉冲方向,计算时,Xe,Ye均为绝对值。
3.2逐点比较法圆弧插补
以第一象限逆圆为例,如下图所示。
圆弧圆心在坐标原点,A为起点,B为终点,半径为R,假设运动瞬时点为m,它与圆心的距离为Rm,以Rm和R平方差作为偏差值,则偏差判别式为:
若Fm=0,表明m点在圆弧上;
若Fm>0,表明m点在圆弧外;
若Fm<0,表明m点在圆弧内。
当Fm≥0时,为了逼近圆弧,应沿-X方向进给一步,到m+1点,其坐标值为:
Xm+1=Xm-1,Ym+1=Ym,新偏差值为:
当Fm<0时,为了逼近圆弧,应沿+Y方向进给一步,到m+1点,其坐标值为Xm+1=Xm,Ym+1=Ym+1,新偏差值为:
由上两式可得,只要知道前一点的偏差,就可求出新一点的偏差,而起点处的Fm=0是可知的。
以上是第一象限逆圆的情况,其它情况可同理推导出来,表6-2为四个象限顺逆方向归纳的进给方向和偏差计算公式。
4有关函数:
4.1GT_ArcXYP
函数原型:
shortGT_rXYP(doubleX_end,doubleY_end,doubleR,shortDir)
函数说明:
该函数实现XOY平面内的两轴圆弧插补。
圆弧插补运动的起点坐标是前一段轨迹的终点坐标,如果是第一段轨迹则起点是当前位置坐标
函数参数:
X_end,Y_end,是圆弧终点坐标R是圆弧半径并带符号,其符号表示此段圆弧是优弧还是劣弧(正劣弧,负优弧),坐标和半径的单位由用户通过坐标映射函数自行定义.Dir是圆弧旋转的方向1为正向旋转-1为负向旋转。
4.2GT_LnXY
函数原型:
shortGT_LnXY(doubleX,doubleY)
函数说明:
该函数实现二维直线插补运动。
函数参数:
XY分别为相应个坐标的终点坐标。
直线插补运动的起点坐标是前一段轨迹描述的终点坐标,如果是第一条轨迹,则是当前位置坐标。
实验设备:
XY平台设备一套
GT-400-SV卡一块
PC机一台
配套笔架
绘图纸张若干
VC软件开发平台
5实验步骤
1、做好实验前的预习工作,了解固高工作平台的各种性能,如步长、xy工作平台的界限尺寸等
2、
认真观察固高xy软件的界面设置和各种功能应用,从中体会自己的界面设置。
3、在c语言中制作自己的界面,我们的界面追求简洁如下图所示
4、除启动程序外,将其他按键的对应程序依次填入所编写的程序中。
5、将所画图插入cad中,画出cad图,量取各处尺寸,应用GT_LnXY和GT_ArcXYP编写有关辣椒的图形,将每一段曲线都使用圆弧与直线代替
6、将上一步编号的程序复制到主程序启动程序按键下
7、调试
8、最终程序见附录
6遇到的问题
一、编好的程序无法画出图形
答:
1解决办法:
将所有参数扩大五倍,原因:
xy平台有误差,当所画图形尺寸太小时会出现图形与目标图形差别太大。
2解决办法:
将绝对坐标改成相对坐标,原因:
xy平台在同一个子程序中使用的是绝对坐标而我们开始以为是相对坐标
3将子程序运行程序下的GT_ArcXYP下的p值-1改为1,1改为-1,原因之前工作中的顺圆与逆圆判断失误
二、画出的图像与目标图像纯在差距
答:
坐标参数设置有问题,改正后从新运行程序
三、编程中遇到错误,无法运行
答:
检查程序中的失误,方法首先撤销掉上一步的操作,然后把程序重新一步一步的写入主程序直到检查出错误的为止。
7收获
认识并学习到xy工作台的操作与初步的编程控制,这在以后的工作学习中会是很大的帮助。
8致谢
感谢来越深老师、王沁老师在试验过程中的帮助与指导,你们严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。
在此,我还要感谢在一起做相同试验的同学,是大家在遇到问题是一起探讨,一起研究,最后才使得实验结果的已完成。
9参考书籍
GT系列运动控制器编程手册.
XY平台用户手册v2
XY运动平台实验指导书
附录一
程序
//11Dlg.cpp:
implementationfile
//
#include"stdafx.h"
#include"11.h"
#include"11Dlg.h"
#include"GT400.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
intm_nIOValue=0xFFFF;
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CMy11Dlgdialog
CMy11Dlg:
:
CMy11Dlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMy11Dlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CMy11Dlg)
//NOTE:
theClassWizardwilladdmemberinitializationhere
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCMy11Dlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMy11Dlg)
//NOTE:
theClassWizardwilladdDDXandDDVcallshere
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMy11Dlg,CDialog)
//{{AFX_MSG_MAP(CMy11Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1,OnButton1)
ON_BN_CLICKED(IDC_BUTTON2,OnButton2)
ON_BN_CLICKED(IDC_BUTTON3,OnButton3)
ON_BN_CLICKED(IDC_BUTTON7,OnButton7)
ON_BN_CLICKED(IDC_BUTTON6,OnButton6)
ON_BN_CLICKED(IDC_BUTTON4,OnButton4)
ON_BN_CLICKED(IDC_BUTTON5,OnButton5)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CMy11Dlgmessagehandlers
BOOLCMy11Dlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
voidCMy11Dlg:
:
OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog:
:
OnSysCommand(nID,lParam);
}
}
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
voidCMy11Dlg:
:
OnPaint()
{
if(IsIconic())
{
CPaintDCdc(this);//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
}
else
{
CDialog:
:
OnPaint();
}
}
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
HCURSORCMy11Dlg:
:
OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}
voidCMy11Dlg:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
shortrtn;
unsignedshortLmtSense=0xff;
unsignedintEncSense=0xF;
rtn=GT_Close();
Sleep(20);
rtn=GT_Open();
if(rtn)
{
AfxMessageBox("板卡开启失败,程序将退出!
\n请检查您的计算机内是否正确安装板卡",MB_OK|MB_ICONERROR);
return;
}
if(GT_Reset()!
=0)
{
TRACE0("板卡重置错误!
");
AfxMessageBox("板卡重置错误!
",MB_OK|MB_ICONERROR);
return;
}
rtn=GT_SetSmplTm(200);
for(inti=1;i<5;i++)
{
rtn=GT_Axis(i);
rtn=GT_SetIntrMsk(0);
}
rtn=GT_LmtSns(LmtSense);
#ifdefGT_SV
rtn=GT_EncSns(EncSense);
#endif//系统上电。
x,y轴寄存器清零
//设置1轴参数
rtn=GT_Axis
(1);
rtn=GT_ClrSts();
rtn=GT_CtrlMode(0);//设置控制信号为模拟电压,与此适应,驱动器pr02参数应设置为1
rtn=GT_CloseLp();//设置为闭环控制
rtn=GT_SetKp
(1);//PID设置
rtn=GT_SetKi(0);
rtn=GT_SetKd(0);
rtn=GT_Update();//将设置的参数更新
//设置2轴参数
rtn=GT_Axis
(2);
rtn=GT_ClrSts();
rtn=GT_CtrlMode(0);
rtn=GT_CloseLp();
rtn=GT_SetKp
(1);
rtn=GT_SetKi(0);
rtn=GT_SetKd(0);
rtn=GT_Update();
doublecnt1[5]={1,0,0,0,0};
doublecnt2[5]={0,1,0,0,0};
rtn=GT_MapAxis(1,cnt1);//Error(rtn,"GT_MapAxis
(1)");
rtn=GT_MapAxis(2,cnt2);//Error(rtn,"GT_MapAxis
(2)");
rtn=GT_SetSynAcc(0.01);
rtn=GT_SetSynVel
(2);
for(i=0;i<4;i++)
{
rtn=GT_Axis(i);
rtn=GT_ZeroPos();
}
rtn=GT_StrtList();
rtn=GT_MvXY(0,0,2,0.01);
return;
}
voidCMy11Dlg:
:
OnButton2()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
shortrtn;
rtn=GT_Axis
(1);
rtn=GT_AxisOn();
rtn=GT_Axis
(2);
rtn=GT_AxisOn();//x,y轴初始化
}
voidCMy11Dlg:
:
OnButton3()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
intport=0x2;
port=~port;
m_nIOValue=m_nIOValue&port;
GT_ExOpt(m_nIOValue);//笔架落下
}
voidCMy11Dlg:
:
OnButton7()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
shortrtn;
rtn=GT_Axis
(1);
rtn=GT_AxisOff();
rtn=GT_Axis
(2);
rtn=GT_AxisOff();//x,y断电关闭
}
voidCMy11Dlg:
:
OnButton6()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
intport=0x2;
m_nIOValue=m_nIOValue|port;
GT_ExOpt(m_nIOValue);//笔架抬起
}
voidCMy11Dlg:
:
OnButton4()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
GT_ArcXYP(-0.65*2000,29.05*2000,25.8*2000,-1);
UpdateData();
GT_ArcXYP(-10.8*2000,-0.95*2000,85.1*2000,1);
UpdateData();
GT_ArcXYP(0*2000,0*2000,1.145*2000,-1);
UpdateData();
GT_LnXY(5.15*2000,-12*2000);
UpdateData();
GT_LnXY(-0.4*2000,-7.3*2000);
UpdateData();
GT_LnXY(-1.65*2000,-19.7*2000);
UpdateData();
GT_LnXY(-9.15*2000,-7.9*2000);
UpdateData();
GT_LnXY(-27.45*2000,-6.5*2000);
UpdateData();
GT_LnXY(-18.1*2000,-0.6*2000);
UpdateData();
GT_LnXY(-20.65*2000,1.1*2000);
UpdateData();
GT_LnXY(-12.95*2000,3.2*2000);
UpdateData();
GT_ArcXYP(-40.8*2000,-17.05*2000,23.35*2000,-1);
UpdateData();
GT_ArcXYP(-108.2*2000,-89.7*2000,92.7*2000,1);
UpdateData();
GT_ArcXYP(-112.6*2000,-93.9*2000,8.75*2000,-1);
UpdateData();
GT_ArcXYP(-108.45*2000,-97.9*2000,4.1*2000,-1);
UpdateData();
GT_ArcXYP(15.05*2000,-69.05*2000,84.4*2000,-1);
Updat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高平 开发 实验 报告