一.硬件介紹
PCIE464運動控制卡是正運動推出的一款EtherCAT總線+脈沖型、PCIE接口式的運動控制卡,可選6-64軸運動控制,支持多路高速數字輸入輸出,可輕松實現多軸同步控制和高速數據傳輸。
PCIE464運動控制卡適合于多軸點位運動、插補運動、軌跡規劃、手輪控制、編碼器位置檢測、IO控制、位置鎖存等功能的應用。PCIE464運動控制卡適用于3C電子加工、檢測設備、半導體設備、SMT加工、激光加工、光通訊設備、鋰電及光伏設備、以及非標自動化設備等高速高精應用場合。
PCIE4系列控制卡的應用程序可以使用VC,VB,VS,C++,C#等軟件開發,程序運行時需要動態庫zmotion.dll,調試時可以將RTSys軟件同時連接控制器,從而方便調試、方便觀察。
更多關于PCIE464的詳情介紹,點擊“PCIE464 — 高速高精,超高實時性的PCIe EtherCAT實時運動控制卡”查看。
二.接線參考
1.IN數字量輸入接口
數字輸入分布在J400(IN0-IN7)和X400(IN8-IN39)信號接口中。
2.OUT數字量輸出接口
數字輸出分布在J400(OUT0-7)和X400(OUT8-OUT39)信號接口中。
3.單端編碼器及單端脈沖接線
單端脈沖接線圖
差分脈沖接線圖
單端編碼器接線圖
差分編碼器接線圖
注:PCIE464的J400接口中有一個差分脈沖軸接口和三個單端脈沖軸接口,兩個差分編碼器接口(其中一個與差分脈沖軸接口復用,取決于固件設定)和兩個單端編碼器接口,具體引腳定義參見PCIE464硬件手冊。
三.使用運動緩沖實現同步/提前/延時開關膠
1.運動緩沖
ZMotion運動控制器具有多級的運動緩沖,并且遵循先進先出原則。當運動緩沖開啟的時候,程序在掃描識別到程序任務的第一條運動指令時,將運動指令分配到指定軸的運動緩沖區,電機開始運動,此時程序繼續向下掃描到第二條運動指令時,再往運動緩沖區中存,在不斷掃描存入運動指令的同時,從運動緩沖區中依次取出運動指令執行。
運動緩沖原理參考下圖:
①MTYPE,NTYPE分別是當前運行的運動指令類型和MTYPE后面的第一條指令類型。
②任意一段程序的運動指令都可以進入任意軸的運動緩沖區,由軸號指定。
③每個軸的運動緩沖區都是獨立的,互不干擾。
如下圖:當運動緩沖區還有空間,運動指令就會進入運動緩沖區。然后可以通過MOVE_MARK設置標識,表示下一條要調用的運動指令的MARK標號,這個標號會和運動指令一起寫入運動緩沖。等指令執行完成后,則退出運動緩沖區,之前的下一條指令變成正在運動指令,循環往復,直到緩沖區沒有指令去執行。
緩沖多條運動指令時,為了判斷當前運動執行到哪一條,提供MOVE_MARK運動標號和MOVE_CURMARK當前運動標號指令。 MOVE_MARK運動標號每掃描一條運動指令+1。 MOVE_CURMARK指令為當前運動的標號,提示當前運動到第幾條運動指令,所有運動完成后為-1。 當前運動完成后會自動執行運動緩沖區內的下一條運動。運動指令全部執行完后,運動緩沖區為空,或者使用CANCEL/RAPIDSTOP指令清空運動緩沖區。
2.使用到的運動緩沖指令以及Basic效果演示
在點膠的應用場景中,運動控制系統需要精準調節點膠閥開閉時機與針頭運動軌跡,通過開膠延時,關膠延時,提前關膠等參數,確保膠量精準可控,滿足工藝要求。 正運動技術提供了MOVE_OP等運動緩沖中控制輸出的指令,用來實現點膠工藝中的同步/提前/延時開關膠功能。
(1)運動緩沖開關OP指令(MOVE_OP -- 緩沖輸出)
MOVE_OP指令和MOVE/MOVEABS等指令一樣屬于運動指令,屬于只操作I/O的特殊運動指令,并不會阻塞后續運動指令的執行。 MOVE_OP指令與MOVE/MOVEABS等緩沖運動指令配合時可以實現在運動過程中指定位置同步開關膠。
Basic效果演示:
BASE(0,1) '依次例如點膠XY軸 UNITS = 1000000,1000000 SPEED = 100,100 ACCEL = 1000,1000 DECEL = 1000,1000 MPOS = 0,0DPOS = 0,0 MERGE = 1 OP(0,OFF) TRIGGER MOVEABS(100,100) '開膠點100,100 'XY走軌跡 MOVE_OP(0,ON) MOVE(0,70) MOVE(-100,0) MOVE(0,-70) MOVE(50,0) MOVEABS(100,100)'關膠點 MOVE_OP(0,OFF) MOVEABS(0,0)

