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