電子凸輪
目錄
在利用構(gòu)造的凸輪曲線(xiàn)來(lái)模擬機(jī)械凸輪,以達(dá)到機(jī)械凸輪系統(tǒng)相同的凸輪軸與主軸之間相對(duì)運(yùn)動(dòng)的軟件系統(tǒng)。
① 電子凸輪屬于多軸同步運(yùn)動(dòng)(速度位置同步),這種運(yùn)動(dòng)(也叫Follow運(yùn)動(dòng))是基于主軸和一個(gè)或者多個(gè)從軸系統(tǒng)。主軸可以是物理軸,也可以是虛擬軸(一種算法, 沒(méi)有實(shí)際的輸出);
② 電子凸輪是直接將軌跡點(diǎn)輸入到驅(qū)動(dòng)器內(nèi),通過(guò)設(shè)定的計(jì)算方式進(jìn)行伺服控制,達(dá)到和機(jī)械凸輪相同的加工目的,實(shí)現(xiàn)一種周期性的往復(fù)運(yùn)動(dòng);
③ 啟動(dòng)位置和終點(diǎn)位置是否一致可以將電子凸輪曲線(xiàn)分為閉式曲線(xiàn)和開(kāi)式曲線(xiàn),如圖1.1.1;
圖1.1.1 電子凸輪運(yùn)動(dòng)曲線(xiàn)
① 電子凸輪靈活,軌跡易于改動(dòng),方便根據(jù)需求加工軌跡,不需要繁瑣更改機(jī)械凸輪;
② 當(dāng)要改變凸輪的運(yùn)動(dòng)軌跡時(shí),加工機(jī)械凸輪的成本較高,難度較大,而電子凸輪只需簡(jiǎn)單的設(shè)定一些軌跡參數(shù)即可,不需要產(chǎn)生新的成本;
③ 機(jī)械凸輪會(huì)磨損,通常是機(jī)床噪音的最大來(lái)源,而用電子凸輪可減輕運(yùn)行阻力及噪音,減輕機(jī)身重量,提高效率;
④ 每組 Follow 運(yùn)動(dòng)關(guān)聯(lián)的兩個(gè)軸,被跟隨軸稱(chēng)為主軸,跟隨軸稱(chēng)為從軸。多個(gè)從軸可以跟隨同一個(gè)主軸,從軸又可以作為其他軸的主軸
⑤ 從軸可以跟隨主軸的規(guī)劃位置或者實(shí)際位置,從軸也可以直接跟隨外部的編碼器輸入從軸可以指跟隨主軸的某個(gè)運(yùn)動(dòng)方向(正向或者負(fù)向)或者雙向跟隨;
⑥ 與從軸之間的同步,通過(guò)用戶(hù)設(shè)定的多個(gè)數(shù)據(jù)段自動(dòng)規(guī)劃,每個(gè)數(shù)據(jù)段包含主軸位移,從軸位移,速度規(guī)劃類(lèi)型三個(gè)參數(shù),即主軸在完成設(shè)定位移的過(guò)程中,從軸也自動(dòng)完成設(shè)定位移,這個(gè)過(guò)程中的速度曲線(xiàn)由速度規(guī)劃類(lèi)型決定;
⑦ 每個(gè)從軸有兩個(gè) FIFO 用于緩存同步數(shù)據(jù)段,每個(gè) FIFO 最多可以存儲(chǔ) 32 個(gè)數(shù)據(jù)段,通過(guò)手動(dòng)切換,其中一個(gè) FIFO 的數(shù)據(jù)用完后會(huì)自動(dòng)切換到另外一個(gè) FIFO;
⑧ 通過(guò)配置 FIFO 的循環(huán)次數(shù),可實(shí)現(xiàn)從軸周期性的跟隨;
⑨ 同步的啟動(dòng)可以配置為立即啟動(dòng),也可以配置為主軸穿越某個(gè)位置時(shí)自動(dòng)啟動(dòng);
略
通過(guò)GCS.exe工具對(duì)電子凸輪的使用配置進(jìn)行詳細(xì)說(shuō)明。GCS.exe工具連接控制器,點(diǎn)擊功能->Follow(電子凸輪)運(yùn)動(dòng),打開(kāi)測(cè)試軸1,測(cè)試軸2,如圖2.2.1電子凸輪測(cè)試。
圖2.2.1 電子凸輪測(cè)試
從圖2.1的Follow(電子凸輪)運(yùn)動(dòng)工具中測(cè)試,添加主軸位移、從軸位移和跟隨類(lèi)型,添加位置點(diǎn)沒(méi)有限制;參數(shù)設(shè)置列表中,從軸通道、跟隨主軸、主軸類(lèi)型、跟隨方向和循環(huán)次數(shù)根據(jù)需求選擇即可;對(duì)于Fifo序號(hào),用來(lái)設(shè)置從軸緩存同步數(shù)據(jù)段的;啟動(dòng)模式如果選擇主軸穿越啟動(dòng),當(dāng)主軸達(dá)到設(shè)定的穿越位置從軸方可響應(yīng);配置完成執(zhí)行1.配置,2.壓入數(shù)據(jù)和3.啟動(dòng);值得注意的是,啟動(dòng)前,需要把軸位置,狀態(tài)清零。
以下為電子凸輪常用功能函數(shù)的詳細(xì)說(shuō)明。
電子凸輪
函數(shù)原形 | 函數(shù)說(shuō)明 |
設(shè)置FOLLOW跟隨方向 | |
獲取FOLLOW跟隨方向 | |
設(shè)置FOLLOW主軸參數(shù) | |
獲取FOLLOW主軸參數(shù) | |
設(shè)置FOLLOW的循環(huán)執(zhí)行次數(shù) | |
獲取FOLLOW的循環(huán)執(zhí)行次數(shù) | |
設(shè)置FOLLOW的的啟動(dòng)事件 | |
獲取FOLLOW的啟動(dòng)事件 | |
獲取FOLLOW的fifo剩余空間 | |
設(shè)置FOLLOW的數(shù)據(jù) | |
清除FOLLOW對(duì)應(yīng)fifo號(hào)的數(shù)據(jù) | |
啟動(dòng)Follow運(yùn)動(dòng) | |
切換Follow運(yùn)動(dòng)的fifo號(hào) |
(1)設(shè)置單軸運(yùn)動(dòng)速度曲線(xiàn)類(lèi)型
NMC_MtSetPrfMode( HAND axisHandle, short mode );
參數(shù) | 輸入/輸出 | 描述 |
axisHandle | 輸入 | 軸句柄 |
mode | 輸入 | 各軸的規(guī)劃模式 #define MT_NONE_PRF_MODE (-1) // 無(wú)效 #define MT_PTP_PRF_MODE (0) // 梯形規(guī)劃 #define MT_JOG_PRF_MODE (1) // 連續(xù)速度模式 #define MT_CRD_PRF_MODE (3) // 坐標(biāo)系 #define MT_GANTRY_MODE (4) // 龍門(mén)跟隨模式 #define MT_PT_PRF_MODE (5) // PT模式 #define MT_MULTI_LINE_MODE (6) // 多軸直線(xiàn)插補(bǔ) #define MT_GEAR_PRF_MODE (7) // 電子齒輪模式 #define MT_FOLLOW_PRF_MODE (8) // Follow跟隨模式 注意:坐標(biāo)系模式不需要通過(guò)NMC_MtSetPrfMode設(shè)置 |
(2)單軸JOG運(yùn)動(dòng)
NMC_MtMoveJog(HAND axisHandle, double acc, double dec, double maxVel, short smoothCoef, short clrStsFlag);
參數(shù) | 輸入/輸出 | 描述 |
axisHandle | 輸入 | 軸句柄 |
acc | 輸入 | 加速度,脈沖/ms^2 |
dec | 輸入 | 減速度,脈沖/ms^2 |
maxVel | 輸入 | 最大速度,脈沖/ms |
smoothCoef | 輸入 | 平滑系數(shù),[0, 199], 單位ms |
clrStsFlag | 輸入 | 是否運(yùn)動(dòng)前先清除軸狀態(tài),0:不清除,1:清除 |
(3)設(shè)置FOLLOW跟隨方向
NMC_MtFollowSetDir(HAND axisHandle, short dir);
參數(shù) | 輸入/輸出 | 描述 |
axisHandle | 輸入 | 從軸句柄 |
dir | 輸入 | =0:雙向跟隨 <0:< span="">負(fù)向跟隨 >0:正向跟隨 |
(4)獲取FOLLOW跟隨方向
NMC_MtFollowGetDir(HAND axisHandle, short *pDir);
參數(shù) | 輸入/輸出 | 描述 |
axisHandle | 輸入 | 從軸句柄 |
pDir | 輸出 | =0:雙向跟隨 <0:< span="">負(fù)向跟隨 >0:正向跟隨 |
(5)設(shè)置FOLLOW主軸參數(shù)
NMC_MtFollowSetMaster(HAND axisHandle, short masterNo, short masterType);
參數(shù) | 輸入/輸出 | 描述 |
axisHandle | 輸入 | 從軸句柄 |
masterNo | 輸入 | 主軸序列號(hào)(0~N) |
masterType | 輸入 | 主軸類(lèi)型 #define PROFILE_FOLLOW_MASTER_NONE (0) // 0:無(wú)效 #define PROFILE_FOLLOW_MASTER_AXIS_PRF (1) // 1:AXIS規(guī)劃值 #define PROFILE_FOLLOW_MASTER_AXIS_ENC (2) // 2:AXIS反饋值 #define PROFILE_FOLLOW_MASTER_ENC (3) // 3:編碼器值 |
(6)獲取FOLLOW主軸參數(shù)
NMC_MtFollowGetMaster(HAND axisHandle, short *pMasterNo, short *pMasterType);
參數(shù) | 輸入/輸出 | 描述 |
axisHandle | 輸入 | 從軸句柄 |
pMasterNo | 輸出 | 主軸序列號(hào)(0~N) |
pMasterType | 輸出 | 主軸類(lèi)型,見(jiàn)宏定義 |
(7)設(shè)置FOLLOW的循環(huán)執(zhí)行次數(shù)
NMC_MtFollowSetLoopCount(HAND axisHandle, long loopCnt);
參數(shù) | 輸入/輸出 | 描述 |
axisHandle | 輸入 | 從軸句柄 |
loopCnt | 輸入 | 循環(huán)次數(shù) |
(8)獲取FOLLOW的循環(huán)執(zhí)行次數(shù)
NMC_MtFollowGetLoopCount(HAND axisHandle, long *pLoopCnt);
參數(shù) | 輸入/輸出 | 描述 |
axisHandle | 輸入 | 從軸句柄 |
ploopCnt | 輸出 | 循環(huán)次數(shù) |
(9)設(shè)置FOLLOW的的啟動(dòng)事件
NMC_MtFollowSetEvent(HAND axisHandle, short eventType, short masterDir, long pos);
參數(shù) | 輸入/輸出 | 描述 |
axisHandle | 輸入 | 從軸句柄 |
eventType | 輸入 | 1:表示調(diào)用啟動(dòng)指令以后立即啟動(dòng) 2:表示主軸穿越設(shè)定位置以后啟動(dòng)跟隨 |
masterDir | 輸入 | 穿越啟動(dòng)時(shí),主軸的運(yùn)動(dòng)方向:1主軸正向運(yùn)動(dòng),-1 主軸負(fù)向運(yùn)動(dòng) |
pos | 輸入 | 穿越位置 |
(10)獲取FOLLOW的的啟動(dòng)事件
NMC_MtFollowGetEvent(HAND axisHandle, short *pEventType, short *pMasterDir, long *pPos);
參數(shù) | 輸入/輸出 | 描述 |
axisHandle | 輸入 | 從軸句柄 |
pEventType | 輸出 | 1 表示調(diào)用啟動(dòng)指令以后 立即啟動(dòng) 2表示主軸穿越設(shè)定位置以后啟動(dòng)跟隨 |
pMasterDir | 輸出 | 穿越啟動(dòng)時(shí),主軸的運(yùn)動(dòng)方向:1 主軸正向運(yùn)動(dòng),-1 主軸負(fù)向運(yùn)動(dòng) |
pPos | 輸出 | 穿越位置 |
(11)獲取FOLLOW的fifo剩余空間
NMC_MtFollowGetSpace(HAND axisHandle, short *pSpace, short fifoNo);
參數(shù) | 輸入/輸出 | 描述 |
axisHandle | 輸入 | 從軸句柄 |
pSpace | 輸出 | 空間大小 |
fifoNo | 輸入 | fifo號(hào),0或1 |
(12)設(shè)置FOLLOW的數(shù)據(jù)
NMC_MtFollowPushData(HAND axisHandle, long masterPos, double slavePos, short type, short fifoNo;
參數(shù) | 輸入/輸出 | 描述 |
axisHandle | 輸入 | 從軸句柄 |
masterPos | 輸入 | 主軸位移 |
slavePos | 輸入 | 從軸位移 |
type | 輸入 | 數(shù)據(jù)段類(lèi)型:0普通段,默認(rèn);1勻速段;2 減速到 0 段;3保持 FIFO 之間速度連續(xù) |
fifoNo | 輸入 | fifo號(hào),0或1 |
(13)清除FOLLOW對(duì)應(yīng)fifo號(hào)的數(shù)據(jù)
NMC_MtFollowClear(HAND axisHandle, short fifoNo);
參數(shù) | 輸入/輸出 | 描述 |
axisHandle | 輸入 | 從軸句柄 |
fifoNo | 輸入 | fifo號(hào),0或1 |
(14)啟動(dòng)Follow運(yùn)動(dòng)
NMC_MtFollowStart(HAND axisHandle, short syncAxCnts, short *pSyncAxArray);
參數(shù) | 輸入/輸出 | 描述 |
axisHandle | 輸入 | 從軸句柄 |
syncAxCnts | 輸入 | 不包括axisHandle 的其他同步啟動(dòng)軸數(shù)量 |
pSyncAxArray | 輸入 | 其他同步啟動(dòng)軸的序號(hào):0~N |
(15)切換Follow運(yùn)動(dòng)的fifo號(hào)
NMC_MtFollowSwitch(HAND axisHandle, short syncAxCnts, short *pSyncAxArray);
參數(shù) | 輸入/輸出 | 描述 |
axisHandle | 輸入 | 從軸句柄 |
syncAxCnts | 輸入 | 不包括axisHandle 的其他同步進(jìn)行fifo切換的軸數(shù)量 |
pSyncAxArray | 輸入 | 其他同步進(jìn)行fifo切換的軸的序號(hào):0~N |
該案例主軸為 Jog 模式,速度為 50pulse/ms,從軸為 Follow 模式,跟隨主軸的規(guī)劃位置。從 軸啟動(dòng)的跟隨條件是:主軸走過(guò) 50000pulse 后,從軸啟動(dòng)跟隨。從軸的運(yùn)動(dòng)規(guī)律由 3 段組成,如下表所示,加速段跟隨,勻速跟隨,減速跟隨,類(lèi)似一個(gè)梯形曲線(xiàn)。并且無(wú)限次循環(huán)此數(shù)據(jù)段。
第一段 | 第二段 | 第三段 | |
主軸位置 | 20000 | 20000 | 20000 |
從軸位置 | 10000 | 20000 | 10000 |
/*********此處省略控制器初始化部分***********/
//函數(shù)返回值錯(cuò)誤 #define RTN_ERR {if(rtn != RTN_CMD_SUCCESS){ return;}}
short rtn = 0; //啟動(dòng)主軸JOG運(yùn)動(dòng), 速度脈沖/ms, 加、減速度為脈沖/ms^2 rtn = NMC_MtMoveJog(axishandle[0], 1, 1, 50, 0, 1); RTN_ERR //設(shè)置軸二的運(yùn)動(dòng)模式為FOllow模式 rtn = NMC_MtSetPrfMode(axishandle[1], MT_FOLLOW_PRF_MODE); RTN_ERR //清空從軸FIFO數(shù)據(jù) rtn = NMC_MtFollowClear(axishandle[1], 0); RTN_ERR //設(shè)置跟隨主軸的規(guī)劃位置 rtn = NMC_MtFollowSetMaster(axishandle[1], 0, PROFILE_FOLLOW_MASTER_AXIS_PRF); RTN_ERR //設(shè)置跟隨數(shù)據(jù) double masterpos = 20000; double slavepos = 10000; rtn = NMC_MtFollowPushData(axishandle[1], masterpos, slavepos, 0, 0); RTN_ERR masterpos += 20000; slavepos += 20000; rtn = NMC_MtFollowPushData(axishandle[1], masterpos, slavepos, 0, 0); RTN_ERR masterpos += 20000; slavepos += 10000; rtn = NMC_MtFollowPushData(axishandle[1], masterpos, slavepos, 0, 0); RTN_ERR //設(shè)置為無(wú)限循環(huán) rtn = NMC_MtFollowSetLoopCount(axishandle[1], 0); RTN_ERR //設(shè)置跟隨條件, 主軸正向運(yùn)動(dòng)到位置時(shí)啟動(dòng) rtn = NMC_MtFollowSetEvent(axishandle[1], 2, 1, 50000); RTN_ERR //啟動(dòng)Follow運(yùn)動(dòng) rtn = NMC_MtFollowStart(axishandle[1], 0, 0); RTN_ERR //跟隨運(yùn)動(dòng)過(guò)程中可調(diào)用NMC_MtFollowGetLoopCount查詢(xún)循環(huán)執(zhí)行次數(shù) return rtn; |
① 首先使用GCS.exe工具測(cè)試數(shù)控機(jī)床是否達(dá)到安全啟動(dòng)要求;
② 在函數(shù)中,有三種編程對(duì)象,對(duì)于單軸控制的指令是以 NMC_Mt 開(kāi)頭,對(duì)于坐標(biāo)系的指令是以NMC_Crd 開(kāi)頭,其余是對(duì)控制器的指令;
③ 文檔只挑選常用功能,更多功能請(qǐng)關(guān)注頭文件,在里面做了詳細(xì)的注釋?zhuān)?/span>
④ 如有其他疑問(wèn),請(qǐng)聯(lián)系技術(shù)。
Copyright ?2020 深圳市高川自動(dòng)化技術(shù)有限公司 版權(quán)所有 備案號(hào):粵ICP備2022048856號(hào)