MotionRT750是正運動技術首家自主自研的x86架構Windows系統或Linux系統下獨占確定CPU的強實時運動控制內核。

該方案采用獨占確定CPU內核技術實現超強性能的強實時運動控制。它將核心的運動控制、機器人算法、數控(CNC)及機器視覺等強實時的任務,集中運行在1-2個專用CPU核上。與此同時,其余CPU核則專注于處理Windows/Linux相關的非實時任務。
此外集成MotionRT750 Runtime實時層與操作系統非實時層,并利用高速共享內存進行數據交互,顯著提升了運動控制與上層應用間的通信效率及函數執行速度,最終實現更穩定、更高效的智能裝備控制,確保了運動控制任務的絕對實時性與系統穩定性,特別適用于半導體、電子裝備等高速高精的應用場合。

MotionRT750應用優勢:
1.跨平臺兼容性:支持Windows/Linux系統,適配不同等級CPU。
2.開發靈活性:提供多語言編程接口,便于二次開發與功能定制。
3.實時性提升:通過CPU內核獨占機制與高效LOCAL接口,實現2-3μs指令交互周期,較傳統PCI/PCIe方案提速近20倍。
4.擴展能力強化:多卡多EtherCAT通道架構支持254軸運動控制及500μsEtherCAT周期。
5.系統穩定性:32軸125μsEtherCAT冗余架構消除單點故障風險,保障連續生產。
6.安全可靠性:不懼Windows系統崩潰影響,藍屏時仍可維持急停與安全停機功能有效,確保產線安全運行。
7.功能擴展性:實時內核支持C語言程序開發,方便功能拓展與實時代碼提升效率。
更多關于MotionRT750的詳情介紹與使用點擊→強實時運動控制內核MotionRT750(一):驅動安裝、內核配置與使用。
XPCIE6032H運動控制卡集成6路獨立EtherCAT主站接口。整卡最高可支持254軸運動控制;125usEtherCAT通訊周期時,兩個端口配置冗余最高可支持32軸運動控制。6個EtherCAT主站各通道獨立工作,多EtherCAT主站互不影響。

此外,對于EtherCAT接口數量需求不高的客戶,我們也有衍生型號XPCIE2032H可選。同系列產品XPCIE2032H集成2路獨立EtherCAT接口。整卡最高可支持至254軸運動控制;125usEtherCAT通訊周期時,單接口最高可支持32軸運動控制。2個EtherCAT主站各通道獨立工作,多EtherCAT主站互不影響。

XPCIE6032H運動控制卡面向半導體設備、精密3C電子、生物醫療儀器、新能源裝備、人形機器人及激光加工等高速高精場景,為固晶機、貼片機、分選機、鋰電切疊一體機、高速異形插件設備等自動化裝備提供核心運動控制支持。
XPCIE6032H硬件特性:
1.EtherCAT通訊周期可到125us(需要主機性能與實時性足夠)。
2.板卡集成6路獨立的EtherCAT主站接口,最多可支持254軸運動控制。
3.搭載運動控制實時內核MotionRT750。
4.相較于傳統的PCI/PCIe、網口等通訊方式,速度可提升了10-100倍以上。
5.板載16路高速輸入,16路高速輸出。
6.板載4路高速鎖存、4路硬件位置比較輸出、4路通用PWM輸出。
更多關于XPCIE6032H的詳情介紹與使用點擊→全球首創!PCIe超實時6通道EtherCAT運動控制卡上市!。
XPCIE1032H是一款基于PCI Express的EtherCAT總線運動控制卡,可選6-64軸運動控制,支持多路高速數字輸入輸出,可輕松實現多軸同步控制和高速數據傳輸。

XPCIE1032H運動控制卡集成了強大的運動控制功能,結合MotionRT7運動控制實時軟核,解決了高速高精應用中,PC Windows開發的非實時痛點,指令交互速度比傳統的PCI/PCIe快10倍。

