gtn系列運(yùn)動(dòng)控制器編程手冊(cè)之高級(jí)功能beta_第1頁(yè)
gtn系列運(yùn)動(dòng)控制器編程手冊(cè)之高級(jí)功能beta_第2頁(yè)
gtn系列運(yùn)動(dòng)控制器編程手冊(cè)之高級(jí)功能beta_第3頁(yè)
gtn系列運(yùn)動(dòng)控制器編程手冊(cè)之高級(jí)功能beta_第4頁(yè)
gtn系列運(yùn)動(dòng)控制器編程手冊(cè)之高級(jí)功能beta_第5頁(yè)
已閱讀5頁(yè),還剩73頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

們 地西座二樓W211室: 址:臺(tái)中市西屯區(qū)工業(yè)區(qū)三十二路86號(hào)3

址:九龍觀塘偉業(yè)街108號(hào)絲寶國(guó)際大廈10樓1008-09室 址20151130固高科技的是http://w 發(fā)函至:市高新技術(shù)產(chǎn)業(yè)園南區(qū)園 產(chǎn)學(xué)研西座二樓W211室:本編程手冊(cè)適用于具有C語(yǔ)言編程基礎(chǔ)或Windows環(huán)境下使用動(dòng)態(tài)庫(kù)的基礎(chǔ),且對(duì)固高運(yùn)前 第1章指令列 第2 PT模 例 第3 例 例 第6章索 索 2章2.1設(shè)置指定軸為PT模查詢PT模式指定FIFO的剩余空向PT模式指定FIFO增加數(shù)清除PT模式指定FIFO中的數(shù)據(jù)設(shè)置PT模式循環(huán)執(zhí)行的次查詢PT模式循環(huán)執(zhí)行的次啟動(dòng)PT設(shè)置PT模式的緩存區(qū)大3章3.1向Follow模式指定FIFO增加數(shù)切換Follow模式所使用的4.1設(shè)置指定軸為PVT模設(shè)置PVT模式循環(huán)次查詢PVT模式循環(huán)次向PVT模式指定數(shù)據(jù)表傳送數(shù)據(jù),采用PVT描述方式計(jì)算PVT模式Percent描述方式下各數(shù)據(jù)點(diǎn)的速計(jì)算PVT模式Continuous描述方式下各數(shù)據(jù)點(diǎn)的時(shí)選擇PVT模式數(shù)據(jù)啟動(dòng)PVT PT模 設(shè)置指定軸為PT模查詢PT模式指定FIFO的剩余空向PT模式指定FIFO增加數(shù)清除PT模式指定FIFO中的數(shù)據(jù)設(shè)置PT模式循環(huán)執(zhí)行的次查詢PT模式循環(huán)執(zhí)行的次啟動(dòng)PT設(shè)置PT模式的緩存區(qū)大圖2-1所示。圖2-1PT速度曲終點(diǎn)速度為v12P12v1T2P22T為v22P2v1;第345段依此類推。PTT(pulse認(rèn)識(shí)PTPT模式的FIFOPT_SEGMENT_EVEN表示勻速段,F(xiàn)IFO中各段的段內(nèi)速度保持不變,段內(nèi)速度=段內(nèi)位移/段內(nèi)時(shí)間。如圖2-2所示。