可以看到xy插補的時候,先運動到100,100打開OP,走完一個長方形軌跡后,再到100,100的位置關閉OP。
(2)MOVE_OP精準輸出模式
實際點膠應用中有時精度要求比較高,用普通MOVEOP是比較指令位置(DPOS)滿足不了要求,這時候我們需要開啟MOVEOP精準模式。 開啟精準模式后,MOVEOP執行時會在緩沖比較編碼器位置(MPOS)到達前一條運動的目標位置再輸出。
能夠開啟精準模式的OP需要硬件支持,一般4系列有4個通道可以用于精準輸出,部分型號有8個,不同型號支持的通道數可以咨詢正運動廠家。
Basic演示:
BASE(0,1) '依次例如點膠XY軸 UNITS = 1000000,1000000 SPEED = 100,100 ACCEL = 1000,1000 DECEL = 1000,1000 MPOS = 0,0 DPOS = 0,0 MERGE = 1 OP(0,OFF)AXIS_ZSET = 19 '主軸設置精準輸出模式 'XY走軌跡 MOVEABS(100,100) '關膠點100,100 MOVE_OP(0,ON) MOVEABS(300,400) '關膠點300,400 MOVE_OP(0,OFF)
(3)使用MOVEOP_ADIST設置提前/滯后一定距離開關膠
通過設置矢量距離來控制提前滯后開關膠,設置正數會比缺省輸出位置(MOVE_OP上一條運動指令的目標位置)提前指定矢量距離,設置負數則延后指定矢量距離。可以由AXIS_ZSET來啟動精準輸出,同MOVE_OP精準,比較反饋位置。
Basic效果演示:
BASE(0,1) '依次例如點膠XY軸 UNITS = 1000000,1000000 SPEED = 100,100 ACCEL = 1000,1000 DECEL = 1000,1000 MPOS = 0,0 DPOS = 0,0 MERGE = 1 OP(0,OFF) TRIGGER MOVEABS(100,100) '開膠點100,100 'XY走軌跡 MOVEOP_ADIST = -50 '滯后50mm打開 MOVE_OP(0,ON) MOVEOP_ADIST = 0 MOVE_OP(1,ON) MOVE(0,70) MOVE(-100,0) MOVE(0,-70) MOVE(50,0) MOVEABS(100,100) '關膠點 MOVEOP_ADIST = 50 '提前50mm關閉 MOVE_OP(0,OFF) MOVEOP_ADIST = 0 MOVE_OP(1,OFF) MOVEABS(0,0)

設置OP1開關不做提前延后設置與OP0進行對比,可以看到OP0根據程序設置滯后50mm打開,提前50mm關閉了。
(4)使用MOVEOP_AHEADMS設置提前開關膠時間和MOVEOP_DELAY設置延后開關膠時間
注意MOVEOP_DELAY指令的效果受到軸FE的影響,若要忽略該影響,單純驗證指令功能,可以把ATYPE設置成0或者1去測試。
Basic效果演示:
BASE(0,1) '依次例如點膠XY軸 UNITS = 1000000,1000000 SPEED = 100,100 ACCEL = 1000,1000 DECEL = 1000,1000 MPOS = 0,0 DPOS = 0,0 MERGE = 1 AXIS_ZSET = 19 '主軸設置精準輸出模式 OP(0,OFF) TRIGGER MOVEABS(100,100) '開膠點100,100 'XY走軌跡 MOVEOP_DELAY = 100 '滯后50ms打開 MOVEOP_AHEADMS = 0 MOVE_OP(0,ON) MOVEOP_DELAY = 0 MOVEOP_AHEADMS = 0 MOVE_OP(1,ON) 'OP1對比 MOVE(0,70) MOVE(-100,0) MOVE(0,-70) MOVE(50,0) MOVEABS(100,100) '關膠點 MOVEOP_DELAY = 0 MOVEOP_AHEADMS = 100 '提前50ms打開 MOVE_OP(0,OFF) MOVEOP_DELAY = 0 MOVEOP_AHEADMS = 0 MOVE_OP(1,OFF) 'OP1對比 MOVEABS(0,0)