XPCIE1032H硬件特性:
1.6-64軸EtherCAT總線+脈沖可選,其中4路單端500KHz脈沖輸出。
2.16軸EtherCAT同步周期500us,支持多卡聯動。
3.板載16點通用輸入,16點通用輸出,其中8路高速輸入和16路高速輸出。
4.通過EtherCAT總線,可擴展到512個隔離輸入或輸出口。
5.支持PWM輸出、精準輸出、PSO硬件位置比較輸出、視覺飛拍等。
6.支持直線插補、圓弧插補、連續軌跡加工(速度前瞻)。
7.支持電子凸輪、電子齒輪、位置鎖存、同步跟隨、虛擬軸、螺距補償等功能。
8.支持30+機械手模型正逆解模型算法,比如SCARA、Delta、UVW、4軸/5軸 RTCP...
更多關于XPCIE1032H詳情點擊“不止10倍提速!PCIe EtherCAT實時運動控制卡XPCIE1032H 等您評測!”查看。
PCI Express®總線運動控制卡XPCIE1028,具備位置鎖存、多維高速硬件位置比較輸出PSO、同步跟隨、精準觸發的運動控制和I/O控制功能。配合正運動技術MotionRT7實時內核使用,可高度滿足高速視覺篩選機應用所需的運動控制需求。

XPCIE1028運動控制卡是正運動技術專為高速視覺篩選設備設計的一款PCI Express®總線運動控制卡,內置豐富的I/O、通訊接口,可以輕松地實現與視覺篩選機通信,非常匹配使用于1-12個相機+多個高速吹氣口的全自動CCD光學篩選機等設備上使用。

高速視覺篩選設備示意圖
XPCIE1028自帶8路高速輸入和多達16路高速硬件位置比較輸出,能夠輕松實現視覺飛拍和高速、精準觸發控制等視覺篩選機所需的多種實時性運動控制,以及高穩定性。脈沖輸出+編碼器反饋,可實現轉盤的旋轉,并實時記錄編碼器的實時反饋位置,幫您更加精準地控制設備。

XPCIE1028在光學篩選機上硬件方案1
(8相機+8排料)

XPCIE1028在光學篩選機上硬件方案2
(12相機+4排料)
XPCIE1028硬件特性:
1.支持電子凸輪、直線插補等運動控制功能。
2.板載28+2點通用輸入,32+2點通用輸出,其中8路高速輸入和16路高速輸出。
3.板載4路脈沖輸出,其中一路專用脈沖軸接口(差分脈沖輸出+編碼器反饋)。
4.支持8路高速鎖存輸入口,可記錄轉盤來料位置。
5.多達16路精準輸出、硬件位置比較輸出,機器視覺飛拍檢測和篩選吹氣高速輸出,可根據需求分配。
更多關于高速視覺篩選機方案詳情點擊“高速視覺篩選機PCI Express實時運動控制卡XPCIE1028”查看。
01 C#進行MotionRT750項目的創建與開發
本案例開發環境Visual Studio 2022。
1.打開Visual Studio 2022軟件選擇創建新項目。

2.選擇開發語言為“C#”和Windows窗體應用(.NET Framework)。

3.選擇項目名稱、文件目錄位置及框架。

4.將廠商提供的C#的庫文件復制到新建的項目中。
(1)將Zmcaux.cs文件復制到新建的項目里面。

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

5.打開新建的項目文件,在右邊的解決方案資源管理器中點擊顯示所有,然后鼠標右鍵點擊Zmcaux.cs文件,點擊包括在項目中。

6.進入Form1.cs代碼編輯界面,寫入using cszmcaux,并聲明控制器句柄g_handle。

7.至此項目新建完成,可以進行C#項目開發。
02 相關PC函數介紹










注:使用網口方式連接MotionRT750時,要將MotionRT750的Config配置Eth num值設置為一個大于0的數(0-12),輸入的ip地址為本機ip地址,可以在RTSys連接中直接查看。



03 相關測試代碼介紹
本次指令交互速度測試使用三種型號的控制器對比測試,以下測試為正運動實驗室測試數據,與配置的電腦與程序代碼等有關系,以下測試數據僅供客戶參考。客戶具體項目以客戶實際測試環境為準。
以下正運動實驗室測試為:XPCIE1032H(需搭配MotionRT750使用)、PCIE464、ZMC432-V2,MotionRT750可以通過LOCAL和網口方式連接,故本次MotionRT750測試使用LOCAL和網口兩種方式進行測試。
1.XPCIE1032H型號控制卡使用MotionRT750的LOCAL、網口連接方式測試。

