XPCIE1032H功能簡介
XPCIE1032H是一款基于PCI Express的EtherCAT總線運動控制卡,可選6-64軸運動控制,支持多路高速數字輸入輸出,可輕松實現多軸同步控制和高速數據傳輸。XPCIE1032H集成了強大的運動控制功能,結合MotionRT7運動控制實時軟核,解決了高速高精應用中,PC Windows開發的非實時痛點,指令交互速度比傳統的PCI/PCIe快10倍。
XPCIE1032H支持PWM,PSO功能,板載16進16出通用IO口,其中輸出口全部為高速輸出口,可配置為4路PWM輸出口或者16路高速PSO硬件比較輸出口。輸入口含有8路高速輸入口,可配置為4路高速色標鎖存或兩路編碼器輸入。
XPCIE1032H搭配MotionRT7實時內核,使用本地LOCAL接口連接,通過高速的核內交互,可以做到更快速的指令交互,單條指令與多條指令一次性交互時間可以達到3-5us左右。
?XPCIE1032H與MotionRT7實時內核的配合具有以下優勢:
1.支持多種上位機語言開發,所有系列產品均可調用同一套API函數庫;
2.借助核內交互,可以快速調用運動指令,響應時間快至微秒級,比傳統PCI/PCIe快10倍;
3.解決傳統PCI/PCIe運動控制卡在Windows環境下控制系統的非實時性問題;
4.支持一維/二維/三維PSO(高速硬件位置比較輸出),適用于視覺飛拍、精密點膠和激光能量控制等應用;
5.提供高速輸入接口,便于實現位置鎖存;
6.支持EtherCAT總線和脈沖輸出混合聯動、混合插補。
?使用XPCIE1032H和MotionRT7進行項目開發時,通常需要進行以下步驟:
1.安裝驅動程序,識別XPCIE1032H;
2.打開并執行文件“MotionRT710.exe”,配置參數和運行運動控制實時內核;
3.使用ZDevelop軟件連接到控制器,進行參數監控。連接時請使用PCI/LOCAL方式,并確保ZDevelop軟件版本在3.10以上;
4.完成控制程序開發,通過LOCAL鏈接方式連接到運動控制卡,實現實時運動控制。
我們可以從測試對比結果看出,XPCIE1032H運動控制卡配合實時運動控制內核MotionRT7,在LOCAL鏈接(核內交互)的方式下,指令交互的效率是非常穩定,當測試數量從1w增加到10w時,單條指令交互時間與多條指令交互時間波動不大,非常適用于高速高精的應用。
XPCIE1032H驅動安裝與建立連接參考往期文章EtherCAT超高速實時運動控制卡XPCIE1032H上位機C#開發(一):驅動安裝與建立連接。
一、C#語言進行運動控制項目開發
二、PC函數介紹
相關PC函數介紹詳情可參考“ZMotion PC函數庫編程手冊 V2.1.1”。
三、XML文件生成ZML文件添加步驟
大家都知道,正運動總線控制器事先就把一些總線從站的XML文件添加到控制器的固件里面了,所以配合市面上大部分的EtherCAT從站,客戶只需要下載總線初始化腳本就可以和對應從站通訊,具體可以參考往期推文EtherCAT超高速實時運動控制卡XPCIE1032H上位機C#開發(二):EtherCAT總線初始化。針對市面上剛出的總線從站,我們沒有及時把XML文件添加到控制器固件里面或總線掃描的時候遇見不支持的從站,這個時候需要我們自己添加XML文件。
正運動控制器添加XML文件的步驟如下:
(1)通過XMLParsingTools工具軟件將XML轉換成ZML文件;
(2)把生成的ZML文件添加到Zpj項目里面,連同總線初始化腳本的Bas文件一起下載到控制器里面即可。
1、通過XMLParsingTools工具將XML文件轉換成ZML文件。
(1)點擊左上角文件夾打開XML文件,選擇對應的從站型號和從站類型(這里以友商的一拖四總線驅動器為例)。
(2)點擊左上角文件夾位置導出ZML文件即可。
2、RTSys軟件同時下載ZML文件與總線初始化的Bas文件(下載ZPJ項目)。
(1)把剛剛生成的ZML文件拷貝到總線初始化的ZPJ項目文件夾下,通過RTSys軟件打開【EtherCAT參數.zpj】這個項目文件。
(2)右鍵文件視圖區域,點擊【增加到項目】將剛剛生成的ZML文件添加到項目里面。
(3)點擊連接按鈕,通過Local接口鏈接上控制器。
(4)點擊【下載到ROM】,將整個項目下載到控制器里面掉電保存即可。
3.將例程下載到ZML文件與總線初始化的Bas文件。
連接控制器,新建ZPJ項目文件,將總線初始化的Bas文件和剛剛生成的zml文件復制到新建項目的目錄下并一一添加進來,最后下載到控制器的ROM里面即可掉電保存。
三、應用例程及實現效果
1、點擊連接按鈕鏈接到MotionRT7運動控制軟核。
//連接控制器 private void Btn_cn_Click(object sender, EventArgs e) { int ret; //鏈接控制器 ret= zmcaux.ZAux_FastOpen(5,textBox1.Text,1000,out g_handle); if (g_handle != (IntPtr)0) { MessageBox.Show("RT7鏈接成功!", "提示"); timer1.Enabled = true; } else { MessageBox.Show("RT7鏈接失敗"+"錯誤代碼"+ ret); } }
2、新建Zpj項目文件。
//新建zpj文件 private void NewZpjFile_Click(object sender, EventArgs e) { try { //創建保存文件對話框 SaveFileDialog saveFile = new SaveFileDialog(); saveFile.Filter = "ZMC Project Files(*.zpj)|*.zpj"; //是否覆蓋當前文件 saveFile.OverwritePrompt = true; //如果設為true就會使用系統默認目錄 saveFile.RestoreDirectory = true; //還原目錄 //如果保存對話框操作成功 if (saveFile.ShowDialog() == DialogResult.OK) { FileStream fs1 =new FileStream(saveFile.FileName, FileMode.Create, FileAccess.ReadWrite); fs1.Close(); //ZPJ文件名 m_ZpjFileName = saveFile.FileName; //ZPJ文件路徑 m_ZpjFilePath = System.IO.Path.GetDirectoryName(m_ZpjFileName); System.IO.File.Create(m_ZpjFileName).Close(); Thread.Sleep(100); if (!System.IO.File.Exists(m_ZpjFileName)) { MessageBox.Show("文件不存在"); } //初始化ZPJ文件信息 Czpj(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } //初始化ZPJ文件信息_通過Ini文件記錄 public void Czpj() { string LpAppname, Lpkeynum, Lpdata; LpAppname = "Controller"; Lpkeynum = "TypeName "; //寫控制器信息,初始化ZPJ文件信息 Thread.Sleep(200); var MyIni = new IniFile(@m_ZpjFileName); MyIni.Write(Lpkeynum, "", LpAppname); MyIni.Write("IfUpload", "0", LpAppname); MyIni.Write("UserVersion", "1.0", LpAppname); Lpdata = num.ToString(); // MyIni.Write("Files",Lpdata, LpAppname); MyIni.Write("Breaks", "0", LpAppname); MyIni.Write("Watches", "0", LpAppname); MyIni.Write("PicPack", "0", LpAppname); MyIni.Write("BREAKMODE", "1", LpAppname); m_ZpjOPenFlag = true; }
3、添加Bas文件到Zpj項目里面。
//添加bas文件 private void AddBas_Click(object sender, EventArgs e) { if (!m_ZpjOPenFlag) { MessageBox.Show("先新建/打開ZPJ項目!"); return; } //創建打開文件對話框 OpenFileDialog ofd2 = new OpenFileDialog(); ofd2.Filter = "ZMC Basic Files (*.bas)|*.bas"; ofd2.RestoreDirectory = true; //如果文件選擇成功 if (ofd2.ShowDialog() == DialogResult.OK) { string fullname = ofd2.FileName; m_ZpjFilePath = System.IO.Path.GetDirectoryName(fullname); //路徑 m_SubFileName = System.IO.Path.GetFileName(fullname); //名稱 m_ZpjFile_Info[num].pFileName = m_SubFileName; m_ZpjFile_Info[num].nAutoTask = -1; m_ZpjFile_Info[num].nFileType= 1; //bas的文件類型是1 num++; //通過Ini文件來記錄Zpj項目文件信息 SaveZpj(); //在控件上顯示出來項目文件信息 ShowFileList(); } } //保存ZPJ文件 public void SaveZpj() { //打開ZPJ的ini文件 string IniFileName = m_ZpjFilePath + "" + m_ZpjFileName; var MyIni = new IniFile(IniFileName); string LpAppname, Lpkeynum, Lpdata; LpAppname = "Controller"; Lpkeynum = "TypeName "; String iFileName = ""; MyIni.Write("Files", num.ToString(), LpAppname); //寫FileList信息 LpAppname = "FileList"; //遍歷ZPJ里面的文件情況 int i=0; for (i = 0; i < num; i++) { if (m_ZpjFile_Info[i].pFileName == "") { Lpdata = "空文件!" + m_ZpjFile_Info[i].nAutoTask.ToString(); } //子文件名帶路徑 iFileName = m_ZpjFilePath + "\" + m_ZpjFile_Info[i].pFileName; if (!System.IO.File.Exists(iFileName)) { Lpdata = "文件不存在!" + m_ZpjFile_Info[i].pFileName; MessageBox.Show(Lpdata); } //更新子文件ID Lpkeynum = "File" + (i + 1); Lpdata = m_ZpjFile_Info[i].pFileName; MyIni.Write(Lpkeynum, Lpdata, LpAppname); //更新子文件類型 Lpkeynum = "FileType" + (i + 1); Lpdata = m_ZpjFile_Info[i].nFileType.ToString(); MyIni.Write(Lpkeynum, Lpdata, LpAppname); //更新子文件自動運行號 Lpkeynum = "AutoRun" + (i + 1); Lpdata = m_ZpjFile_Info[i].nAutoTask.ToString(); MyIni.Write(Lpkeynum, Lpdata, LpAppname); } //刪除多余的鍵 Lpkeynum = "File" + (num+1); MyIni.DeleteKey(Lpkeynum, LpAppname); Lpkeynum = "FileType" + (num + 1); MyIni.DeleteKey(Lpkeynum, LpAppname); Lpkeynum = "AutoRun" + (num + 1); MyIni.DeleteKey(Lpkeynum, LpAppname); //寫OpenList信息 LpAppname = "OpenList"; m_ZpjOPenFlag = true; }
4、添加Zml文件到Zpj項目里面。
//添加zml文件 private void AddZml_Click(object sender, EventArgs e) { if (!m_ZpjOPenFlag) { MessageBox.Show("先新建/打開ZPJ項目!"); return; } OpenFileDialog ofd2 = new OpenFileDialog(); ofd2.Filter = "ZMC ZML Files (*.zml)|*.zml"; ofd2.RestoreDirectory = true; if (ofd2.ShowDialog() == DialogResult.OK) { string fullname = ofd2.FileName; m_ZpjFilePath = System.IO.Path.GetDirectoryName(fullname); //路徑 m_SubFileName = System.IO.Path.GetFileName(fullname); //名稱 m_ZpjFile_Info[num].pFileName = m_SubFileName; m_ZpjFile_Info[num].nAutoTask = -1; m_ZpjFile_Info[num].nFileType = 19;//ZML文件的文件類型是19 num++; //通過Ini文件來記錄Zpj項目文件信息 SaveZpj(); //在控件上顯示出來項目文件信息 ShowFileList(); } }
5、將ZPJ文件下載到控制器的ROM里面進行掉電保存。
//下載到rom private void button9_Click(object sender, EventArgs e) { if (!m_ZpjOPenFlag) { MessageBox.Show("先新建/打開ZPJ項目!"); return; } if (g_handle != (IntPtr)0) { ShowFileListSave(); SaveZpj(); String ZpjFileName = m_ZpjFilePath + "" + m_ZpjFileName; String m_ZarFileName = m_ZpjFilePath + "" + "ZmcZpj.Zar"; //將ZPJ項目下載到控制器的ROM里面 zmcaux.ZAux_ZpjDown(g_handle, ZpjFileName, m_ZarFileName, null, 0, 1); } else { MessageBox.Show("控制器未連接"); } }
6、通過RTSys軟件監控Zpj文件下載后的執行情況。
本次,正運動技術項目工程下載與XML配置文件下載:EtherCAT超高速實時運動控制卡XPCIE1032H上位機C#開發(十),就分享到這里。
更多精彩內容請關注“正運動小助手”公眾號,需要相關開發環境與例程代碼,請咨詢正運動技術銷售工程師。
本文由正運動技術原創,歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。
審核編輯 黃宇
-
運動控制
+關注
關注
4文章
589瀏覽量
32988 -
運動控制卡
+關注
關注
7文章
114瀏覽量
15514 -
ethercat
+關注
關注
19文章
737瀏覽量
38892 -
正運動技術
+關注
關注
0文章
104瀏覽量
457
發布評論請先 登錄
相關推薦
評論