技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > PCIe EtherCAT實(shí)時(shí)運(yùn)動(dòng)控制卡的DXF圖形的CAD導(dǎo)圖與多條運(yùn)動(dòng)指令的快速加工

PCIe EtherCAT實(shí)時(shí)運(yùn)動(dòng)控制卡的DXF圖形的CAD導(dǎo)圖與多條運(yùn)動(dòng)指令的快速加工

時(shí)間:2024-06-06 14:57:52來源:深圳市正運(yùn)動(dòng)技術(shù)有限公司

導(dǎo)語:?今天,正運(yùn)動(dòng)小助手給大家分享一下C#語言如何進(jìn)行CAD導(dǎo)圖、RTBasic程序的多任務(wù)開發(fā)。在正式學(xué)習(xí)之前,我們先了解一下正運(yùn)動(dòng)技術(shù)的運(yùn)動(dòng)控制卡PCIE464。

  今天,正運(yùn)動(dòng)小助手給大家分享一下C#語言如何進(jìn)行CAD導(dǎo)圖、RTBasic程序的多任務(wù)開發(fā)。在正式學(xué)習(xí)之前,我們先了解一下正運(yùn)動(dòng)技術(shù)的運(yùn)動(dòng)控制卡PCIE464。

  硬件介紹

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

運(yùn)動(dòng)控制

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

運(yùn)動(dòng)控制

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

運(yùn)動(dòng)控制

  PCIE464產(chǎn)品介紹

  接線參考

  1、IN數(shù)字量輸入接口數(shù)字輸入分布在J400(IN0-IN7)和X400(IN8-IN39)信號(hào)接口中。

運(yùn)動(dòng)控制

運(yùn)動(dòng)控制

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

運(yùn)動(dòng)控制

運(yùn)動(dòng)控制

  C#語言進(jìn)行項(xiàng)目開發(fā)

  1、在VS2010菜單“文件”→“新建”→“項(xiàng)目”,啟動(dòng)創(chuàng)建項(xiàng)目向?qū)А?/p>

運(yùn)動(dòng)控制

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

運(yùn)動(dòng)控制

  3、找到廠家提供的運(yùn)動(dòng)庫、CAD導(dǎo)圖庫(32位庫為例)。

運(yùn)動(dòng)控制

運(yùn)動(dòng)控制

  4、將廠商提供的C#的庫文件以及相關(guān)文件復(fù)制到新建的項(xiàng)目中,以及將廠商提供的C#的相關(guān)庫文件放入bin\debug文件夾中。

運(yùn)動(dòng)控制

運(yùn)動(dòng)控制

  5、用vs打開新建的項(xiàng)目文件,在右邊的解決方案資源管理器中點(diǎn)擊顯示所有文件,然后鼠標(biāo)右擊zmcaux.cs文件,點(diǎn)擊包括在項(xiàng)目中,根據(jù)添加zmcaux.cs文件的步驟,將zmclaser.cs和zmotioncad.cs文件添加進(jìn)工程中。

運(yùn)動(dòng)控制

運(yùn)動(dòng)控制

  6、雙擊Form1.cs里面的Form1,出現(xiàn)代碼編輯界面,在文件開頭寫入using cszmcaux,using ZmotionCadDll,并聲明控制器句柄g_cardhandle和使用CAD中使用到的cad庫函數(shù)的句柄g_cadhandle。

運(yùn)動(dòng)控制

  7、至此,項(xiàng)目新建完成,可進(jìn)行C#項(xiàng)目開發(fā)。

  C#語言進(jìn)行CAD導(dǎo)圖

  在實(shí)際的運(yùn)用場(chǎng)景中,如果一張圖紙靠人為去計(jì)算圖形運(yùn)動(dòng)軌跡的坐標(biāo),結(jié)果既費(fèi)時(shí)又費(fèi)力。所以,在此情景下,如果我們讓計(jì)算機(jī)去計(jì)算圖形的運(yùn)動(dòng)軌跡,則會(huì)事半功倍,接下來我們介紹如何使用C#進(jìn)行CAD導(dǎo)圖。

  1、操作步驟

  首先,新建WinForm項(xiàng)目并添加函數(shù)庫,接著用ZMotionCadArray_ImportVectGraph指令去導(dǎo)入打開CAD圖形文件,并進(jìn)行小線段的拆分精度。再用ZMotionCadArray_GetVectNum指令去獲取數(shù)組長度,接著創(chuàng)建一個(gè)struct_zcad_array結(jié)構(gòu)體類型(該結(jié)構(gòu)體在ZMotionCad庫中已經(jīng)有聲明,直接定義調(diào)用即可),用來保存運(yùn)動(dòng)數(shù)據(jù)、運(yùn)動(dòng)類型等信息。創(chuàng)建好該結(jié)構(gòu)體數(shù)組以后,再用ZMotionCadArray_GetVectArray指令將圖形的運(yùn)動(dòng)數(shù)據(jù)保存到該數(shù)組里面。

       最后,用ZMotionCadArray_MergeSeg指令去將各個(gè)點(diǎn)連接成線。操作思路,如圖所示。