2.ZMC432-V2型號控制器使用網口連接方式測試。

3.PCIE464型號控制卡使用PCI的連接方式測試。

①MotionRT750通過LOCAL連接按鈕的事件處理函數,調用函數ZAux_FastOpen(),選擇連接類型5去連接控制卡(LOCAL連接方式)。
private void localConct(object sender, EventArgs e)
{
//LOCAL方式連接
int ret = zmcaux.ZAux_FastOpen(5, comboBox2.Text, 1000, out handle);
if (ret == 0)
{
label5.Text = "已鏈接" + comboBox2.Text;
label5.BackColor = Color.Green;
}
else
{
MessageBox.Show("鏈接失敗,請選擇正確的LOCAL!");
}
}
②MotionRT750和ZMC432-V2型號控制器通過網口連接按鈕的事件處理函數,調用函數ZAux_OpenEth()去連接控制器(網口連接方式)。
private void IPConct(object sender, EventArgs e)
{
//網口方式連接
int ret = zmcaux.ZAux_OpenEth(textBox1.Text, out handle);
if (ret == 0)
{
label2.Text = "已鏈接" + textBox1.Text;
label2.BackColor = Color.Green;
}
else
{
MessageBox.Show("鏈接失敗,請輸入正確的ip!");
}
}
③PCIE464型號控制卡通過PCI連接按鈕的事件處理函數,調用函數ZAux_FastOpen(),選擇連接類型4去連接控制卡(PCI連接方式)。
private void pciConct(object sender, EventArgs e)
{
//PCI方式連接
int ret = zmcaux.ZAux_FastOpen(4, comboBox4.Text, 1000, out handle);
if (ret == 0)
{
label13.Text = "已鏈接" + comboBox4.Text;
label13.BackColor = Color.Green;
}
else
{
MessageBox.Show("鏈接失敗,請選擇正確的LOCAL!");
}
}
④通過單條指令交互周期的測試按鈕的事件處理函數來計算單條指令的交互平均耗時和總耗時。
private void run(object sender, EventArgs e)
{
//run函數用于測試單條指令交互周期與總耗時
float dpos = 0;
int testNum = Convert.ToInt32(comboBox3.Text.ToString());
//beforeDT記錄交互指令前的時刻
DateTime beforeDT = System.DateTime.Now;
for (int i = 0; i < testNum; i++)
{
//進行n次單指令交互
zmcaux.ZAux_Direct_GetDpos(handle, 0, ref dpos);
}
//afterDT記錄交互指令后的時刻
DateTime afterDT = System.DateTime.Now;
//計算beforeDT與afterDT的時間差
TimeSpan ts = afterDT - beforeDT;
//總耗時 ms
label11.Text = ts.TotalMilliseconds.ToString();
//平均耗時 us
label8.Text = (ts.TotalMilliseconds * 1000 / testNum).ToString();
label14.Text = dpos.ToString();
}
⑤通過多條指令交互周期的測試按鈕的事件處理函數來計算多條指令的交互平均耗時和總耗時。
private void runMuch(object sender, EventArgs e)
{
//runMuch函數用于測試多條指令交互周期與總耗時
int testNum = Convert.ToInt32(comboBox3.Text.ToString());
string cmd;
int star = 0;
StringBuilder cmdBuff = new StringBuilder(2048);
string[] tmp = new string[12];
cmd = "?dpos(0),dpos(1),dpos(2),dpos(3),axisstatus(0),axisstatus(1),axisstatus(2),axisstatus(3),in(0),in(1),in(2),in(3)";
//beforeDT記錄交互指令前的時刻
DateTime beforeDT = System.DateTime.Now;
for (int i = 0; i < testNum; i++)
{
zmcaux.ZAux_DirectCommand(handle, cmd, cmdBuff, 2048);
}
//afterDT記錄交互指令前的時刻
DateTime afterDT = System.DateTime.Now;
//計算beforeDT與afterDT的時間差
TimeSpan ts = afterDT - beforeDT;
//總耗時 ms
label23.Text = ts.TotalMilliseconds.ToString();
//平均耗時 us
label16.Text = (ts.TotalMilliseconds * 1000 / testNum).ToString();
string s = cmdBuff.ToString();
string[] arrS = new string[20];
for (int i = 0; i < s.Length; i++)
{
if (s[i] != 9)
{
arrS[star] += s[i];
}
else
{
star++;
continue;
}
}
}
⑥網口連接周期上報的方式獲取輸入口狀態的總耗時測試函數如下。
private void CycIoTest(object sender, EventArgs e)
{
int[] InState = new int[1000];
Int32 singleValue = 0;
//打開使能周期上報
zmcaux.ZAux_CycleUpEnable(handle,0,1000,"IN(0,1000)");
//強制上報一次,0 為通道號
zmcaux.ZAux_CycleUpForceOnce(handle, 0);
//beforeDT記錄交互指令前的時刻
DateTime beforeDT = System.DateTime.Now;
for (uint i = 0; i < 1000; i++)
{
//從周期上報內容里面讀取輸入口狀態
zmcaux.ZAux_CycleUpReadBuffInt(handle, 0, "IN", i, ref singleValue);
InState[i] = singleValue;
}
//afterDT記錄交互指令后的時刻
DateTime afterDT = System.DateTime.Now;
//計算beforeDT與afterDT的時間差
TimeSpan ts = afterDT - beforeDT;
//總耗時 ms
label57.Text = ts.TotalMilliseconds.ToString();
//關閉使能周期上報
zmcaux.ZAux_CycleUpDisable(handle, 0);
}
⑦單條指令讀取1個輸入口狀態的總耗時測試函數如下。
private void oneIo(object sender, EventArgs e)
{
UInt32 singleValue = 0;
uint[] InState = new uint[1000];
//beforeDT記錄交互指令前的時刻
DateTime beforeDT = System.DateTime.Now;
for (int i = 0; i < 1000; i++)
{
//單條指令讀取單個輸入口狀態
zmcaux.ZAux_Direct_GetIn(handle, i, ref singleValue);
InState[i] = singleValue;
}
//afterDT記錄交互指令后的時刻
DateTime afterDT = System.DateTime.Now;
//計算beforeDT與afterDT的時間差
TimeSpan ts = afterDT - beforeDT;
//總耗時 ms
label48.Text = ts.TotalMilliseconds.ToString();
}
⑧單條指令讀取多個輸入口狀態的總耗時測試函數如下。
private void muchIo(object sender, EventArgs e)
{
int[] InState = new int[32];
//beforeDT記錄交互指令前的時刻
DateTime beforeDT = System.DateTime.Now;
//單條指令讀取多個輸入口狀態,輸入口狀態按位進行存儲,一個INT型數組可以存儲32個輸入口狀態,可讀取32個及以上
zmcaux.ZAux_Direct_GetInMulti(handle, 0, 999, InState);
//afterDT記錄交互指令前的時刻
DateTime afterDT = System.DateTime.Now;
//計算beforeDT與afterDT的時間差
TimeSpan ts = afterDT - beforeDT;
//總耗時 ms
label19.Text = ts.TotalMilliseconds.ToString();
}
04 運行效果
1.MotionRT750通過LOCAL連接方式的單條指令和多條指令交互時間測試結果如下圖所示。

