一.硬件介紹
PCIE464運動控制卡是正運動推出的一款EtherCAT總線+脈沖型、PCIE接口式的運動控制卡,可選6-64軸運動控制,支持多路高速數(shù)字輸入輸出,可輕松實現(xiàn)多軸同步控制和高速數(shù)據(jù)傳輸。

PCIE464運動控制卡適合于多軸點位運動、插補運動、軌跡規(guī)劃、手輪控制、編碼器位置檢測、IO控制、位置鎖存等功能的應用。
PCIE464運動控制卡適用于3C電子加工、檢測設備、半導體設備、SMT加工、激光加工、光通訊設備、鋰電及光伏設備、以及非標自動化設備等高速高精應用場合。

PCIE4系列控制卡的應用程序可以使用VC,VB,VS,C++,C#等軟件開發(fā),程序運行時需要動態(tài)庫zmotion.dll,調(diào)試時可以將RTSys軟件同時連接控制器,從而方便調(diào)試、方便觀察。

更多關(guān)于PCIE464的詳情介紹,點擊“PCIE464 — 高速高精,超高實時性的PCIe EtherCAT實時運動控制卡”查看。
二.接線參考
1.IN數(shù)字量輸入接口
數(shù)字輸入分布在J400(IN0-IN7)和X400(IN8-IN39)信號接口中。

2.OUT數(shù)字量輸出接口
數(shù)字輸出分布在J400(OUT0-7)和X400(OUT8-OUT39)信號接口中。

3.單端編碼器及單端脈沖接線

單端脈沖接線圖

差分脈沖接線圖

單端編碼器接線圖

差分編碼器接線圖
注:PCIE464的J400接口中有一個差分脈沖軸接口和三個單端脈沖軸接口,兩個差分編碼器接口(其中一個與差分脈沖軸接口復用,取決于固件設定)和兩個單端編碼器接口,具體引腳定義參見PCIE464硬件手冊。
三.使用運動緩沖實現(xiàn)同步/提前/延時開關(guān)膠
1.運動緩沖
ZMotion運動控制器具有多級的運動緩沖,并且遵循先進先出原則。當運動緩沖開啟的時候,程序在掃描識別到程序任務的第一條運動指令時,將運動指令分配到指定軸的運動緩沖區(qū),電機開始運動,此時程序繼續(xù)向下掃描到第二條運動指令時,再往運動緩沖區(qū)中存,在不斷掃描存入運動指令的同時,從運動緩沖區(qū)中依次取出運動指令執(zhí)行。
運動緩沖原理參考下圖:
①MTYPE,NTYPE分別是當前運行的運動指令類型和MTYPE后面的第一條指令類型。
②任意一段程序的運動指令都可以進入任意軸的運動緩沖區(qū),由軸號指定。
③每個軸的運動緩沖區(qū)都是獨立的,互不干擾。

如下圖:當運動緩沖區(qū)還有空間,運動指令就會進入運動緩沖區(qū)。然后可以通過MOVE_MARK設置標識,表示下一條要調(diào)用的運動指令的MARK標號,這個標號會和運動指令一起寫入運動緩沖。等指令執(zhí)行完成后,則退出運動緩沖區(qū),之前的下一條指令變成正在運動指令,循環(huán)往復,直到緩沖區(qū)沒有指令去執(zhí)行。

緩沖多條運動指令時,為了判斷當前運動執(zhí)行到哪一條,提供MOVE_MARK運動標號和MOVE_CURMARK當前運動標號指令。
MOVE_MARK運動標號每掃描一條運動指令+1。
MOVE_CURMARK指令為當前運動的標號,提示當前運動到第幾條運動指令,所有運動完成后為-1。
當前運動完成后會自動執(zhí)行運動緩沖區(qū)內(nèi)的下一條運動。運動指令全部執(zhí)行完后,運動緩沖區(qū)為空,或者使用CANCEL/RAPIDSTOP指令清空運動緩沖區(qū)。
2.使用到的運動緩沖指令以及Basic效果演示
在點膠的應用場景中,運動控制系統(tǒng)需要精準調(diào)節(jié)點膠閥開閉時機與針頭運動軌跡,通過開膠延時,關(guān)膠延時,提前關(guān)膠等參數(shù),確保膠量精準可控,滿足工藝要求。
正運動技術(shù)提供了MOVE_OP等運動緩沖中控制輸出的指令,用來實現(xiàn)點膠工藝中的同步/提前/延時開關(guān)膠功能。
(1)運動緩沖開關(guān)OP指令(MOVE_OP -- 緩沖輸出)