勻速 時(shí)2-2PT段內(nèi)時(shí)間計(jì)算得到,和上一段的終點(diǎn)速度無(wú)關(guān)。如圖停止 時(shí)2-3PTGTN_PtData(shortprofiledoublepos,longtimeshorttypeshortfifo),將數(shù)據(jù)FIFO中。profile指軸號(hào),postime分別為一段曲線的位置點(diǎn)和時(shí)間,type指數(shù)據(jù)段類型,fifo是指定的FIFO編號(hào)。如何設(shè)置PT如果軸的是周期性的,用戶可以只寫入一個(gè)周期的規(guī)劃數(shù)據(jù)段到FIFO中,然后設(shè)定循環(huán)次數(shù),即可實(shí)現(xiàn)周期性的PT。調(diào)用指令GTN_SetPtLoop即可。PT模型下,如何使用FIFOFIFOGTN_PtClearFIFOFIFO(動(dòng)態(tài)模式下,同時(shí)切換到另一個(gè)FIFOPT2FIFO中的數(shù)據(jù)都用完以后規(guī)劃停止。為了避免異常停止,必須在2FIFO中的數(shù)據(jù)都用完之前及時(shí)發(fā)送新的數(shù)據(jù)。調(diào)用GTN_PtSpace指令可以查詢剩余多少數(shù)據(jù)空間。為32段。GTN_PrfPt時(shí)不能修改FIFO的使用模式。 PT靜態(tài) 時(shí)間 #lude"conio.h"#lude"gts.h"#defineAXIS{shortsRtn,space;//打開控制sRtn=//指令返回值檢測(cè),請(qǐng)查閱例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軸設(shè)為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中增加數(shù)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中增加數(shù)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中增加數(shù)pos+=time+=sRtn=GTN_PtData(1,AXIS,pos,time);//啟動(dòng){//AXIS軸的狀sRtn=GTN_GetSts(1,AXIS,//AXIS軸的規(guī)劃位sRtn=GTN_GetPrfPos(1,AXIS,//AXIS軸的規(guī)劃速sRtn=GTN_GetPrfVel(1,AXIS,}//sRtn=GTN_AxisOff(1,AXIS);printf("\nGTN_AxisOff()=%d\n",sRtn);return} PT動(dòng)態(tài)0.016sFIFO中。由于數(shù)據(jù)段較多,啟動(dòng);當(dāng)其中一個(gè)FIFO中的數(shù)據(jù)遍歷完了,控制器將清空這個(gè)FIFO,此時(shí)查詢到有空間,就速度規(guī)劃如圖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//指令返回值檢測(cè),請(qǐng)查閱例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軸設(shè)為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{//啟動(dòng)commandhandler("GTN_PtStart",sRtn);start=1;}//AXIS軸的狀//AXIS軸的規(guī)劃位sRtn=GTN_GetPrfPos(1,AXIS,//AXIS軸的規(guī)劃速sRtn=GTN_GetPrfVel(1,AXIS,}{//AXIS軸的狀sRtn=GTN_GetSts(1,AXIS,//AXIS軸的規(guī)劃位sRtn=GTN_GetPrfPos(1,AXIS,//AXIS軸的規(guī)劃速sRtn=GTN_GetPrfVel(1,AXIS,}//sRtn=GTN_AxisOff(1,AXIS);printf("\nGTN_AxisOff()=%d\n",sRtn);return} 向Follow模式指定FIFO增加數(shù)切換Follow模式所使用的 跟隨的軸叫從軸。一對(duì)典型的主軸和從軸的規(guī)劃如圖3-1所示。y/

1

0 4000x 在主軸到1500pulse時(shí),從軸250((1500-1000)*1/2)pulse到達(dá)速度同步區(qū),即Follow模式就是針對(duì)這種應(yīng)用,給用戶提供了主軸和從軸的位置和速度規(guī)劃方式。用戶只需要FollowFollow模式中的數(shù)據(jù)段類型實(shí)現(xiàn)應(yīng)用中所需要的規(guī)劃以及如何管理FIFO,就可以輕松實(shí)現(xiàn)Follow。一般應(yīng)將從軸設(shè)定為Follow模式。GTN_SetFollowMaster(shortprofile,shortmasterIndex,shortmasterType,shortmasterItem)。profile為從軸軸號(hào),masterIndex為主軸軸號(hào)。所謂從軸啟動(dòng)跟隨條件,是描述什么情況下從軸開始啟動(dòng)。有兩種情況:第一,調(diào)用還要等待主軸穿越了設(shè)定位置以后才啟動(dòng)跟隨。用戶需調(diào)用指令GTN_SetFollowEvent來(lái)選擇使用哪種跟隨條件。如果從軸的跟隨是周期性的,用戶可以只寫入一個(gè)周期的規(guī)劃到FIFO中,然后設(shè)定循環(huán)次數(shù),即可實(shí)現(xiàn)周期性的Follow。調(diào)用指令GTN_SetFollowLoop即可。調(diào)用指令GTN_FollowData(shortprofile,longmasterSegment,doubleslaveSegment,shorttype=FOLLOW_SEGMENT_NORMAL,shortfifo)FIFO中。profile指從軸軸號(hào),masterSegmentslaveSegment分別指主軸和從軸應(yīng)同時(shí)走過(guò)的位移,type指從軸的數(shù)據(jù)段類型,fifo是指定的FIFO編號(hào)。FOLLOW_SEGMENT_NORMAL表示普通段,F(xiàn)IFO10,從第2每段的起點(diǎn)速度比率等于上一段的終點(diǎn)速度比率。FOLLOW_SEGMENT_EVEN表示恒速比率段,F(xiàn)IFO中各段的段內(nèi)速度比率保持不FOLLOW_SEGMENT_STOP0,起點(diǎn)速度比率FOLLOW_SEGMENT_CONTINUE表示連續(xù)段,F(xiàn)IFO中第一段的起點(diǎn)速度比率等于上個(gè)FIFO的終點(diǎn)速度比率,從第2每段的起點(diǎn)速度比率等于上一段的終點(diǎn)速度如何切換換。下面描述一個(gè)切換FIFO的典型案例,如圖3-2所示。速度比率 速度比率 時(shí) 速度比率曲線 時(shí) 時(shí) 時(shí) 如圖所示,黑色粗線為主軸規(guī)劃,紅色粗線為從軸規(guī)劃。從軸的規(guī)律需要從“速度比率1”變化到“3”,為了實(shí)現(xiàn)從軸速度的平滑過(guò)渡,增加了一個(gè)“速度比率曲度比率曲線2”和“速度比率曲線3”的合成。行的數(shù)據(jù)來(lái)自FIFO1GTN_FollowSwitchFIFO1中的數(shù)據(jù)全部運(yùn)行完后,自動(dòng)切換去運(yùn)行FIFO2中的數(shù)據(jù),并且將FIFO1全部清空。為了實(shí)現(xiàn)2為了實(shí)現(xiàn)2個(gè)FIFO之間的速度連續(xù),存入FIFO2的第一段數(shù)據(jù)的時(shí)候,調(diào)用在控制器運(yùn)行FIFO2GTN_FollowSpace查詢FIFO1是否被清空。如果已被清空,就將“速度比率曲線3”的數(shù)據(jù)存入FIFO1中。然后調(diào)用指令GTN_FollowSwitch,控制器會(huì)在FIFO2中的數(shù)據(jù)全部運(yùn)行完后,自動(dòng)切換去運(yùn)行FIFO1中的數(shù)據(jù),并且將FIFO2全部清空。3-1follow模式應(yīng)用長(zhǎng)度為:10000pulse,轉(zhuǎn)子旋轉(zhuǎn)一周為:8000pulse。如圖3-3所示。3-3Follow達(dá)10000pulse時(shí),從軸必須走完8000pulse。3-4 500060009000110001400015000 2曲線表示要求從軸上的切刀在物。以較低速度和主軸物體分離;當(dāng)切刀再次到臨接近被切物體時(shí),又要與主軸的速度同一個(gè)FIFO2的數(shù)據(jù)放在另外一個(gè)FIFO3-21第一段25個(gè)數(shù)據(jù)段:第一段為切刀從位置同步點(diǎn)離開的速度同步區(qū)段;第二段為切刀脫離速度同步區(qū)段;第三段為從軸恒速段;第四段為從軸往主軸速度變化的加速段;最后一3-3所示。以主軸規(guī)劃位置為參考,該數(shù)據(jù)段的起點(diǎn)為規(guī)劃位置5000pulse。3-32如設(shè)置的啟動(dòng)條件為 Follow Jog50pulse/msFollow模式,跟隨主軸的規(guī)劃位置。從軸啟動(dòng)的跟隨條件是:主軸走過(guò)50000pulse后,從軸啟動(dòng)跟隨。從軸的規(guī)律由3段組成,如表3-4所示,加速段跟隨,勻速跟隨,跟隨,類似一個(gè)梯形曲線。并且無(wú)限次循環(huán)此數(shù)據(jù)段。3-5FollowFIFO3-6Follow單FIFO模式從軸速度規(guī)劃所示。 3-5FollowFIFO3-6FollowFIFO#lude"conio.h"#lude"gts.h" #define {//打開控制sRtn=GTN_Open//指令返回值檢測(cè),請(qǐng)查閱例3-1commandhandler("GTN_OpensRtn);//復(fù)位控制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);//設(shè)置主軸參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中增加數(shù)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中增加數(shù)slavePos+=sRtn=GTN_FollowData(1,SLAVE,masterPos,slavePos);//sRtn=GTN_FollowSpace(1,SLAVE,&space);printf("GTN_FollowSpace()=%dspace=%d\n",sRtn,space);//向FIFO中增加數(shù)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模式,跟隨主軸的規(guī)劃位置。從軸啟動(dòng)的跟隨條件是:從軸在調(diào)用指令GTN_FollowStart后立即啟動(dòng)跟隨。從軸在時(shí)更換跟隨三個(gè)表所示。把表3-5中的數(shù)據(jù)寫入FIFO1中,把表3-6中的數(shù)據(jù)寫入FIFO2中,在過(guò)程中切換到FIFO2,同時(shí)在檢查并確認(rèn)FIFO1被控制器自動(dòng)清空,將表3-7中的數(shù)據(jù)寫入FIFO1中,并切換FIFO1的數(shù)據(jù)。這樣即可利用雙FIFO切換完成跟隨策略的更換。主軸速度規(guī)劃如圖3-7所示,從軸速度規(guī)劃如圖示。 3-6FollowFIFO3-7FollowFIFO3-7FollowFIFO3-8FollowFIFO#lude"conio.h"#lude"gts.h"1#define2#define1#define2#define3#define4{shortstage,pressKey;//打開控制sRtn=GTN_Open//指令返回值檢測(cè),請(qǐng)查閱例3-1commandhandler("GTN_OpensRtn);//復(fù)位控制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);//將主軸設(shè)為JogsRtn=GTN_PrfJog(1,MASTER);commandhandler("GTN_PrfJog",sRtn);//設(shè)置主軸參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);////將從軸設(shè)為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中增加數(shù)masterPos= =

//sRtn=GTN_FollowSpace(1,SLAVE,&space,0);printf("GTN_FollowSpace()=%dspace=%d\n",sRtn,space);//向FIFO1中增加數(shù)masterPos+= +=//sRtn=GTN_FollowSpace(1,SLAVE,&space,0);printf("GTN_FollowSpace()=%dspace=%d\n",sRtn,space);//向FIFO1中增加數(shù)masterPos+= +=//sRtn=GTN_SetFollowLoop(1,SLAVE,0);commandhandler("GTN_SetFollowLoop",sRtn);//sRtn=GTN_SetFollowEvent(1,SLAVE,FOLLOW_EVENT_START,1);commandhandler("GTN_SetFollowEvent",sRtn);//啟動(dòng)從軸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);//切換到當(dāng)前工作FIFO中的數(shù)據(jù)遍歷完以后才會(huì)切換FIFOsRtn=GTN_FollowSwitch(1,1<<(SLAVE-1));}}且切換運(yùn)行FIFO1中數(shù)據(jù)if(STAGE_TO_FIFO2==stage{FIFO1//FIFO1被清空,說(shuō)明已經(jīng)切換到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);////當(dāng)前工作FIFO遍歷完以后才會(huì)切換FIFOsRtnGTN_FollowSwitch(1,1<<(SLAVE-1));}}if(STAGE_TO_FIFO1==stage{FIFO2//FIFO2被清空,說(shuō)明已經(jīng)切換到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} 設(shè)置指定軸為PVT模設(shè)置PVT模式循環(huán)次查詢PVT模式循環(huán)次向PVT模式指定數(shù)據(jù)表傳送數(shù)據(jù),采用PVT描述方計(jì)算PVT模式Percent描述方式下各數(shù)據(jù)點(diǎn)的速式計(jì)算PVT模式Continuous描述方式下各數(shù)據(jù)點(diǎn)的時(shí)選擇PVT模式數(shù)據(jù)啟動(dòng)PVTPVT模式使用一系列數(shù)據(jù)點(diǎn)的“位置、速度、時(shí)間”參數(shù)來(lái)描述規(guī)律。位置、速度和時(shí)間滿pat3bt2ctvdp3at22btcat3bt2ctd 1113at22btc111 ct2dp 3at22btc 調(diào)用GTN_PvtTable、 plete、GTN_PvtTablePercent或GTN_PvtTableContinuous指令向數(shù)據(jù)表中傳遞數(shù)據(jù)。這些指令會(huì)刪除數(shù)據(jù)表中原先的數(shù)據(jù),因此調(diào)用GTN_PvtTableSelect指令選擇數(shù)據(jù)表??梢栽跔顟B(tài)下切換數(shù)據(jù)表,但是不會(huì)立即切遍歷完數(shù)據(jù)表以后,時(shí)間初始化為第一個(gè)數(shù)據(jù)點(diǎn)的時(shí)間,而不是0。4-2PVT時(shí)間位置速度1,002,5,3,15,4,20,0GTN_PrfPvt將軸切換到PVT執(zhí)行,到達(dá)P4以后返回到P1,速度曲線如圖4-1所示。 1000 3000400050006000700080004-1 PVT描述方式直接定義各數(shù)據(jù)點(diǎn)的“位置、速度、時(shí)間”。相鄰2個(gè)數(shù)據(jù)點(diǎn)之間,控制器使時(shí)間”參數(shù)以后,相應(yīng)的規(guī)律也就確定下來(lái)。例如表4-3所示的4組數(shù)據(jù)點(diǎn),采用PVT描述方 時(shí)間位置速度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描述方式規(guī)可以看出,PVT描述方式非常靈活。給定數(shù)據(jù)點(diǎn)的“位置、速度、時(shí)間”參數(shù),就能夠得到相應(yīng)2組數(shù)據(jù)點(diǎn)參數(shù)不合理,得到的速度曲線不夠平滑。時(shí)間位置速度10001,5,2,15,3,20,020001,5,52,15,53,20,0圖4-3不合理的PV描述方式規(guī)Complete描述方式定義各數(shù)據(jù)點(diǎn)的“位置、時(shí)間”,以及起點(diǎn)速度和終點(diǎn)速度。Complete方式4-5Complete描述方式,4-5Complete時(shí)間位置速度0001,5,2,15,3,20,0 (, 時(shí)間位置速度00025,1,50,1,25,2,00 10、50時(shí)的位置誤差。Percent描述方式定義各數(shù)據(jù)點(diǎn)的“位置、時(shí)間、百分比”,以及起點(diǎn)速度。Percent描述方式能夠精確定義加速段、勻速段、段的位移、速度和時(shí)間。Percent描述方式假設(shè)相鄰2個(gè)數(shù)據(jù)點(diǎn)2( pivi1 i iiti1t P1和P2P10P2和P3之間加速度因此數(shù)據(jù)點(diǎn)P3的百分比為2ta/(2ta+te)*100%。0時(shí),數(shù)據(jù)點(diǎn)P3P4P30時(shí),數(shù)據(jù)點(diǎn)P3P4 時(shí)間位置速度00 01,5,02,15,3,20,0圖4-8Percent描述方式下的規(guī)Continuous描述方式定義各數(shù)據(jù)點(diǎn)的“位置、速度、最大速度、加速度、度、百分比”。不用指定數(shù)據(jù)點(diǎn)的時(shí)間。控制器根據(jù)數(shù)據(jù)點(diǎn)參數(shù),自動(dòng)將相鄰2個(gè)數(shù)據(jù)點(diǎn)之間拆分為加速段、勻Pi+1之間的段所使用的度。數(shù)據(jù)點(diǎn)Pi的百分比是指從數(shù)據(jù)點(diǎn)Pi到數(shù)據(jù)點(diǎn)Pi+1之間的加 度10020,0020019,22021,020 不變;第二段速度增大,加速度減??;第三段速度不變,加速度為0;第四段速度減小,加速度增圖4-11PVT例程描述方式下的規(guī) 時(shí)間位置速度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);//復(fù)位控制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);////設(shè)置為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);{//數(shù)據(jù)表和時(shí)//規(guī)劃速sRtn=GTN_GetPrfVel(1,AXIS,//規(guī)劃位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);//復(fù)位控制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);////設(shè)置為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);{//數(shù)據(jù)表和時(shí)//規(guī)劃速sRtn=GTN_GetPrfVel(1,AXIS,//規(guī)劃位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 時(shí)間位置速度0001,5,02,15,3,20,4,15,05,5,6,004-11Percent時(shí)間位置速度0001,5,2,15,3,20,4,15,5,5,6,0Y5個(gè)數(shù)據(jù)點(diǎn),設(shè)置為循環(huán)模式。XP3Y1和表4-13所示。 時(shí)間位置(脈沖速度2,002,2,03,12,4,15,05,15,0 時(shí)間位置速度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);

//復(fù)位控制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軸設(shè)置為PVTsRtn=GTN_PrfPvt(1,AXIS_X);commandhandler("GTN_PrfPvt",sRtn);//將Y軸設(shè)置為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);//同時(shí)啟動(dòng)X軸和Y//由于Y軸的第1個(gè)數(shù)據(jù)點(diǎn)時(shí)間為//sRtn=GTN_PvtStart(1,mask);commandhandler("GTN_PvtStart",sRtn);{//數(shù)據(jù)表和時(shí)sRtn=GTN_PvtStatus(1,AXIS_X,&tableId[0],&time[0]);//規(guī)劃速sRtn=GTN_GetPrfVel(1,AXIS_X,&prfVel[0]);//規(guī)劃位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點(diǎn)到B點(diǎn),Y軸從C點(diǎn)到D點(diǎn)。要求X軸到達(dá)B點(diǎn)時(shí),Y軸同時(shí)到達(dá)D點(diǎn)。動(dòng),X軸和Y軸速度曲線如圖4-15所示。 #lude"stdafx.h"#lude"conio.h"#lude"gts.h"#define1#define2#def1#def2{//X軸的數(shù)據(jù)點(diǎn)參數(shù)doublepos_x[2030000};doublevel_x[2]={0,doublevelMax_x[2]={10,doubleacc_x[2]={0.01,doubledec_x[2]={0.01,0.01};//Y軸的數(shù)據(jù)點(diǎn)參數(shù)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);//復(fù)位控制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軸設(shè)置為PVTsRtn=GTN_PrfPvt(1,AXIS_X);commandhandler("GTN_PrfPvt",sRtn);//將Y軸設(shè)置為PVTsRtn=GTN_PrfPvt(1,AXIS_Y);commandhandler("GTN_PrfPvt",sRtn);//計(jì)算X軸時(shí)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]);//計(jì)算Y軸時(shí)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]-//發(fā)送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);//發(fā)送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);//同時(shí)啟動(dòng)X軸和Y//由于Y軸的第1個(gè)數(shù)據(jù)點(diǎn)時(shí)間為//mask=1<<(AXIS_X-1);sRtn=GTN_PvtStart(mask);commandhandler("GTN_PvtStart",sRtn);{//數(shù)據(jù)表和時(shí)sRtn=GTN_PvtStatus(1,AXIS_X,&tableId[0],&time[0]);//規(guī)劃速sRtn=GTN_GetPrfVel(1,AXIS_X,&prfVel[0]);//規(guī)劃位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前軸設(shè)置為Follow模式。 shortGTN_FollowData(shortcore,shortprofile,longmasterSegment,向Follow模式指定FIFO增加數(shù)據(jù)FOLLOW_SEGMENT_EVEN(該宏定義為1)勻速段。FOLLOW_SEGMENT_STOP(該宏定義為2)到0段。前軸設(shè)置為Follow模式。其他返回值:請(qǐng)參照《GTN系列控制器之基本功能》第3章指令返回值及 7654321087654321 shortGTN_FollowSpace(shortcore,shortprofile,short*pSpace,short若返回值為1:請(qǐng)檢查當(dāng)前軸是否為Follow其他返回值:請(qǐng)參照《GTN系列控制器之基本功能》第3章指令返回值及 shortGTN_FollowStart(shortcore,longmask,long當(dāng)core=1時(shí):765432108765432181615軸軸軸軸軸軸7654321087654321765432108765432181615軸軸軸軸軸軸前軸設(shè)置為Follow模式。檢查FIFO檢查mask其他返回值:請(qǐng)參照《GTN系列控制器之基本功能》第3章指令返回值及 76543217654321087654321切換Follow模式所使用的FIFOFIFO。765432108765432181615軸軸軸軸軸軸前軸設(shè)置為Follow模式。檢查目標(biāo)FIFO檢查mask其他返回值:請(qǐng)參照《GTN系列控制器之基本功能》第3章指令返回值及 shortGTN_GetFollowEvent(shortcore,shortprofile,short*pEvent,FollowFOLLOW_EVENT_START(1)GTN_FollowStart以后立1若返回值為1:請(qǐng)檢查當(dāng)前軸是否為Follow其他返回值:請(qǐng)參照《GTN系列控制器之基本功能》第3章指令返回值及 若返回值為1:請(qǐng)檢查當(dāng)前軸是否為Follow其他返回值:請(qǐng)參照《GTN系列控制器之基本功能》第3章指令返回值及 shortGTN_GetFollowMaster(shortcore,shortprofile,shortFollow對(duì)于GTN-SLAVE-600型端子板,取值范圍:[1,6]。=若返回值為1:請(qǐng)檢查當(dāng)前軸是否為Follow其他返回值:請(qǐng)參照《GTN系列控制器之基本功能》第3章指令返回值及 FollowFollow若返回值為1:請(qǐng)檢查當(dāng)前軸是否為Follow10查詢8當(dāng)前軸設(shè)置為PT 8PT當(dāng)前軸設(shè)置為PT模式。12shortGTN_GetPvtLoop(shortcore,shortprofile,long*pLoopCount,查詢PVT模式循環(huán)次數(shù)其他返回值:請(qǐng)參照《GTN系列控制器之基本功能》第3章指令返回值及13shortGTN_PrfFollow(shortcore,shortprofile,short其他返回值:請(qǐng)參照《GTN系列控制器之基本功能》第3章指令返回值 14shortGTN_PrfPt(shortcore,shortprofile,short設(shè)置指定軸為PT模式8指定FIFOPT_MODE_DYNAMIC(該宏定義為1)動(dòng)態(tài)模式。若返回值為1:若當(dāng)前軸在規(guī)劃其他返回值:請(qǐng)參照《GTN系列,請(qǐng)調(diào)用GT_Stop停止再調(diào)用該指令。3 PT靜態(tài)15設(shè)置指定軸為PVT模式16shortGTN_PtClear(shortcore,shortprofile,short清除PT模式指定FIFO中的數(shù)據(jù)。8動(dòng)態(tài)模式下,不能在PTGTN_PrfPt將當(dāng)前軸設(shè)置為PT模式。 PT靜態(tài)17shortGTN_PtData(shortcore,shortprofile,doublepos,longtime,shortshort向PT模式指定FIFO增加數(shù)據(jù)8PT_SEGMENT_EVEN(該宏定義為1)勻速段。PT_SEGMENT_STOP(該宏定義為2)到0段。PTGTN_PrfPt將當(dāng)前軸設(shè)置為PT模式。 PT靜態(tài)7654321076543210876543217654321087654321765432108765432181615軸軸軸軸軸軸shortGTN_PtSpace(shortcore,shortprofile,short*pSpace,short查詢PT模式指定FIFO的剩余空間8當(dāng)前軸設(shè)置為PT模式。 PT靜態(tài)19shortGTN_PtStart(shortcore,longmask,long啟動(dòng)PT8按位指示需要啟動(dòng)PT的軸號(hào)。當(dāng)bit位為1時(shí)表示啟動(dòng)對(duì)應(yīng)的軸。當(dāng)core=1時(shí):765432108765432181615軸軸軸軸軸軸按位指示所使用的FIFO0。當(dāng)core=1時(shí):其他返回值:

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論