運(yùn)動(dòng)控制

  2、指令介紹

運(yùn)動(dòng)控制

  3、生成運(yùn)動(dòng)軌跡數(shù)據(jù)

  將.dxf文件導(dǎo)入進(jìn)去后,使用ZMotionCadArray_ImportVectGraph指令將CAD圖紙導(dǎo)入,并對(duì)小線段進(jìn)行拆分。

  用ZMotionCadArray_GetVectNum獲取數(shù)據(jù)長度,獲取到數(shù)據(jù)長度后,創(chuàng)建一個(gè)Struct_ZCad_Array類型的數(shù)組。

  這時(shí),其CAD圖紙的數(shù)據(jù)就保存在這結(jié)構(gòu)體數(shù)組中,獲取圖形數(shù)據(jù)用ZMotionCadArray_GetVectArray指令。

  創(chuàng)建一個(gè)StringBuilder類型的數(shù)組,用循環(huán)去訪問Struct_ZCad_Array類型數(shù)組的運(yùn)動(dòng)類型,并把其運(yùn)動(dòng)坐標(biāo)尾插到該數(shù)組里面。

  最后,用文件IO的知識(shí)創(chuàng)建一個(gè)bas文件,并將StringBuilder類型數(shù)組的運(yùn)動(dòng)數(shù)據(jù)尾插到該bas文件中。

運(yùn)動(dòng)控制

  1、導(dǎo)入圖形文件,通過線程去獲取CAD圖紙的點(diǎn)位信息,并用畫筆將點(diǎn)位信息顯示在畫板上。

運(yùn)動(dòng)控制

  獲取圖紙點(diǎn)位信息的相關(guān)代碼:

  //打開配置文件if (openFileDialog1.ShowDialog() == DialogResult.OK) { strFilePath = openFileDialog1.FileName; label11.Text = Path.GetFileName(strFilePath); textBox3.Text= textBox3.Text+"\r\n"+"導(dǎo)入文件:"+ Path.GetFileName(strFilePath); //導(dǎo)入CAD圖形文件 m_refDistance圓弧轉(zhuǎn)小線段拆分精度 int iret = ZmotionCad.ZMotionCadArray_ImportVectGraph(strFilePath, 1024, 1, m_refDistance); //導(dǎo)入數(shù)據(jù), 獲取數(shù)組長度 iret = ZmotionCad.ZMotionCadArray_GetVectNum(ref ZCad_ArrayLen); //創(chuàng)建一個(gè)結(jié)構(gòu)體變量 ZCad_ArrayInfo = new ZmotionCad.Struct_ZCad_Array[ZCad_ArrayLen]; //獲取圖形數(shù)據(jù) 將cad文件的數(shù)據(jù)放在ZCad_ArrayInfo數(shù)組里 iret = ZmotionCad.ZMotionCadArray_GetVectArray(ref ZCad_ArrayInfo[0], ZCad_ArrayLen); //是否只處理封閉軌跡 iret = ZmotionCad.ZMotionCadArray_IfCloseVect(false); //合并相連線 iret = ZmotionCad.ZMotionCadArray_MergeSeg(0.5, If_Choose); //為了判斷是否只處理封閉軌跡,又重新獲取數(shù)組的長度和獲取圖形數(shù)據(jù) Get_Array(); //在細(xì)分0.05的情況下獲取圖紙的左、底、長、寬的數(shù)值 iret = ZmotionCad.ZMotionCadArray_GetRange(ref Image_Left, ref Image_bottom, ref Image_Width, ref Image_Height, 0.05); if (Image_Width < 0.0001 && Image_Height < 0.0001) { Image_Left = (float)0.0; Image_bottom = (float)0.0; Image_Width = (float)100.0; Image_Height = (float)100.0; } double ObjectPixHeight, ObjectPixWidth; //實(shí)際在畫板上顯示圖形的大小 if (Image_Width * PicHeight <= Image_Height * PicWidth) { ObjectPixHeight = PicHeight; ObjectPixWidth = ObjectPixHeight * Image_Width / Image_Height; } else { ObjectPixWidth = PicWidth; ObjectPixHeight = ObjectPixWidth * Image_Height / Image_Width; } //縮放比例 dScale = ObjectPixHeight / Image_Height; m_dUnitsPerMm = dScale * 1; //偏移 m_dTranX = (MyPicture.Width - ObjectPixWidth) / 2 - Image_Left * dScale; m_dTranY = (MyPicture.Height - ObjectPixHeight) / 2 - Image_bottom * dScale; //用畫筆將點(diǎn)位信息顯示在畫板上 Show_Picture();

  2、點(diǎn)擊運(yùn)行程序,通過線程生成運(yùn)動(dòng)指令下發(fā)到控制器,讓控制器去跑CAD的點(diǎn)位坐標(biāo)。

