一.硬件介紹
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運yun動dong控kong製zhi器qi具ju有you多duo級ji的de運yun動dong緩huan衝chong,並bing且qie遵zun循xun先xian進jin先xian出chu原yuan則ze。當dang運yun動dong緩huan衝chong開kai啟qi的de時shi候hou,程cheng序xu在zai掃sao描miao識shi別bie到dao程cheng序xu任ren務wu的de第di一yi條tiao運yun動dong指zhi令ling時shi,將jiang運yun動dong指zhi令ling分fen配pei到dao指zhi定ding軸zhou的de運yun動dong緩huan衝chong區qu,電dian機ji開kai始shi運yun動dong,此ci時shi程cheng序xu繼ji續xu向xiang下xia掃sao描miao到dao第di二er條tiao運yun動dong指zhi令ling時shi,再zai往wang運yun動dong緩huan衝chong區qu中zhong存cun,在zai不bu斷duan掃sao描miao存cun入ru運yun動dong指zhi令ling的de同tong時shi,從cong運yun動dong緩huan衝chong區qu中zhong依yi次ci取qu出chu運yun動dong指zhi令ling執zhi行xing。
運動緩衝原理參考下圖:
①MTYPE,NTYPE分別是當前運行的運動指令類型和MTYPE後麵的第一條指令類型。
②任意一段程序的運動指令都可以進入任意軸的運動緩衝區,由軸號指定。
③每個軸的運動緩衝區都是獨立的,互不幹擾。

如下圖:當運動緩衝區還有空間,運動指令就會進入運動緩衝區。然後可以通過MOVE_MARK設置標識,表示下一條要調用的運動指令的MARKbiaohao,zhegebiaohaohuiheyundongzhilingyiqixieruyundonghuanchong。dengzhilingzhixingwanchenghou,zetuichuyundonghuanchongqu,zhiqiandexiayitiaozhilingbianchengzhengzaiyundongzhiling,xunhuanwangfu,zhidaohuanchongqumeiyouzhilingquzhixing。

緩衝多條運動指令時,為了判斷當前運動執行到哪一條,提供MOVE_MARK運動標號和MOVE_CURMARK當前運動標號指令。
MOVE_MARK運動標號每掃描一條運動指令+1。
MOVE_CURMARK指令為當前運動的標號,提示當前運動到第幾條運動指令,所有運動完成後為-1。
當前運動完成後會自動執行運動緩衝區內的下一條運動。運動指令全部執行完後,運動緩衝區為空,或者使用CANCEL/RAPIDSTOP指令清空運動緩衝區。
2.使用到的運動緩衝指令以及Basic效果演示
在zai點dian膠jiao的de應ying用yong場chang景jing中zhong,運yun動dong控kong製zhi係xi統tong需xu要yao精jing準zhun調tiao節jie點dian膠jiao閥fa開kai閉bi時shi機ji與yu針zhen頭tou運yun動dong軌gui跡ji,通tong過guo開kai膠jiao延yan時shi,關guan膠jiao延yan時shi,提ti前qian關guan膠jiao等deng參can數shu,確que保bao膠jiao量liang精jing準zhun可ke控kong,滿man足zu工gong藝yi要yao求qiu。
正運動技術提供了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)
設置插補主軸AXIS_ZSET=19開啟MOVEOP精準模式。
(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文件放入bin\debug文件夾中。

5.雙擊Form1.cs裏麵的Form1,出現代碼編輯界麵,在文件開頭寫入using cszmcaux,並聲明控製器句柄g_handle。

6.至此,項目新建完成,可進行C#項目開發。
五.相關PC函數

由於函數庫未封裝對應MOVEOP_ADIST / MOVEOP_AHEADMS / MOVEOP_DELAY的函數,所以需要用ZAux_DirectCommand來發送對應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 }); //走到關膠點
//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 //滯後
{
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點膠工藝中的同步提前延時開關膠”查看。
完整代碼獲取地址
▼

本次,正運動技術PCIe EtherCAT實時運動控製卡PCIE464點膠工藝中的同步/提前/延時開關膠,就分享到這裏。
更多精彩內容請關注“正運動小助手”公眾號,需要相關開發環境與例程代碼,請谘詢正運動技術銷售工程師:400-089-8936。
本(ben)文(wen)由(you)正(zheng)運(yun)動(dong)技(ji)術(shu)原(yuan)創(chuang),歡(huan)迎(ying)大(da)家(jia)轉(zhuan)載(zai),共(gong)同(tong)學(xue)習(xi),一(yi)起(qi)提(ti)高(gao)中(zhong)國(guo)智(zhi)能(neng)製(zhi)造(zao)水(shui)平(ping)。文(wen)章(zhang)版(ban)權(quan)歸(gui)正(zheng)運(yun)動(dong)技(ji)術(shu)所(suo)有(you),如(ru)有(you)轉(zhuan)載(zai)請(qing)注(zhu)明(ming)文(wen)章(zhang)來(lai)源(yuan)。

正運動技術專注於運動控製技術研究和通用運動控製軟硬件產品的研發,是國家級高新技術企業。正運動技術彙集了來自華為、中zhong興xing等deng公gong司si的de優you秀xiu人ren才cai,在zai堅jian持chi自zi主zhu創chuang新xin的de同tong時shi,積ji極ji聯lian合he各ge大da高gao校xiao協xie同tong運yun動dong控kong製zhi基ji礎chu技ji術shu的de研yan究jiu,是shi國guo內nei工gong控kong領ling域yu發fa展zhan最zui快kuai的de企qi業ye之zhi一yi,也ye是shi國guo內nei少shao有you、完整掌握運動控製核心技術和實時工控軟件平台技術的企業。主要業務有:運動控製卡_運動控製器_EtherCAT運動控製卡_EtherCAT控製器_運動控製係統_視覺控製器__運動控製PLC_運動控製_機器人控製器_視覺定位_XPCIe/XPCI係列運動控製卡等。
|