MOVE_OP指令和MOVE/MOVEABS等指令一樣屬于運動指令,屬于只操作I/O的特殊運動指令,并不會阻塞后續(xù)運動指令的執(zhí)行。
MOVE_OP指令與MOVE/MOVEABS等緩沖運動指令配合時可以實現(xiàn)在運動過程中指定位置同步開關(guān)膠。
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)'關(guān)膠點
MOVE_OP(0,OFF)
MOVEABS(0,0)

可以看到xy插補的時候,先運動到100,100打開OP,走完一個長方形軌跡后,再到100,100的位置關(guān)閉OP。
(2)MOVE_OP精準輸出模式
實際點膠應用中有時精度要求比較高,用普通MOVEOP是比較指令位置(DPOS)滿足不了要求,這時候我們需要開啟MOVEOP精準模式。
開啟精準模式后,MOVEOP執(zhí)行時會在緩沖比較編碼器位置(MPOS)到達前一條運動的目標位置再輸出。

能夠開啟精準模式的OP需要硬件支持,一般4系列有4個通道可以用于精準輸出,部分型號有8個,不同型號支持的通道數(shù)可以咨詢正運動廠家。
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)
'關(guān)膠點100,100
MOVE_OP(0,ON)
MOVEABS(300,400)
'關(guān)膠點300,400
MOVE_OP(0,OFF)
設置插補主軸AXIS_ZSET=19開啟MOVEOP精準模式。
(3)使用MOVEOP_ADIST設置提前/滯后一定距離開關(guān)膠

通過設置矢量距離來控制提前滯后開關(guān)膠,設置正數(shù)會比缺省輸出位置(MOVE_OP上一條運動指令的目標位置)提前指定矢量距離,設置負數(shù)則延后指定矢量距離。可以由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)
'關(guān)膠點
MOVEOP_ADIST = 50 '提前50mm關(guān)閉
MOVE_OP(0,OFF)
MOVEOP_ADIST = 0
MOVE_OP(1,OFF)
MOVEABS(0,0)


設置OP1開關(guān)不做提前延后設置與OP0進行對比,可以看到OP0根據(jù)程序設置滯后50mm打開,提前50mm關(guān)閉了。
(4)使用MOVEOP_AHEADMS設置提前開關(guān)膠時間和MOVEOP_DELAY設置延后開關(guān)膠時間

注意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)
'關(guān)膠點
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開關(guān)不做提前延后設置與OP0進行對比,可以看到OP0根據(jù)程序設置滯后100ms打開,提前100ms關(guān)閉了。
3.流程總結(jié)

四.C#編程進行運動控制項目開發(fā)
1.在VS2010菜單“文件”→“新建”→“項目”,啟動創(chuàng)建項目向?qū)А?/p>

2.選擇開發(fā)語言為“Visual C#”和.NET Framework 4以及Windows窗體應用程序。

3.找到廠家提供的光盤資料里面的C#函數(shù)庫,路徑如下(32位庫為例)。
(1)進入廠商提供的光盤資料找到“04PC函數(shù)”文件夾,并點擊進入。

(2)選擇“01PC函數(shù)庫2.1”文件夾。

(3)選擇“Windows平臺”文件夾。

(4)選擇“C#”文件夾。

(5)根據(jù)需要選擇對應的函數(shù)庫,這里選擇32位庫。

4.將廠商提供的C#的庫文件以及相關(guān)文件復制到新建的項目中。
(1)將zmcaux.cs文件復制到新建的項目里面中。