運(yùn)動(dòng)控制

  4、運(yùn)行效果

  上位機(jī)界面上的運(yùn)動(dòng)軌跡與RTSys抓到的運(yùn)動(dòng)軌跡作比較,與RTSys示波器上的軌跡基本上相符。

運(yùn)動(dòng)控制

  自定義封裝指令函數(shù)

  在實(shí)際開發(fā)過程中,為了提高效率,ZMotion PC函數(shù)庫里如果沒有現(xiàn)成的指令供開發(fā)者使用,那么開發(fā)者可以通過自定義封裝指令函數(shù)的方式去實(shí)現(xiàn)開發(fā)者想要實(shí)現(xiàn)的功能來提高交互的效率。下面正運(yùn)動(dòng)小助手將通過一次性下發(fā)多條的示例去說明如何自定義封裝指令函數(shù)。

  1、指令說明

運(yùn)動(dòng)控制

  2、示例說明

  下面的示例代碼中,自定義封裝可以一次性發(fā)送多條運(yùn)動(dòng)指令的函數(shù)指令,代碼思路如下:1、正運(yùn)動(dòng)小助手先定義4個(gè)形參,分別為句柄、軸的個(gè)數(shù)、軸列表(從哪個(gè)軸號(hào)開始到哪個(gè)軸號(hào)結(jié)束)、各個(gè)軸的運(yùn)動(dòng)距離(可以有多條點(diǎn)位信息,以“;”作為一個(gè)點(diǎn)位信息的結(jié)束標(biāo)記)。2、在自定義函數(shù)里面將形參中的axis_distance內(nèi)容以“;”的方式進(jìn)行剪切并保存在dir_move數(shù)組里面。3、將dir_move數(shù)組里面的點(diǎn)位信息通過拼接字符串的方式,循環(huán)掃描拼接生成moveabs的運(yùn)動(dòng)指令保存在變量名為cmdbuff 的string類型里面。4、通過ZMotion PC函數(shù)庫的在線發(fā)送指令ZAux_DirectCommand去將變量名為cmdbuff里面的多條運(yùn)動(dòng)指令下發(fā)給控制卡或控制器。

  ·

  Description: // 自定義封裝函數(shù),一次性下發(fā)多條運(yùn)動(dòng)指令I(lǐng)nput: //handle 控制卡句柄/控制器句柄 //axis_num 總軸數(shù) //axis_list 軸號(hào)列表 //axis_distance 運(yùn)動(dòng)的點(diǎn)位坐標(biāo),以“;”作為結(jié)束標(biāo)記代表一條運(yùn)動(dòng)坐標(biāo)Return: //錯(cuò)誤碼int __stdcall ZMotionCadArray_DelOne(int nDelVect);*************************************************************/public Int32 UseDefined_Moveabs(IntPtr handle,int axis_num, string axis_list,string axis_distance){ //用于拼接運(yùn)動(dòng)命令的字符串 string cmdbuff = ""; string[] dir_move = axis_distance.ToString().Split(new char[] { ';' }); //接收在線命令的信息 StringBuilder psResponse =new StringBuilder(1024); //判斷軸的個(gè)數(shù)是否合理 if (axis_num < 0) { return -1; } //生成命令 cmdbuff= "base(" + axis_list + ")"; for (int i = 0; i < dir_move.Length; i++) { //拼接運(yùn)動(dòng)指令 cmdbuff =cmdbuff+ "moveabs("+ dir_move[i]+")"; } //利用在線命令的方式去發(fā)送拼接好的運(yùn)動(dòng)指令 return zmcaux.ZAux_DirectCommand(handle,cmdbuff,psResponse,1024); }

  調(diào)用自定義封裝的函數(shù)指令:

  ·

  //獲取軸0緩沖區(qū)的大小 ret = zmcaux.ZAux_Direct_GetRemain_Buffer(G_CardHandle, 0, ref buf0); err_inform("ZAux_Direct_GetRemain_Buffer0", ret); if (buf0 > 10) { //通過自定義封裝的函數(shù)去發(fā)運(yùn)動(dòng)指令,一次發(fā)10條 ret = UseDefined_Moveabs(G_CardHandle, 2, axis, direct_str[i]); err_inform("UseDefined_Moveabs", ret); label15.Invoke(new MethodInvoker(() => direct_num(i.ToString())));

  3、代碼驗(yàn)證

  (1)形參direct_str[0]里面的數(shù)據(jù)內(nèi)容。