同樣設置OP1開關不做提前延后設置與OP0進行對比,可以看到OP0根據程序設置滯后100ms打開,提前100ms關閉了。
3.流程總結
四.C#編程進行運動控制項目開發
1.在VS2010菜單“文件”→“新建”→“項目”,啟動創建項目向導。
2.選擇開發語言為“Visual C#”和.NET Framework 4以及Windows窗體應用程序。
3.找到廠家提供的光盤資料里面的C#函數庫,路徑如下(32位庫為例)。
(1)進入廠商提供的光盤資料找到“04PC函數”文件夾,并點擊進入。
(2)選擇“01PC函數庫2.1”文件夾。
(3)選擇“Windows平臺”文件夾。
(4)選擇“C#”文件夾。
(5)根據需要選擇對應的函數庫,這里選擇32位庫。
4.將廠商提供的C#的庫文件以及相關文件復制到新建的項目中。
(1)將zmcaux.cs文件復制到新建的項目里面中。
(2)將zauxdll.dll和zmotion.dll文件放入bindebug文件夾中。
5.雙擊Form1.cs里面的Form1,出現代碼編輯界面,在文件開頭寫入using cszmcaux,并聲明控制器句柄g_handle。
6.至此,項目新建完成,可進行C#項目開發。
五.相關PC函數
由于函數庫未封裝對應MOVEOP_ADIST / MOVEOP_AHEADMS / MOVEOP_DELAY的函數,所以需要用ZAux_DirectCommand來發送對應Basic指令。
C#主體代碼:
privatevoidauto_move() { ThreadFlag =true; zmcaux.ZAux_Direct_SetSpeed(g_handle,0, Convert.ToSingle(C_AutoSpeed.Text)); zmcaux.ZAux_Direct_SetAccel(g_handle,0, Convert.ToSingle(C_AutoAccel.Text)); zmcaux.ZAux_Direct_SetDecel(g_handle,0, Convert.ToSingle(C_AutoDecel.Text)); stringcmdbuff ="AXIS_ZSET(0) = 19 "; UInt32 uiResponseLength =2048; StringBuilder psResponse =newStringBuilder((Int32)uiResponseLength); Int32 iresult = zmcaux.ZAux_DirectCommand(g_handle, cmdbuff, psResponse, uiResponseLength); //設置主軸開啟精準輸出模式 zmcaux.ZAux_Direct_MoveAbs(g_handle,2,newint[] {0,1},newfloat[] {0,0});//走到零位 while(true) { if(checkFrameAxisIdleState() ==true)break; } zmcaux.ZAux_Trigger(g_handle); //相對運動走軌跡 zmcaux.ZAux_Direct_Move(g_handle,2,newint[] {0,1},newfloat[] {0,-35}); //走到開膠點 cmdbuff ="MOVEOP_DELAY = 0"; iresult = zmcaux.ZAux_DirectCommand(g_handle, cmdbuff, psResponse, uiResponseLength); if(!ifTimeControl) //距離控制 { cmdbuff ="MOVEOP_ADIST = "+ C_OpenDis.Text; iresult = zmcaux.ZAux_DirectCommand(g_handle, cmdbuff, psResponse, uiResponseLength); } else { if(Convert.ToSingle(C_OpenTime.Text) >0) //提前 { cmdbuff ="MOVEOP_AHEADMS = "+ C_OpenTime.Text; iresult = zmcaux.ZAux_DirectCommand(g_handle, cmdbuff, psResponse, uiResponseLength); } else //滯后 { stringT_Value = (-Convert.ToSingle(C_OpenTime.Text)).ToString(); //moveop_delay滯后需要正值 cmdbuff ="MOVEOP_DELAY = "+ T_Value; iresult = zmcaux.ZAux_DirectCommand(g_handle, cmdbuff, psResponse, uiResponseLength); } } zmcaux.ZAux_Direct_MoveOp(g_handle,0,0,1); //測試走點膠軌跡 zmcaux.ZAux_Direct_Move(g_handle,2,newint[] {0,1},newfloat[] {50,0}); //iresult = zmcaux.ZAux_Direct_MSpherical(g_handle, virAxisList.Length, virAxisList, 0, 100, 0, 50, 50, 0, mSphericalMode, 5, 90); zmcaux.ZAux_Direct_Move(g_handle,2,newint[] {0,1},newfloat[] {0,70}); //iresult = zmcaux.ZAux_Direct_MSpherical(g_handle, virAxisList.Length, virAxisList, 0, -100, 0, -50, -50, 0, mSphericalMode, 5, 90); zmcaux.ZAux_Direct_Move(g_handle,2,newint[] {0,1},newfloat[] {-100,0}); zmcaux.ZAux_Direct_Move(g_handle,2,newint[] {0,1},newfloat[] {0,-70}); zmcaux.ZAux_Direct_Move(g_handle,2,newint[] {0,1},newfloat[] {50,0}); //走到關膠點 //zmcaux.ZAux_Direct_Move(g_handle, 2, new int[] { 0, 1 }, new float[] { 0, 35 }); //走到關膠點 cmdbuff ="MOVEOP_DELAY = 0"; iresult = zmcaux.ZAux_DirectCommand(g_handle, cmdbuff, psResponse, uiResponseLength); if(!ifTimeControl) //距離控制 { cmdbuff ="MOVEOP_ADIST = "+ C_CloseDis.Text; iresult = zmcaux.ZAux_DirectCommand(g_handle, cmdbuff, psResponse, uiResponseLength); } else { if(Convert.ToSingle(C_CloseTime.Text) >0) //提前 { cmdbuff ="MOVEOP_AHEADMS = "+ C_CloseTime.Text; iresult = zmcaux.ZAux_DirectCommand(g_handle, cmdbuff, psResponse, uiResponseLength); } else //滯后 { stringT_Value = (-Convert.ToSingle(C_CloseTime.Text)).ToString(); //moveop_delay滯后需要正值 cmdbuff ="MOVEOP_DELAY = "+ T_Value; iresult = zmcaux.ZAux_DirectCommand(g_handle, cmdbuff, psResponse, uiResponseLength); } } zmcaux.ZAux_Direct_MoveOp(g_handle,0,0,0); zmcaux.ZAux_Direct_MoveAbs(g_handle,2,newint[] {0,1},newfloat[] {0,0}); //走到零位 }
六.效果演示
下面以C#代碼跑測試和RTSys示波器抓取波形分析。
1.同步輸出效果:
2.距離控制提前滯后輸出效果:
3.時間控制提前滯后效果:
視頻講解可點擊→“PCIe EtherCAT實時運動控制卡PCIE464點膠工藝中的同步提前延時開關膠”查看。
完整代碼獲取地址
▼
本次,正運動技術PCIe EtherCAT實時運動控制卡PCIE464點膠工藝中的同步/提前/延時開關膠,就分享到這里。
更多精彩內容請關注“正運動小助手”公眾號,需要相關開發環境與例程代碼,請咨詢正運動技術銷售工程師:400-089-8936。
本文由正運動技術原創,歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。
審核編輯 黃宇
-
PCIe
+關注
關注
16文章
1328瀏覽量
84801 -
運動控制
+關注
關注
4文章
642瀏覽量
33423 -
ethercat
+關注
關注
19文章
1048瀏覽量
39715 -
正運動技術
+關注
關注
0文章
118瀏覽量
615
發布評論請先 登錄



VPLC系列機器視覺運動控制一體機在五軸聯動點膠上的應用

評論