MotionRT750 LOCAL連接方式測試(1k次)

MotionRT750 LOCAL連接方式測試(1w次)

MotionRT750 LOCAL連接方式測試(10w次)
2.MotionRT750通過網口連接方式的單條指令和多條指令交互時間測試結果如下圖所示。

MotionRT750 網口連接方式測試(1k次)

MotionRT750 網口連接方式測試(1w次)

MotionRT750 網口連接方式測試(10w次)
3.ZMC432-V2控制器通過網口連接方式的單條指令和多條指令交互時間測試結果如下圖所示。

ZMC432-V2 網口連接方式測試(1k次)

ZMC432-V2 網口連接方式測試(1w次)

ZMC432-V2 網口連接方式測試(10w次)
4.PCIE464控制卡通過PCI連接方式的單條指令和多條指令交互時間測試結果如下圖所示。

PCIE464 PCI連接方式測試(1k次)

PCIE464 PCI連接方式測試(1w次)

PCIE464 PCI連接方式測試(10w次)
5.接下來是對IO狀態獲取的耗時測試,通過不同的IO狀態獲取模式(周期上報,單指令獲取1個或多個輸入口狀態),對比各連接方式下的總耗時,旨在為實際應用場景提供性能參考,提升數據獲取效率,確保系統能更高效穩定運行。
(1)MotionRT750通過網口連接方式使用周期上報功能獲取輸入口狀態、使用單條指令獲取1個輸入口狀態和使用單條指令獲取多個輸入口狀態,三種方式獲取1000個輸入口狀態的總耗時如下。

