版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
们 地西座二楼W211室: 址:台中市西屯區工業區三十二路86號3
址:九龍觀塘偉業街108號絲寶國際大廈10樓1008-09室 址20151130固高科技的是http://w 发函至:市高新技术产业园南区园 产学研西座二楼W211室:本编程手册适用于具有C语言编程基础或Windows环境下使用动态库的基础,且对固高运前 第1章指令列 第2 PT模 例 第3 例 例 第6章索 索 2章2.1设置指定轴为PT模查询PT模式指定FIFO的剩余空向PT模式指定FIFO增加数清除PT模式指定FIFO中的数据设置PT模式循环执行的次查询PT模式循环执行的次启动PT设置PT模式的缓存区大3章3.1向Follow模式指定FIFO增加数切换Follow模式所使用的4.1设置指定轴为PVT模设置PVT模式循环次查询PVT模式循环次向PVT模式指定数据表传送数据,采用PVT描述方式计算PVT模式Percent描述方式下各数据点的速计算PVT模式Continuous描述方式下各数据点的时选择PVT模式数据启动PVT PT模 设置指定轴为PT模查询PT模式指定FIFO的剩余空向PT模式指定FIFO增加数清除PT模式指定FIFO中的数据设置PT模式循环执行的次查询PT模式循环执行的次启动PT设置PT模式的缓存区大图2-1所示。图2-1PT速度曲终点速度为v12P12v1T2P22T为v22P2v1;第345段依此类推。PTT(pulse认识PTPT模式的FIFOPT_SEGMENT_EVEN表示匀速段,FIFO中各段的段内速度保持不变,段内速度=段内位移/段内时间。如图2-2所示。
匀速 时2-2PT段内时间计算得到,和上一段的终点速度无关。如图停止 时2-3PTGTN_PtData(shortprofiledoublepos,longtimeshorttypeshortfifo),将数据FIFO中。profile指轴号,postime分别为一段曲线的位置点和时间,type指数据段类型,fifo是指定的FIFO编号。如何设置PT如果轴的是周期性的,用户可以只写入一个周期的规划数据段到FIFO中,然后设定循环次数,即可实现周期性的PT。调用指令GTN_SetPtLoop即可。PT模型下,如何使用FIFOFIFOGTN_PtClearFIFOFIFO(动态模式下,同时切换到另一个FIFOPT2FIFO中的数据都用完以后规划停止。为了避免异常停止,必须在2FIFO中的数据都用完之前及时发送新的数据。调用GTN_PtSpace指令可以查询剩余多少数据空间。为32段。GTN_PrfPt时不能修改FIFO的使用模式。 PT静态 时间 #lude"conio.h"#lude"gts.h"#defineAXIS{shortsRtn,space;//打开控制sRtn=//指令返回值检测,请查阅例3-1commandhandler("GTN_OpensRtn);//sRtn=GTN_Reset(1);commandhandler("GTN_Reset",sRtn);//配置控制//注意:配置文件取消了各轴的和限位sRtn=GTN_LoadConfig(1,"test.cfg");commandhandler("GTN_LoadConfigsRtn);//清除各轴的和限sRtn=GTN_ClrSts(1,1,8);commandhandler("GTN_ClrSts",sRtn);//sRtn=GTN_AxisOn(1,AXIS);commandhandler("GTN_AxisOn",sRtn);//sRtn=GTN_ZeroPos(1,AXIS);commandhandler("GTN_ZeroPos",sRtn);//将AXIS轴设为PTsRtn=GTN_PrfPt(1,AXIS);commandhandler("GTN_PrfPt",sRtn);//清除AXIS轴的sRtn=GTN_PtClear(1,AXIS);commandhandler("GTN_PtClear",sRtn);//查询PT模式FIFOsRtn=GTN_PtSpace(1,AXIS,&space);printf("GTN_PtSpace()=%d\tspace=%d\n",sRtn,space);//向FIFO中增加数pos=time=sRtn=GTN_PtData(1,AXIS,pos,time);//查询PT模式FIFOsRtn=GTN_PtSpace(1,AXIS,&space);printf("GTN_PtSpace()=%d\tspace=%d\n",sRtn,space);//向FIFO中增加数pos+=time+=sRtn=GTN_PtData(1,AXIS,pos,time);//查询PT模式FIFOsRtn=GTN_PtSpace(1,AXIS,&space);printf("GTN_PtSpace()=%d\tspace=%d\n",sRtn,space);//向FIFO中增加数pos+=time+=sRtn=GTN_PtData(1,AXIS,pos,time);//启动{//AXIS轴的状sRtn=GTN_GetSts(1,AXIS,//AXIS轴的规划位sRtn=GTN_GetPrfPos(1,AXIS,//AXIS轴的规划速sRtn=GTN_GetPrfVel(1,AXIS,}//sRtn=GTN_AxisOff(1,AXIS);printf("\nGTN_AxisOff()=%d\n",sRtn);return} PT动态0.016sFIFO中。由于数据段较多,启动;当其中一个FIFO中的数据遍历完了,控制器将清空这个FIFO,此时查询到有空间,就速度规划如图2-5所示。 #lude"conio.h"#lude"math.h" lude#define1#define//1////#define2//#define{shortsRtn,space;doublepos,vel,velPre,time;doubleprfPos,prfVel;shortstart,loop;//打开控制sRtn=GTN_Open//指令返回值检测,请查阅例3-1commandhandler("GTN_OpensRtn);//sRtn=GTN_Reset//配置控制//注意:配置文件取消了各轴的和限位sRtn=GTN_LoadConfig(1,"test.cfg");commandhandler("GTN_LoadConfigsRtn);//清除各轴的和限sRtn=GTN_ClrSts(1,1,8);commandhandler("GTN_ClrSts",sRtn);//sRtn=GTN_AxisOn(1,AXIS);commandhandler("GTN_AxisOn",sRtn);//sRtn=GTN_ZeroPos(1,AXIS);commandhandler("GTN_ZeroPos",sRtn);//将AXIS轴设为PT//清空AXIS轴的sRtn=GTN_PtClear(1,AXIS);commandhandler("GTN_PtClear",sRtn);pos=0;vel=velPre=0;time=0;start=loop=1;{//查询PT模式FIFOsRtn=GTN_PtSpace(1,AXIS,&space);if(space>0){time+=//vel=//pos+=1000*(vel+velPre)*DELTA/2;velPre=vel;{//sRtn=GTN_PtData(1,AXIS,pos,(long)(time*1000));if(0!=sRtn){}}{
printf("\nGTN_PtData()=%d\n",sRtn);return//if(0!=sRtn{printf("\nGTN_PtData()=%d\n",sRtn);return}pos=time=loop*T;velPre=0;if(loop>LOOP{}}}elseif(0==start{//启动commandhandler("GTN_PtStart",sRtn);start=1;}//AXIS轴的状//AXIS轴的规划位sRtn=GTN_GetPrfPos(1,AXIS,//AXIS轴的规划速sRtn=GTN_GetPrfVel(1,AXIS,}{//AXIS轴的状sRtn=GTN_GetSts(1,AXIS,//AXIS轴的规划位sRtn=GTN_GetPrfPos(1,AXIS,//AXIS轴的规划速sRtn=GTN_GetPrfVel(1,AXIS,}//sRtn=GTN_AxisOff(1,AXIS);printf("\nGTN_AxisOff()=%d\n",sRtn);return} 向Follow模式指定FIFO增加数切换Follow模式所使用的 跟随的轴叫从轴。一对典型的主轴和从轴的规划如图3-1所示。y/
1
0 4000x 在主轴到1500pulse时,从轴250((1500-1000)*1/2)pulse到达速度同步区,即Follow模式就是针对这种应用,给用户提供了主轴和从轴的位置和速度规划方式。用户只需要FollowFollow模式中的数据段类型实现应用中所需要的规划以及如何管理FIFO,就可以轻松实现Follow。一般应将从轴设定为Follow模式。GTN_SetFollowMaster(shortprofile,shortmasterIndex,shortmasterType,shortmasterItem)。profile为从轴轴号,masterIndex为主轴轴号。所谓从轴启动跟随条件,是描述什么情况下从轴开始启动。有两种情况:第一,调用还要等待主轴穿越了设定位置以后才启动跟随。用户需调用指令GTN_SetFollowEvent来选择使用哪种跟随条件。如果从轴的跟随是周期性的,用户可以只写入一个周期的规划到FIFO中,然后设定循环次数,即可实现周期性的Follow。调用指令GTN_SetFollowLoop即可。调用指令GTN_FollowData(shortprofile,longmasterSegment,doubleslaveSegment,shorttype=FOLLOW_SEGMENT_NORMAL,shortfifo)FIFO中。profile指从轴轴号,masterSegmentslaveSegment分别指主轴和从轴应同时走过的位移,type指从轴的数据段类型,fifo是指定的FIFO编号。FOLLOW_SEGMENT_NORMAL表示普通段,FIFO10,从第2每段的起点速度比率等于上一段的终点速度比率。FOLLOW_SEGMENT_EVEN表示恒速比率段,FIFO中各段的段内速度比率保持不FOLLOW_SEGMENT_STOP0,起点速度比率FOLLOW_SEGMENT_CONTINUE表示连续段,FIFO中第一段的起点速度比率等于上个FIFO的终点速度比率,从第2每段的起点速度比率等于上一段的终点速度如何切换换。下面描述一个切换FIFO的典型案例,如图3-2所示。速度比率 速度比率 时 速度比率曲线 时 时 时 如图所示,黑色粗线为主轴规划,红色粗线为从轴规划。从轴的规律需要从“速度比率1”变化到“3”,为了实现从轴速度的平滑过渡,增加了一个“速度比率曲度比率曲线2”和“速度比率曲线3”的合成。行的数据来自FIFO1GTN_FollowSwitchFIFO1中的数据全部运行完后,自动切换去运行FIFO2中的数据,并且将FIFO1全部清空。为了实现2为了实现2个FIFO之间的速度连续,存入FIFO2的第一段数据的时候,调用在控制器运行FIFO2GTN_FollowSpace查询FIFO1是否被清空。如果已被清空,就将“速度比率曲线3”的数据存入FIFO1中。然后调用指令GTN_FollowSwitch,控制器会在FIFO2中的数据全部运行完后,自动切换去运行FIFO1中的数据,并且将FIFO2全部清空。3-1follow模式应用长度为:10000pulse,转子旋转一周为:8000pulse。如图3-3所示。3-3Follow达10000pulse时,从轴必须走完8000pulse。3-4 500060009000110001400015000 2曲线表示要求从轴上的切刀在物。以较低速度和主轴物体分离;当切刀再次到临接近被切物体时,又要与主轴的速度同一个FIFO2的数据放在另外一个FIFO3-21第一段25个数据段:第一段为切刀从位置同步点离开的速度同步区段;第二段为切刀脱离速度同步区段;第三段为从轴恒速段;第四段为从轴往主轴速度变化的加速段;最后一3-3所示。以主轴规划位置为参考,该数据段的起点为规划位置5000pulse。3-32如设置的启动条件为 Follow Jog50pulse/msFollow模式,跟随主轴的规划位置。从轴启动的跟随条件是:主轴走过50000pulse后,从轴启动跟随。从轴的规律由3段组成,如表3-4所示,加速段跟随,匀速跟随,跟随,类似一个梯形曲线。并且无限次循环此数据段。3-5FollowFIFO3-6Follow单FIFO模式从轴速度规划所示。 3-5FollowFIFO3-6FollowFIFO#lude"conio.h"#lude"gts.h" #define {//打开控制sRtn=GTN_Open//指令返回值检测,请查阅例3-1commandhandler("GTN_OpensRtn);//复位控制sRtn=GTN_Reset(1);commandhandler("GTN_Reset",sRtn);//配置控制//注意:配置文件test.cfg取消了各轴的和限位sRtn=GTN_LoadConfig(1,"test.cfg");commandhandler("GTN_LoadConfig",sRtn);//清除各轴的和限sRtn=GTN_ClrSts(1,1,8);commandhandler("GTN_ClrSts",sRtn);//sRtn=GTN_AxisOn(1,MASTER);commandhandler("GTN_AxisOn",sRtn);sRtn=GTN_AxisOn(1,SLAVE);commandhandler("GTN_AxisOn",sRtn);//sRtn=GTN_ZeroPos(1,MASTER);commandhandler("GTN_ZeroPos",sRtn);sRtn=GTN_ZeroPos(1,SLAVE);commandhandler("GTN_ZeroPos",sRtn);//sRtn=GTN_PrfJog(1,MASTER);commandhandler("GTN_PrfJog",sRtn);//设置主轴参sRtn=GTN_GetJogPrm(1,MASTER,&jog);jog.acc=1;sRtn=GTN_SetJogPrm(1,MASTER,&jog);commandhandler("GTN_SetJogPrm",sRtn);sRtn=GTN_SetVel(1,MASTER,50);////sRtn=GTN_PrfFollow(1,SLAVE);commandhandler("GTN_PrfFollow",sRtn);// commandhandler("GTN_FollowClear",sRtn);sRtn=GTN_SetFollowMaster(1,SLAVE,MASTER);commandhandler("GTN_SetFollowMaster",sRtn);//sRtn=GTN_FollowSpace(1,SLAVE,&space);printf("GTN_FollowSpace()=%dspace=%d\n",sRtn,space);//向FIFO中增加数masterPos=slavePos=sRtn=GTN_FollowData(1,SLAVE,masterPos,slavePos);commandhandler("GTN_FollowData",sRtn);//sRtn=GTN_FollowSpace(1,SLAVE,&space);printf("GTN_FollowSpace()=%dspace=%d\n",sRtn,space);//向FIFO中增加数slavePos+=sRtn=GTN_FollowData(1,SLAVE,masterPos,slavePos);//sRtn=GTN_FollowSpace(1,SLAVE,&space);printf("GTN_FollowSpace()=%dspace=%d\n",sRtn,space);//向FIFO中增加数masterPos+=slavePos+=sRtn=GTN_FollowData(1,SLAVE,masterPos,slavePos);commandhandler("GTN_FollowData",sRtn);//sRtn=GTN_SetFollowLoop(1,SLAVE,0);commandhandler("GTN_SetFollowLoop",sRtn);////FollowsRtn=GTN_FollowStart(1,1<<(SLAVE-1));commandhandler("GTN_FollowStart",sRtn);{//sRtn=GTN_GetPrfVel(1,1,prfVel,//sRtn=GTN_GetFollowLoop(SLAVE,&loop);}//sRtn=GTN_AxisOff(1,MASTER);printf("\nGTN_AxisOff()=%d,Axis:%d\n",sRtn,MASTER);sRtn=GTN_AxisOff(1,SLAVE);printf("\nGTN_AxisOff()=%d\n",sRtn,SLAVE);return} Jog50pulse/msFollow模式,跟随主轴的规划位置。从轴启动的跟随条件是:从轴在调用指令GTN_FollowStart后立即启动跟随。从轴在时更换跟随三个表所示。把表3-5中的数据写入FIFO1中,把表3-6中的数据写入FIFO2中,在过程中切换到FIFO2,同时在检查并确认FIFO1被控制器自动清空,将表3-7中的数据写入FIFO1中,并切换FIFO1的数据。这样即可利用双FIFO切换完成跟随策略的更换。主轴速度规划如图3-7所示,从轴速度规划如图示。 3-6FollowFIFO3-7FollowFIFO3-7FollowFIFO3-8FollowFIFO#lude"conio.h"#lude"gts.h"1#define2#define1#define2#define3#define4{shortstage,pressKey;//打开控制sRtn=GTN_Open//指令返回值检测,请查阅例3-1commandhandler("GTN_OpensRtn);//复位控制sRtn=GTN_Reset(1);commandhandler("GTN_Reset",sRtn);//配置控制//清除各轴的和限sRtn=GTN_ClrSts(1,1,8);commandhandler("GTN_ClrSts",sRtn);//sRtn=GTN_AxisOn(1,MASTER);commandhandler("GTN_AxisOn",sRtn);sRtn=GTN_AxisOn(1,SLAVE);commandhandler("GTN_AxisOn",sRtn);//sRtn=GTN_ZeroPos(1,MASTER);commandhandler("GTN_ZeroPos",sRtn);sRtn=GTN_ZeroPos(1,SLAVE);commandhandler("GTN_ZeroPos",sRtn);//将主轴设为JogsRtn=GTN_PrfJog(1,MASTER);commandhandler("GTN_PrfJog",sRtn);//设置主轴参sRtn=GTN_GetJogPrm(1,MASTER,&jog);commandhandler("GTN_GetJogPrm",sRtn);jog.acc=1;sRtn=GTN_SetJogPrm(1,MASTER,&jog);commandhandler("GTN_SetJogPrm",sRtn);sRtn=GTN_SetVel(1,MASTER,50);////将从轴设为FollowsRtn=GTN_PrfFollow(1,SLAVE);commandhandler("GTN_PrfFollow",sRtn);//清空从轴sRtn=GTN_FollowClear(1,SLAVE,0);commandhandler("GTN_FollowClear",sRtn);//清空从轴 commandhandler("GTN_FollowClear",sRtn);sRtn=GTN_SetFollowMaster(1,SLAVE,MASTER);commandhandler("GTN_SetFollowMaster",sRtn);//sRtn=GTN_FollowSpace(1,SLAVE,&space,0);printf("GTN_FollowSpace()=%dspace=%d\n",sRtn,space);//向FIFO1中增加数masterPos= =
//sRtn=GTN_FollowSpace(1,SLAVE,&space,0);printf("GTN_FollowSpace()=%dspace=%d\n",sRtn,space);//向FIFO1中增加数masterPos+= +=//sRtn=GTN_FollowSpace(1,SLAVE,&space,0);printf("GTN_FollowSpace()=%dspace=%d\n",sRtn,space);//向FIFO1中增加数masterPos+= +=//sRtn=GTN_SetFollowLoop(1,SLAVE,0);commandhandler("GTN_SetFollowLoop",sRtn);//sRtn=GTN_SetFollowEvent(1,SLAVE,FOLLOW_EVENT_START,1);commandhandler("GTN_SetFollowEvent",sRtn);//启动从轴sRtn=GTN_FollowStart(1,1<<(SLAVE-1));commandhandler("GTN_FollowStart",sRtn);stage=STAGE_FIFO1;pressKey={//{pressKey=1;}//if(STAGE_FIFO1==stage{if(1==pressKey{pressKey=stage=//向FIFO2sRtn=GTN_FollowClear(1,SLAVE,1);masterPos=20000; =sRtn=GTN_FollowData(1,SLAVE,masterPos,slavePos,FOLLOW_SEGMENT_CONTINUE,1);slavePos+=sRtn=GTN_FollowData(1,SLAVE,masterPos,slavePos,FOLLOW_SEGMENT_NORMAL,1);slavePos+=sRtn=GTN_FollowData(1,SLAVE,masterPos,slavePos,FOLLOW_SEGMENT_NORMAL,1);//切换到当前工作FIFO中的数据遍历完以后才会切换FIFOsRtn=GTN_FollowSwitch(1,1<<(SLAVE-1));}}且切换运行FIFO1中数据if(STAGE_TO_FIFO2==stage{FIFO1//FIFO1被清空,说明已经切换到FIFO2if(16==space){masterPos=20000; =sRtn=GTN_FollowData(1,SLAVE,masterPos,slavePos,FOLLOW_SEGMENT_CONTINUE,0);slavePos+=sRtn=GTN_FollowData(1,SLAVE,masterPos,slavePos,FOLLOW_SEGMENT_NORMAL,0);slavePos+=sRtn=GTN_FollowData(1,SLAVE,masterPos,slavePos,FOLLOW_SEGMENT_NORMAL,0);////当前工作FIFO遍历完以后才会切换FIFOsRtnGTN_FollowSwitch(1,1<<(SLAVE-1));}}if(STAGE_TO_FIFO1==stage{FIFO2//FIFO2被清空,说明已经切换到FIFO1if(16==space){stage=}}//sRtn=GTN_GetPrfVel(1,1,prfVel,8);if(STAGE_END==stage{if(1==pressKey{pressKey=0;}}}//sRtn=GTN_AxisOff(1,MASTER);printf("\nGTN_AxisOff()=%d,Axis:%d\n",sRtn,MASTER);sRtn=GTN_AxisOff(1,SLAVE);printf("\nGTN_AxisOff()=%d\n",sRtn,SLAVE);return} 设置指定轴为PVT模设置PVT模式循环次查询PVT模式循环次向PVT模式指定数据表传送数据,采用PVT描述方计算PVT模式Percent描述方式下各数据点的速式计算PVT模式Continuous描述方式下各数据点的时选择PVT模式数据启动PVTPVT模式使用一系列数据点的“位置、速度、时间”参数来描述规律。位置、速度和时间满pat3bt2ctvdp3at22btcat3bt2ctd 1113at22btc111 ct2dp 3at22btc 调用GTN_PvtTable、 plete、GTN_PvtTablePercent或GTN_PvtTableContinuous指令向数据表中传递数据。这些指令会删除数据表中原先的数据,因此调用GTN_PvtTableSelect指令选择数据表。可以在状态下切换数据表,但是不会立即切遍历完数据表以后,时间初始化为第一个数据点的时间,而不是0。4-2PVT时间位置速度1,002,5,3,15,4,20,0GTN_PrfPvt将轴切换到PVT执行,到达P4以后返回到P1,速度曲线如图4-1所示。 1000 3000400050006000700080004-1 PVT描述方式直接定义各数据点的“位置、速度、时间”。相邻2个数据点之间,控制器使时间”参数以后,相应的规律也就确定下来。例如表4-3所示的4组数据点,采用PVT描述方 时间位置速度10001,5,2,15,3,20,020001,5,92,15,93,20,030001,5,2,15,3,20,040001,2,18,3,20,0 图4-2合理的PVT描述方式规可以看出,PVT描述方式非常灵活。给定数据点的“位置、速度、时间”参数,就能够得到相应2组数据点参数不合理,得到的速度曲线不够平滑。时间位置速度10001,5,2,15,3,20,020001,5,52,15,53,20,0图4-3不合理的PV描述方式规Complete描述方式定义各数据点的“位置、时间”,以及起点速度和终点速度。Complete方式4-5Complete描述方式,4-5Complete时间位置速度0001,5,2,15,3,20,0 (, 时间位置速度00025,1,50,1,25,2,00 10、50时的位置误差。Percent描述方式定义各数据点的“位置、时间、百分比”,以及起点速度。Percent描述方式能够精确定义加速段、匀速段、段的位移、速度和时间。Percent描述方式假设相邻2个数据点2( pivi1 i iiti1t P1和P2P10P2和P3之间加速度因此数据点P3的百分比为2ta/(2ta+te)*100%。0时,数据点P3P4P30时,数据点P3P4 时间位置速度00 01,5,02,15,3,20,0图4-8Percent描述方式下的规Continuous描述方式定义各数据点的“位置、速度、最大速度、加速度、度、百分比”。不用指定数据点的时间。控制器根据数据点参数,自动将相邻2个数据点之间拆分为加速段、匀Pi+1之间的段所使用的度。数据点Pi的百分比是指从数据点Pi到数据点Pi+1之间的加 度10020,0020019,22021,020 不变;第二段速度增大,加速度减小;第三段速度不变,加速度为0;第四段速度减小,加速度增图4-11PVT例程描述方式下的规 时间位置速度0011,9,2,24,3,44,3,59,5,68,1例程4-1 PVT描述方式#lude"stdafx.h"#lude"conio.h"#lude"gts.h"#define #def {doublevel[6]={1,15.25,20,20,15.25,doubleprfVel,prfPos,t;//打开控制sRtn=GTN_Open();commandhandler("GTN_Open",sRtn);//复位控制sRtn=GTN_Reset(1);commandhandler("GTN_Reset",sRtn);//配置控制//注意:配置文件取消了各轴的和限位sRtn=GTN_LoadConfig(1,"test.cfg");commandhandler("GTN_LoadConfigsRtn);//清除各轴和限sRtn=GTN_ClrSts(1,1,8);commandhandler("GTN_ClrSts",sRtn);sRtn=GTN_AxisOn(1,AXIS);commandhandler("GTN_AxisOn",sRtn);////设置为PVTsRtn=GTN_PrfPvt(1,AXIS);commandhandler("GTN_PrfPvt",sRtn);//sRtn=GTN_PvtTable(1,TABLE,6,&time[0],&pos[0],&vel[0]);commandhandler("GTN_PvtTable",sRtn);//sRtn=GTN_PvtTableSelect(1,AXIS,TABLE);mask=1<<(AXIS-1);sRtn=GTN_PvtStart(1,mask);commandhandler("GTN_PvtStart",sRtn);{//数据表和时//规划速sRtn=GTN_GetPrfVel(1,AXIS,//规划位printf("%2d%10.0lf%10.2lf%10.1lf\r",tableId,t,prfVel,}//sRtn=GTN_AxisOff(1,AXIS);printf("\nGTN_AxisOff()=%d\n",sRtn);return} #lude#lude#lude"math.h"#lude"stdlib.h"#lude"gts.h"#define #def #def #define {{pPos[i]=}}{doublea[5],b[5],c[5];doubleprfVel,prfPos,t;doubleamplitude=40000;shorttable=TABLE1;
//打开控制sRtn=GTN_Open();commandhandler("GTN_Open",sRtn);//复位控制sRtn=GTN_Reset(1);commandhandler("GTN_Reset",sRtn);//配置控制//注意:配置文件取消了各轴的和限位sRtn=GTN_LoadConfig(1,"test.cfg");commandhandler("GTN_LoadConfigsRtn);//清除各轴和限sRtn=GTN_ClrSts(1,1,8);commandhandler("GTN_ClrSts",sRtn);sRtn=GTN_AxisOn(1,AXIS);commandhandler("GTN_AxisOn",sRtn);////设置为PVTsRtn=GTN_PrfPvt(1,AXIS);commandhandler("GTN_PrfPvt",sRtn);Calculate(amplitude,5,&time[0],&pos[0]);// plete",//sRtn=GTN_PvtTableSelect(1,AXIS,table);//sRtn=GTN_SetPvtLoop(1,AXIS,0);commandhandler("GTN_SetPvtLoop",sRtn);mask=1<<(AXIS-sRtn=GTN_PvtStart(1,mask);commandhandler("GTN_PvtStart",sRtn);{//数据表和时//规划速sRtn=GTN_GetPrfVel(1,AXIS,//规划位sRtn=GTN_GetPrfPos(1,AXIS,&prfPos);if(kbhit()){key=if('A'==toupper(key){amplitude*=}if('B'==toupper(key){amplitude*=}if(('A'==toupper(key))||('B'==toupper(key)){Calculate(amplitude,5,&time[0],&pos[0]);table=TABLE1+TABLE2-tableId;//sRtn= plete(1,table,5,&time[0],&pos[0],&a[0],&b[0],&c[0],0,0);if(0!=sRtn{ }//sRtn=GTN_PvtTableSelect(1,AXIS,table);if(0!=sRtn){}}if('Q'==toupper(key){mask=1<<(AXIS-GT_Stop(1,mask,0);}}printf("%2d%10.0lf%10.2lf%10.1lf\r",tableId,t,prfVel,}//sRtn=GTN_AxisOff(1,AXIS);printf("\nGTN_AxisOff()=%d\n",sRtn);return}Xv Yv
t t 时间位置速度0001,5,02,15,3,20,4,15,05,5,6,004-11Percent时间位置速度0001,5,2,15,3,20,4,15,5,5,6,0Y5个数据点,设置为循环模式。XP3Y1和表4-13所示。 时间位置(脉冲速度2,002,2,03,12,4,15,05,15,0 时间位置速度2,002,2,3,12,4,15,5,15, lude"stdafx.h" lude"conio.h"#define1#define2#def#define1#define2#def1#def2#defineLOOP_COUNT {doubletime_x[7]={0,1000,2000,3000,4000,5000,doublepos_x[7]={0,5000,15000,20000,15000,5000,doublepercent_x[7]={60,0,60,60,0,60,doubletime_y[5]={2000,2500,3500,4000,doublepos_y[5]={0,2500,12500,15000,doublepercent_y[5]={60,0,60,0,0};doubleprfVel[2],prfPos[2],time[2];//打开控制sRtn=GTN_Open();commandhandler("GTN_Open",sRtn);
//复位控制sRtn=GTN_Reset(1);commandhandler("GTN_Reset",sRtn);//配置控制//注意:配置文件取消了各轴的和限位sRtn=GTN_LoadConfig(1,"test.cfg");commandhandler("GTN_LoadConfigsRtn);//清除各轴和限sRtn=GTN_ClrSts(1,1,8);commandhandler("GTN_ClrSts",sRtn);sRtn=GTN_AxisOn(1,AXIS_X);commandhandler("GTN_AxisOn",sRtn);sRtn=GTN_AxisOn(1,AXIS_Y);commandhandler("GTN_AxisOn",sRtn);////将X轴设置为PVTsRtn=GTN_PrfPvt(1,AXIS_X);commandhandler("GTN_PrfPvt",sRtn);//将Y轴设置为PVTsRtn=GTN_PrfPvt(1,AXIS_Y);commandhandler("GTN_PrfPvt",sRtn);向X向YsRtn=GTN_PvtTableSelect(1,AXIS_X,TABLE_X);commandhandler("GTN_PvtTableSelect",sRtn);sRtn=GTN_PvtTableSelect(1,AXIS_Y,TABLE_Y);commandhandler("GTN_PvtTableSelect",sRtn);//sRtn=GTN_SetPvtLoop(1,AXIS_X,LOOP_COUNT);commandhandler("GTN_SetPvtLoop",sRtn);//sRtn=GTN_SetPvtLoop(1,AXIS_Y,2*LOOP_COUNT-1);commandhandler("GTN_SetPvtLoop",sRtn);//同时启动X轴和Y//由于Y轴的第1个数据点时间为//sRtn=GTN_PvtStart(1,mask);commandhandler("GTN_PvtStart",sRtn);{//数据表和时sRtn=GTN_PvtStatus(1,AXIS_X,&tableId[0],&time[0]);//规划速sRtn=GTN_GetPrfVel(1,AXIS_X,&prfVel[0]);//规划位sRtn=GTN_GetPrfPos(1,AXIS_X,&prfPos[0]);}//sRtn=GTN_AxisOff(1,AXIS_X);printf("\nGTN_AxisOff()=%d,Axis:%d\n",sRtn,AXIS_X);sRtn=GTN_AxisOff(1,AXIS_Y);printf("\nGTN_AxisOff()=%d,Axis:%d\n",sRtn,AXIS_Y);return}X轴从A点到B点,Y轴从C点到D点。要求X轴到达B点时,Y轴同时到达D点。动,X轴和Y轴速度曲线如图4-15所示。 #lude"stdafx.h"#lude"conio.h"#lude"gts.h"#define1#define2#def1#def2{//X轴的数据点参数doublepos_x[2030000};doublevel_x[2]={0,doublevelMax_x[2]={10,doubleacc_x[2]={0.01,doubledec_x[2]={0.01,0.01};//Y轴的数据点参数doublepos_y[2020000};doublevel_y[2]={0,doublevelMax_y[2]={10,doubleacc_y[2]={0.01,doubledec_y[2]={0.01,0.01};doubleprfVel[2],prfPos[2],time[2];//打开控制sRtn=GTN_Open();commandhandler("GTN_Open",sRtn);//复位控制sRtn=GTN_Reset(1);commandhandler("GTN_Reset",sRtn);//配置控制//注意:配置文件取消了各轴的和限位sRtn=GTN_LoadConfig(1,"test.cfg");commandhandler("GTN_LoadConfigsRtn);//清除各轴和限sRtn=GTN_ClrSts(1,1,8);commandhandler("GTN_ClrSts",sRtn);sRtn=GTN_AxisOn(1,AXIS_X);commandhandler("GTN_AxisOn",sRtn);sRtn=GTN_AxisOn(1,AXIS_Y);commandhandler("GTN_AxisOn",sRtn);////将X轴设置为PVTsRtn=GTN_PrfPvt(1,AXIS_X);commandhandler("GTN_PrfPvt",sRtn);//将Y轴设置为PVTsRtn=GTN_PrfPvt(1,AXIS_Y);commandhandler("GTN_PrfPvt",sRtn);//计算X轴时sRtn=GTN_PvtContinuousCalculate(1,2,&pos_x[0],&vel_x[0],&percent_x[0],&velMax_x[0],&acc_x[0],&dec_x[0],&time_x[0]);//计算Y轴时sRtn=GTN_PvtContinuousCalculate(1,2,&pos_y[0],&vel_y[0],&percent_y[0],&velMax_y[0],&acc_y[0],&dec_y[0],&time_y[0]);//{}{}
timeBegin_x=time_y[1]-time_x[1];timeBegin_y=0;timeBegin_x=timeBegin_y=time_x[1]-//发送XsRtn=GTN_PvtTableContinuous(1,TABLE_X,2,&pos_x[0],&vel_x[0],&velMax_x[0],&acc_x[0],&dec_x[0],timeBegin_x);commandhandler("GTN_PvtTableContinuous",sRtn);//发送YsRtn=GTN_PvtTableContinuous(1,TABLE_Y,2,&pos_y[0],&vel_y[0],&velMax_y[0],&acc_y[0],&dec_y[0],timeBegin_y);commandhandler("GTN_PvtTableContinuous",sRtn);sRtn=GTN_PvtTableSelect(1,AXIS_X,TABLE_X);commandhandler("GTN_PvtTableSelect",sRtn);sRtn=GTN_PvtTableSelect(1,AXIS_Y,TABLE_Y);commandhandler("GTN_PvtTableSelect",sRtn);//同时启动X轴和Y//由于Y轴的第1个数据点时间为//mask=1<<(AXIS_X-1);sRtn=GTN_PvtStart(mask);commandhandler("GTN_PvtStart",sRtn);{//数据表和时sRtn=GTN_PvtStatus(1,AXIS_X,&tableId[0],&time[0]);//规划速sRtn=GTN_GetPrfVel(1,AXIS_X,&prfVel[0]);//规划位sRtn=GTN_GetPrfPos(1,AXIS_X,&prfPos[0]);}//sRtn=GTN_AxisOff(1,AXIS_X);printf("\nGTN_AxisOff()=%d,Axis:%d\n",sRtn,AXIS_X);sRtn=GTN_AxisOff(1,AXIS_Y);printf("\nGTN_AxisOff()=%d,Axis:%d\n",sRtn,AXIS_Y);return}如 shortGTN_FollowClear(shortcore,shortprofile,short前轴设置为Follow模式。 shortGTN_FollowData(shortcore,shortprofile,longmasterSegment,向Follow模式指定FIFO增加数据FOLLOW_SEGMENT_EVEN(该宏定义为1)匀速段。FOLLOW_SEGMENT_STOP(该宏定义为2)到0段。前轴设置为Follow模式。其他返回值:请参照《GTN系列控制器之基本功能》第3章指令返回值及 7654321087654321 shortGTN_FollowSpace(shortcore,shortprofile,short*pSpace,short若返回值为1:请检查当前轴是否为Follow其他返回值:请参照《GTN系列控制器之基本功能》第3章指令返回值及 shortGTN_FollowStart(shortcore,longmask,long当core=1时:765432108765432181615轴轴轴轴轴轴7654321087654321765432108765432181615轴轴轴轴轴轴前轴设置为Follow模式。检查FIFO检查mask其他返回值:请参照《GTN系列控制器之基本功能》第3章指令返回值及 76543217654321087654321切换Follow模式所使用的FIFOFIFO。765432108765432181615轴轴轴轴轴轴前轴设置为Follow模式。检查目标FIFO检查mask其他返回值:请参照《GTN系列控制器之基本功能》第3章指令返回值及 shortGTN_GetFollowEvent(shortcore,shortprofile,short*pEvent,FollowFOLLOW_EVENT_START(1)GTN_FollowStart以后立1若返回值为1:请检查当前轴是否为Follow其他返回值:请参照《GTN系列控制器之基本功能》第3章指令返回值及 若返回值为1:请检查当前轴是否为Follow其他返回值:请参照《GTN系列控制器之基本功能》第3章指令返回值及 shortGTN_GetFollowMaster(shortcore,shortprofile,shortFollow对于GTN-SLAVE-600型端子板,取值范围:[1,6]。=若返回值为1:请检查当前轴是否为Follow其他返回值:请参照《GTN系列控制器之基本功能》第3章指令返回值及 FollowFollow若返回值为1:请检查当前轴是否为Follow10查询8当前轴设置为PT 8PT当前轴设置为PT模式。12shortGTN_GetPvtLoop(shortcore,shortprofile,long*pLoopCount,查询PVT模式循环次数其他返回值:请参照《GTN系列控制器之基本功能》第3章指令返回值及13shortGTN_PrfFollow(shortcore,shortprofile,short其他返回值:请参照《GTN系列控制器之基本功能》第3章指令返回值 14shortGTN_PrfPt(shortcore,shortprofile,short设置指定轴为PT模式8指定FIFOPT_MODE_DYNAMIC(该宏定义为1)动态模式。若返回值为1:若当前轴在规划其他返回值:请参照《GTN系列,请调用GT_Stop停止再调用该指令。3 PT静态15设置指定轴为PVT模式16shortGTN_PtClear(shortcore,shortprofile,short清除PT模式指定FIFO中的数据。8动态模式下,不能在PTGTN_PrfPt将当前轴设置为PT模式。 PT静态17shortGTN_PtData(shortcore,shortprofile,doublepos,longtime,shortshort向PT模式指定FIFO增加数据8PT_SEGMENT_EVEN(该宏定义为1)匀速段。PT_SEGMENT_STOP(该宏定义为2)到0段。PTGTN_PrfPt将当前轴设置为PT模式。 PT静态7654321076543210876543217654321087654321765432108765432181615轴轴轴轴轴轴shortGTN_PtSpace(shortcore,shortprofile,short*pSpace,short查询PT模式指定FIFO的剩余空间8当前轴设置为PT模式。 PT静态19shortGTN_PtStart(shortcore,longmask,long启动PT8按位指示需要启动PT的轴号。当bit位为1时表示启动对应的轴。当core=1时:765432108765432181615轴轴轴轴轴轴按位指示所使用的FIFO0。当core=1时:其他返回值:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GA/T 2343-2025法庭科学电子数据保全文件技术要求
- 第六章 数字化营销渠道构建
- 2026年法律投资API 对接合同
- 2026年交通合作加盟合作合同
- 村屯清洁工作制度汇编
- 预检分诊导医工作制度
- 领导干部下派工作制度
- 食品厂检验室工作制度
- 麻城零工驿站工作制度
- 陇南地区两当县2025-2026学年第二学期五年级语文第八单元测试卷(部编版含答案)
- 2025年浙江省宁波市海曙区统编版六年级下册小升初考试语文试卷
- 2026年乌海职业技术学院单招职业技能考试题库附答案详解(研优卷)
- 2026年春季苏教版(2024)三年级下册数学教学计划附教学进度表
- 网络安全普法课件
- 2025河北石家庄市某大型国有企业招聘3人(公共基础知识)综合能力测试题附答案
- 2025年城市卫生公共设施提高项目可行性研究报告
- 孕产妇多学科协作沟通方案
- 病人走失的案例分析与经验教训
- 股是股非蒋文辉课件
- 隧道掘进机维护方案
- 江苏省常州外国语学校2024-2025学年八年级下学期期中物理试卷(含解析)
评论
0/150
提交评论