運(yùn)動(dòng)控制

  (2)cmdbuff里面拼接好的數(shù)據(jù)。

運(yùn)動(dòng)控制

  通過以上兩個(gè)變量中的數(shù)據(jù)內(nèi)容查看,驗(yàn)證了上訴的代碼思路是符合邏輯的,實(shí)現(xiàn)了高效率的一條指令內(nèi)多條數(shù)據(jù)加工的傳輸。

  模擬量與速度的實(shí)時(shí)轉(zhuǎn)換

  一、操作步驟

  首先,設(shè)置工程下的Basic文件自動(dòng)運(yùn)行任務(wù)號(hào),可以在RTSys軟件上的“控制器狀態(tài)”中查看控制器最多支持多少個(gè)任務(wù),然后在Basic文件上填寫自動(dòng)運(yùn)行任務(wù)號(hào)(不能超過最大支持的任務(wù)數(shù)),最后下載到控制器上。

  1、查看控制器的最大任務(wù)數(shù)。

運(yùn)動(dòng)控制

  2、填寫自動(dòng)運(yùn)行任務(wù)號(hào)。

運(yùn)動(dòng)控制

  3、設(shè)置好自動(dòng)運(yùn)行任務(wù)號(hào)后,下載寫好的程序到控制器運(yùn)行即可。

運(yùn)動(dòng)控制

  4、在上位機(jī)上設(shè)置轉(zhuǎn)換比例K值(0到1)。

運(yùn)動(dòng)控制

  二、指令介紹

運(yùn)動(dòng)控制

  注:在本示例代碼中,PC指令中的ZAux_Direct_SetUserVar的Varname形參在使用時(shí),寫的是Basic文件的全局變量s_ratio。三、舉例說明在下方的Basic程序中,可以根據(jù)軸的速度來實(shí)現(xiàn)控制器模擬量輸出口的大小,也通過上位機(jī)去修改模擬量與速度的轉(zhuǎn)換比例K。使用示波器將速度與模擬量的輸出波形抓取之后,可以看出,速度與模擬量輸出的波形基本一致。

運(yùn)動(dòng)控制

  1、Basic相關(guān)代碼。

  GLOBAL s_ratio '速度的比例WHILE 1'將速度與模擬量的關(guān)系成正比 AOUT(0)=4.095*VP_SPEED(0)*s_ratioWENDend

  2、PC中的相關(guān)代碼。

  int ret = zmcaux.ZAux_Direct_SetUserVar(G_CardHandle, "s_ratio", Convert.ToSingle(textBox4.Text)); //設(shè)置模擬量與速度的轉(zhuǎn)換比例err_inform("比例的ZAux_Direct_SetUserVar",ret);

  四、視頻講解

完整代碼獲取地址

運(yùn)動(dòng)控制.png

  本次,正運(yùn)動(dòng)技術(shù)PCIe EtherCAT實(shí)時(shí)運(yùn)動(dòng)控制卡的DXF圖形的CAD導(dǎo)圖與多條運(yùn)動(dòng)指令的快速加工,就分享到這里。

  更多精彩內(nèi)容請(qǐng)關(guān)注“正運(yùn)動(dòng)小助手”公眾號(hào),需要相關(guān)開發(fā)環(huán)境與例程代碼,請(qǐng)咨詢正運(yùn)動(dòng)技術(shù)銷售工程師:400-089-8936。

  本文由正運(yùn)動(dòng)技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國智能制造水平。文章版權(quán)歸正運(yùn)動(dòng)技術(shù)所有,如有轉(zhuǎn)載請(qǐng)注明文章來源。

標(biāo)簽: 運(yùn)動(dòng)控制

點(diǎn)贊

分享到:

上一篇:基于交錯(cuò)并聯(lián)設(shè)計(jì)開關(guān)電源中...

下一篇:plc工控機(jī)歸哪個(gè)部門負(fù)責(zé)

中國傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動(dòng)網(wǎng)(m.u63ivq3.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來源“中國傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權(quán)所有
粵ICP備 14004826號(hào) | 營業(yè)執(zhí)照證書 | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)