(2)ZMC432-V2控制器通過網口連接方式使用周期上報功能獲取輸入口狀態、使用單條指令獲取1個輸入口狀態和使用單條指令獲取多個輸入口狀態,三種方式獲取1000個輸入口狀態的總耗時如下。

(3)MotionRT750通過LOCAL連接方式時使用單條指令獲取1個輸入口狀態和單條指令獲取多個輸入口狀態,兩種方式獲取1000個輸入口狀態的總耗時如下。

(4)PCIE464控制卡通過PCI連接方式使用單條指令獲取1個輸入口狀態和單條指令獲取多個輸入口狀態,兩種方式獲取1000個輸入口狀態的總耗時如下。

05 分析與結論
1.對于MotionRT750的LOCAL方式連接、網口方式連接以及PCI方式和控制器網口方式連接時的單條或多條指令交互時間測試,從上面的運行效果圖的數據顯示來看,可以看出:
當進行1k、1w次和10w次的單指令交互或多條指令交互的時候,MotionRT750的LOCAL連接方式進行單條指令交互所需要的時間(平均2.2us左右)和一次性讀取12個狀態的多條指令交互所需要的時間(平均3.9us左右),都是要比PCI連接和控制器網口連接的方式更快(PCI單條平均38us左右、多條平均115us左右;網口單條平均169us、多條平均208us左右)。
而MotionRT750的網口連接方式的指令交互時間也是快于控制器網口連接方式的。
2.對于讀取輸入口狀態指令測試,從運行效果圖的顯示結果來看:
無論是MotionRT750還是控制器,在網口連接下周期上報功能效率最高,避免輪詢引發的多包數據傳輸耗時問題,提升帶寬利用率,總耗時大約僅需0.33ms;
而單指令批量讀取多個輸入口狀態因減少通信次數,耗時時間對比讀取單個輸入口降低約96%;
LOCAL和PCI連接時,雖不支持周期上報功能,但單指令對比下,批量讀取多個輸入口狀態的效率顯著高于讀取單個輸入口。
綜合來看,在實際應用中,選擇哪種數據獲取策略取決于具體的應用場景、數據特性和性能要求。
例如,如果程序需要快速響應單個事件,單條獲取可能更為合適。如果目標是最大化數據處理速度,多條獲取可能更有益。而對于需要定期維護數據新鮮度的應用,周期性獲取是必要的。
總結
綜上所述,我們可以從測試結果看出,MotionRT750的LOCAL連接方式展現卓越的實時性能,指令交互的效率也非常的穩定。
當測試次數從1k增加到1w、10w次時,指令交互時間波動不大,在延遲、穩定性上全面優于PCI和控制器網口的連接,更加適合高精度、高實時性、高穩定性的工業運動控制場景應用。
教學視頻可點擊→“強實時運動控制內核MotionRT750(三):us級高速交互之C#,為智能裝備提速”查看。
完整代碼獲取地址
▼

本次,正運動技術強實時運動控制內核MotionRT750(三):us級高速交互之C#,為智能裝備提速,就分享到這里。
更多精彩內容請關注“正運動小助手”公眾號,需要相關開發環境與例程代碼,請咨詢正運動技術銷售工程師:400-089-8936。
本文由正運動技術原創,歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。

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