XPCIE1032H功能簡(jiǎn)介
XPCIE1032H是一款基于PCI Express的EtherCAT總線運(yùn)動(dòng)控制卡,可選6-64軸運(yùn)動(dòng)控制,支持多路高速數(shù)字輸入輸出,可輕松實(shí)現(xiàn)多軸同步控制和高速數(shù)據(jù)傳輸。
XPCIE1032H運(yùn)動(dòng)控制卡集成了強(qiáng)大的運(yùn)動(dòng)控制功能,結(jié)合MotionRT7運(yùn)動(dòng)控制實(shí)時(shí)軟核,解決了高速高精應(yīng)用中,PC Windows開(kāi)發(fā)的非實(shí)時(shí)痛點(diǎn),指令交互速度比傳統(tǒng)的PCI/PCIe快10倍。

XPCIE1032H 運(yùn)動(dòng)控制卡支持PWM,PSO功能,板載16進(jìn)16出通用IO口,其中輸出口全部為高速輸出口,可配置為4路PWM輸出口或者16路高速PSO硬件比較輸出口。輸入口含有8路高速輸入口,可配置為4路高速色標(biāo)鎖存或兩路編碼器輸入。
XPCIE1032H運(yùn)動(dòng)控制卡搭配MotionRT7實(shí)時(shí)內(nèi)核,使用本地LOCAL接口連接,通過(guò)高速的核內(nèi)交互 ,可以做到更快速的指令交互,單條指令與多條指令一次性交互時(shí)間可以達(dá)到3-5us左右。

?XPCIE1032H運(yùn)動(dòng)控制卡與MotionRT7運(yùn)動(dòng)控制實(shí)時(shí)內(nèi)核的配合具有以下優(yōu)勢(shì):

1.支持多種上位機(jī)語(yǔ)言開(kāi)發(fā),所有系列產(chǎn)品均可調(diào)用同一套API函數(shù)庫(kù);
2.借助核內(nèi)交互,可以快速調(diào)用 運(yùn)動(dòng)指令,響應(yīng)時(shí)間快至微秒級(jí),比傳統(tǒng)PCI/PCIe快10倍;
3.解決傳統(tǒng)PCI/PCIe運(yùn)動(dòng)控制卡在Windows環(huán)境下控制系統(tǒng)的非實(shí)時(shí)性問(wèn)題;
4.支持一維/二維/三維PSO(高速硬件位置比較輸出),適用于視覺(jué)飛拍、精密點(diǎn)膠和激光能量控制等應(yīng)用;
5.提供高速輸入接口,便于實(shí)現(xiàn)位置鎖存;
6.支持EtherCAT總線和脈沖輸出混合聯(lián)動(dòng)、混合插補(bǔ)。

?使用XPCIE1032H運(yùn)動(dòng)控制卡和MotionRT7運(yùn)動(dòng)控制實(shí)時(shí)內(nèi)核進(jìn)行項(xiàng)目開(kāi)發(fā)時(shí),通常需要進(jìn)行以下步驟:
1.安裝驅(qū)動(dòng)程序,識(shí)別控制卡XPCIE1032H;
2.打開(kāi)并執(zhí)行文件“MotionRT710.exe”,配置參數(shù)和運(yùn)行運(yùn)動(dòng)控制實(shí)時(shí)內(nèi)核;
3.使用ZDevelop軟件連接到控制器,進(jìn)行參數(shù)監(jiān)控。連接時(shí)請(qǐng)使用PCI/LOCAL方式,并確保ZDevelop軟件版本在3.10以上;
4.完成控制程序開(kāi)發(fā),通過(guò)LOCAL鏈接方式連接到運(yùn)動(dòng)控制卡,實(shí)現(xiàn)實(shí)時(shí)運(yùn)動(dòng)控制。

?與傳統(tǒng)PCI/PCIe卡和PLC的測(cè)試數(shù)據(jù)結(jié)果對(duì)比:

我們可以從測(cè)試對(duì)比結(jié)果看出,XPCIE1032H運(yùn)動(dòng)控制卡配合實(shí)時(shí)運(yùn)動(dòng)控制內(nèi)核MotionRT7,在LOCAL鏈接(核內(nèi)交互)的方式下,指令交互的效率是非常穩(wěn)定,當(dāng)測(cè)試數(shù)量從1w增加到10w時(shí),單條指令交互時(shí)間與多條指令交互時(shí)間波動(dòng)不大,非常適用于高速高精的應(yīng)用。
XPCIE1032H控制卡安裝
一、C#語(yǔ)言進(jìn)行運(yùn)動(dòng)控制項(xiàng)目開(kāi)發(fā)

1.到正運(yùn)動(dòng)技術(shù)官網(wǎng)的下載中心選擇需要的平臺(tái)庫(kù)文件。
庫(kù)文件下載地址: http://www.zmotion.com.cn/download_list_21.html

2.解壓下載的安裝包找到“ Zmcaux.cs ”,“ zauxdll.dll ”,“ zmotion.dll ”放入到項(xiàng)目文件中。
(1)“Zmcaux.cs”放在項(xiàng)目根目錄文件中,與bin目錄同級(jí)。