(2)將zauxdll.dll和zmotion.dll文件放入bin\debug文件夾中。

5.雙擊Form1.cs里面的Form1,出現(xiàn)代碼編輯界面,在文件開頭寫入using cszmcaux,并聲明控制器句柄g_handle。

6.至此,項目新建完成,可進行C#項目開發(fā)。
五.相關(guān)PC函數(shù)

由于函數(shù)庫未封裝對應MOVEOP_ADIST / MOVEOP_AHEADMS / MOVEOP_DELAY的函數(shù),所以需要用ZAux_DirectCommand來發(fā)送對應Basic指令。

C#主體代碼:
private void auto_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));
string cmdbuff = "AXIS_ZSET(0) = 19 ";
UInt32 uiResponseLength = 2048;
StringBuilder psResponse = new StringBuilder((Int32)uiResponseLength);
Int32 iresult = zmcaux.ZAux_DirectCommand(g_handle, cmdbuff, psResponse, uiResponseLength); //設置主軸開啟精準輸出模式
zmcaux.ZAux_Direct_MoveAbs(g_handle, 2, new int[] { 0,1}, new float[] { 0, 0 });//走到零位
while (true)
{
if (checkFrameAxisIdleState() == true) break;
}
zmcaux.ZAux_Trigger(g_handle);
//相對運動走軌跡
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_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 //滯后
{
string T_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, new int[] { 0, 1 }, new float[] { 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, new int[] { 0, 1 }, new float[] { 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, new int[] { 0, 1 }, new float[] { -100, 0 });
zmcaux.ZAux_Direct_Move(g_handle, 2, new int[] { 0, 1 }, new float[] { 0, -70});
zmcaux.ZAux_Direct_Move(g_handle, 2, new int[] { 0, 1 }, new float[] { 50,0 }); //走到關(guān)膠點
//zmcaux.ZAux_Direct_Move(g_handle, 2, new int[] { 0, 1 }, new float[] { 0, 35 }); //走到關(guān)膠點
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 //滯后
{
string T_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, new int[] { 0, 1 }, new float[] { 0, 0 }); //走到零位
}
六.效果演示
下面以C#代碼跑測試和RTSys示波器抓取波形分析。
1.同步輸出效果:


2.距離控制提前滯后輸出效果:


3.時間控制提前滯后效果:


視頻講解可點擊→“PCIe EtherCAT實時運動控制卡PCIE464點膠工藝中的同步提前延時開關(guān)膠”查看。
完整代碼獲取地址
▼

本次,正運動技術(shù)PCIe EtherCAT實時運動控制卡PCIE464點膠工藝中的同步/提前/延時開關(guān)膠,就分享到這里。
更多精彩內(nèi)容請關(guān)注“正運動小助手”公眾號,需要相關(guān)開發(fā)環(huán)境與例程代碼,請咨詢正運動技術(shù)銷售工程師:400-089-8936。
本文由正運動技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學習,一起提高中國智能制造水平。文章版權(quán)歸正運動技術(shù)所有,如有轉(zhuǎn)載請注明文章來源。

正運動技術(shù)專注于運動控制技術(shù)研究和通用運動控制軟硬件產(chǎn)品的研發(fā),是國家級高新技術(shù)企業(yè)。正運動技術(shù)匯集了來自華為、中興等公司的優(yōu)秀人才,在堅持自主創(chuàng)新的同時,積極聯(lián)合各大高校協(xié)同運動控制基礎技術(shù)的研究,是國內(nèi)工控領(lǐng)域發(fā)展最快的企業(yè)之一,也是國內(nèi)少有、完整掌握運動控制核心技術(shù)和實時工控軟件平臺技術(shù)的企業(yè)。主要業(yè)務有:運動控制卡_運動控制器_EtherCAT運動控制卡_EtherCAT控制器_運動控制系統(tǒng)_視覺控制器__運動控制PLC_運動控制_機器人控制器_視覺定位_XPCIe/XPCI系列運動控制卡等。
|