(2)“zauxdll.dll”,“zmotion.dll”放在bin → Debug。

3.用vs打開(kāi)新建的項(xiàng)目文件,在右邊的解決方案資源管理器中點(diǎn)擊顯示所有,然后鼠標(biāo)右鍵點(diǎn)擊zmcaux.cs文件,點(diǎn)擊包括在項(xiàng)目中。


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

二、PC函數(shù)介紹
相關(guān)PC函數(shù)介紹詳情可參考“ZMotion PC函數(shù)庫(kù)編程手冊(cè) V2.1.1”。


三、XML文件生成ZML文件添加步驟
大家都知道,正運(yùn)動(dòng)總線控制器事先就把一些總線從站的 XML文件 添加到控制器的固件里面了,所以配合市面上大部分的EtherCAT從站,客戶只需要下載總線初始化腳本就可以和對(duì)應(yīng)從站通訊,具體可以參考往期推文 EtherCAT超高速實(shí)時(shí)運(yùn)動(dòng)控制卡XPCIE1032H上位機(jī)C#開(kāi)發(fā)(二):EtherCAT總線初始化 。
針對(duì)市面上剛出的總線從站,我們沒(méi)有及時(shí)把XML文件添加到控制器固件里面或總線掃描的時(shí)候遇見(jiàn)不支持的從站,這個(gè)時(shí)候需要我們自己添加X(jué)ML文件。

正運(yùn)動(dòng)控制器添加X(jué)ML文件的步驟如下:
(1)通過(guò)XMLParsingTools工具軟件將XML轉(zhuǎn)換成ZML文件;
(2)把生成的ZML文件添加到Zpj項(xiàng)目里面,連同總線初始化腳本的Bas文件一起下載到控制器里面即可。
1、通過(guò)XMLParsingTools工具將XML文件轉(zhuǎn)換成ZML文件。
(1)點(diǎn)擊左上角文件夾打開(kāi)XML文件,選擇對(duì)應(yīng)的從站型號(hào)和從站類(lèi)型( 這里以友商的一拖四總線驅(qū)動(dòng)器為例)。

(2)點(diǎn)擊左上角文件夾位置導(dǎo)出ZML文件即可。

2、RTSys軟件同時(shí)下載ZML文件與總線初始化的Bas文件(下載ZPJ項(xiàng)目)。
(1)把剛剛生成的ZML文件拷貝到總線初始化的ZPJ項(xiàng)目文件夾下,通過(guò)RTSys軟件打開(kāi)【EtherCAT參數(shù).zpj】這個(gè)項(xiàng)目文件。

(2)右鍵文件視圖區(qū)域,點(diǎn)擊【增加到項(xiàng)目】將剛剛生成的ZML文件添加到項(xiàng)目里面。

(3)點(diǎn)擊連接按鈕,通過(guò)Local接口鏈接上控制器。

(4)點(diǎn)擊【下載到ROM】,將整個(gè)項(xiàng)目下載到控制器里面掉電保存即可。

3.將例程下載到ZML文件與總線初始化的Bas文件。
連接控制器,新建ZPJ項(xiàng)目文件,將總線初始化的Bas文件和剛剛生成的zml文件復(fù)制到新建項(xiàng)目的目錄下并一一添加進(jìn)來(lái),最后下載到控制器的ROM里面即可掉電保存。

三、應(yīng)用例程及實(shí)現(xiàn)效果
1、點(diǎn)擊連接按鈕鏈接到MotionRT7運(yùn)動(dòng)控制軟核。
//連接控制器
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鏈接失敗"+"錯(cuò)誤代碼"+ ret);
}
}
2、新建Zpj項(xiàng)目文件。
//新建zpj文件
private void NewZpjFile_Click(object sender, EventArgs e)
{
try
{
//創(chuàng)建保存文件對(duì)話框
SaveFileDialog saveFile = new SaveFileDialog();
saveFile.Filter = "ZMC Project Files(*.zpj)|*.zpj";
//是否覆蓋當(dāng)前文件
saveFile.OverwritePrompt = true;
//如果設(shè)為true就會(huì)使用系統(tǒng)默認(rèn)目錄
saveFile.RestoreDirectory = true; //還原目錄
//如果保存對(duì)話框操作成功
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文件信息_通過(guò)Ini文件記錄
public void Czpj()
{
string LpAppname, Lpkeynum, Lpdata;
LpAppname = "Controller";
Lpkeynum = "TypeName ";
//寫(xiě)控制器信息,初始化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項(xiàng)目里面。
//添加bas文件
private void AddBas_Click(object sender, EventArgs e)
{
if (!m_ZpjOPenFlag)
{
MessageBox.Show("先新建/打開(kāi)ZPJ項(xiàng)目!");
return;
}
//創(chuàng)建打開(kāi)文件對(duì)話框
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); //名稱(chēng)
m_ZpjFile_Info[num].pFileName = m_SubFileName;
m_ZpjFile_Info[num].nAutoTask = -1;
m_ZpjFile_Info[num].nFileType= 1; //bas的文件類(lèi)型是1
num++;
//通過(guò)Ini文件來(lái)記錄Zpj項(xiàng)目文件信息
SaveZpj();
//在控件上顯示出來(lái)項(xiàng)目文件信息
ShowFileList();
}
}
//保存ZPJ文件
public void SaveZpj()
{
//打開(kāi)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);
//寫(xiě)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);
//更新子文件類(lèi)型
Lpkeynum = "FileType" + (i + 1);
Lpdata = m_ZpjFile_Info[i].nFileType.ToString();
MyIni.Write(Lpkeynum, Lpdata, LpAppname);
//更新子文件自動(dòng)運(yùn)行號(hào)
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);
//寫(xiě)OpenList信息
LpAppname = "OpenList";
m_ZpjOPenFlag = true;
}
4、添加Zml文件到Zpj項(xiàng)目里面。
//添加zml文件
private void AddZml_Click(object sender, EventArgs e)
{
if (!m_ZpjOPenFlag)
{
MessageBox.Show("先新建/打開(kāi)ZPJ項(xiàng)目!");
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); //名稱(chēng)
m_ZpjFile_Info[num].pFileName = m_SubFileName;
m_ZpjFile_Info[num].nAutoTask = -1;
m_ZpjFile_Info[num].nFileType = 19;//ZML文件的文件類(lèi)型是19
num++;
//通過(guò)Ini文件來(lái)記錄Zpj項(xiàng)目文件信息
SaveZpj();
//在控件上顯示出來(lái)項(xiàng)目文件信息
ShowFileList();
}
}
5、將ZPJ文件下載到控制器的ROM里面進(jìn)行掉電保存。
//下載到rom
private void button9_Click(object sender, EventArgs e)
{
if (!m_ZpjOPenFlag)
{
MessageBox.Show("先新建/打開(kāi)ZPJ項(xiàng)目!");
return;
}
if (g_handle != (IntPtr)0)
{
ShowFileListSave();
SaveZpj();
String ZpjFileName = m_ZpjFilePath + "\\" + m_ZpjFileName;
String m_ZarFileName = m_ZpjFilePath + "\\" + "ZmcZpj.Zar";
//將ZPJ項(xiàng)目下載到控制器的ROM里面
zmcaux.ZAux_ZpjDown(g_handle, ZpjFileName, m_ZarFileName, null, 0, 1);
}
else
{
MessageBox.Show("控制器未連接");
}
}
6、通過(guò)RTSys軟件監(jiān)控Zpj文件下載后的執(zhí)行情況。

XML轉(zhuǎn)換工具使用教學(xué):

本次,正運(yùn)動(dòng)技術(shù) 項(xiàng)目工程下載與XML配置文件下載 :EtherCAT超高速實(shí)時(shí)運(yùn)動(dòng)控制卡XPCIE1032H上位機(jī)C#開(kāi)發(fā)(十),就分享到這里。
更多精彩內(nèi)容請(qǐng)關(guān)注“ 正運(yùn)動(dòng)小助手 ”公眾號(hào),需要相關(guān)開(kāi)發(fā)環(huán)境與例程代碼,請(qǐng)咨詢正運(yùn)動(dòng)技術(shù)銷(xiāo)售工程師。
本文由正運(yùn)動(dòng)技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國(guó)智能制造水平。文章版權(quán)歸正運(yùn)動(dòng)技術(shù)所有,如有轉(zhuǎn)載請(qǐng)注明文章來(lái)源。
正運(yùn)動(dòng)技術(shù)專(zhuān)注于運(yùn)動(dòng)控制技術(shù)研究和通用運(yùn)動(dòng)控制軟硬件產(chǎn)品的研發(fā),是國(guó)家級(jí)高新技術(shù)企業(yè)。正運(yùn)動(dòng)技術(shù)匯集了來(lái)自華為、中興等公司的優(yōu)秀人才,在堅(jiān)持自主創(chuàng)新的同時(shí),積極聯(lián)合各大高校協(xié)同運(yùn)動(dòng)控制基礎(chǔ)技術(shù)的研究,是國(guó)內(nèi)工控領(lǐng)域發(fā)展最快的企業(yè)之一,也是國(guó)內(nèi)少有、完整掌握運(yùn)動(dòng)控制核心技術(shù)和實(shí)時(shí)工控軟件平臺(tái)技術(shù)的企業(yè)。主要業(yè)務(wù)有:運(yùn)動(dòng)控制卡_運(yùn)動(dòng)控制器_EtherCAT運(yùn)動(dòng)控制卡_EtherCAT控制器_運(yùn)動(dòng)控制系統(tǒng)_視覺(jué)控制器__運(yùn)動(dòng)控制PLC_運(yùn)動(dòng)控制_機(jī)器人控制器_視覺(jué)定位_XPCIe/XPCI系列運(yùn)動(dòng)控制卡等等。

|