|
今天,正運動小助手給大家分享一下強實時運動控製內核MotionRT750下PC上位機的EtherCAT總線初始化。
PC上位機EtherCAT總線的初始化方式主要分為兩種:純上位機初始化和下載BASIC腳本初始化。上節課程給大家講解了如何通過純上位機的方法來實現PC上位機EtherCAT總線初始化【詳情點擊→PC強實時運動控製(一):C#的EtherCAT總線初始化(上)】。
本文將詳細講解如何通過使用ZMotionTools工具配置得到的ZAR文件來進行EtherCAT總線初始化。
這裏所說的EtherCAT總線初始化,是指正運動的控製器作為主站和EtherCAT的驅動器等從站建立正常通訊,並把各個驅動器映射到控製器的對應軸上的過程。(默認第一個驅動器是0軸,第二個驅動器是1軸,以此類推)
1.脈衝步進驅動器
脈衝步進驅動器一般上電即可使能,把控製器對應軸的軸類型設置成1或者7,然後就可以發送運動指令去控製了。
2.脈衝伺服驅動器
脈(mai)衝(chong)伺(si)服(fu)驅(qu)動(dong)器(qi)的(de)使(shi)能(neng)操(cao)作(zuo),通(tong)常(chang)是(shi)將(jiang)控(kong)製(zhi)器(qi)的(de)輸(shu)出(chu)口(kou)連(lian)接(jie)至(zhi)驅(qu)動(dong)器(qi)對(dui)應(ying)的(de)使(shi)能(neng)口(kou),再(zai)由(you)控(kong)製(zhi)器(qi)通(tong)過(guo)控(kong)製(zhi)對(dui)應(ying)輸(shu)出(chu)口(kou)的(de)開(kai)關(guan)狀(zhuang)態(tai)來(lai)實(shi)現(xian)脈(mai)衝(chong)伺(si)服(fu)驅(qu)動(dong)器(qi)的(de)使(shi)能(neng);使能後把控製器對應軸的軸類型設置成4,然後就可以發送運動指令去控製了。
3.總線驅動器
總線驅動器相對複雜一點,需先由控製器執行總線初始化程序後控製器和驅動器通訊上,總線驅動器的使能可以通過ZAux_Direct_SetAxisEnable接口去控製,總線驅動器跑位置模式時,軸類型設置成65,就可以發送運動指令去控製了。
一.全國產強實時運動控製內核MotionRT750
MotionRT750是正運動技術首家自主自研的x86架構Windows係統或Linux係統下獨占確定CPU的強實時運動控製內核。

該方案采用獨占確定CPU內核技術實現超強性能的強實時運動控製。它將核心的運動控製、機器人算法、數控(CNC)及機器視覺等強實時的任務,集中運行在1-2個專用CPU核上。與此同時,其餘CPU核則專注於處理Windows/Linux相關的非實時任務。
此外集成MotionRT750 Runtimeshishicengyucaozuoxitongfeishishiceng,bingliyonggaosugongxiangneicunjinxingshujujiaohu,xianzhutishengleyundongkongzhiyushangcengyingyongjiandetongxinxiaolvjihanshuzhixingsudu,zuizhongshixiangengwending、更高效的智能裝備控製,確保了運動控製任務的絕對實時性與係統穩定性,特別適用於半導體、電子裝備等高速高精的應用場合。

MotionRT750應用優勢:
1.跨平台兼容性:支持Windows/Linux係統,適配不同等級CPU。
2.開發靈活性:提供多語言編程接口,便於二次開發與功能定製。
3.實時性提升:通過CPU內核獨占機製與高效LOCAL接口,實現2-3us指令交互周期,較傳統PCI/PCIe方案提速近20倍。
4.擴展能力強化:多卡多EtherCAT通道架構支持254軸運動控製及500us EtherCAT周期。
5.係統穩定性:32軸125us EtherCAT冗餘架構消除單點故障風險,保障連續生產。
6.安全可靠性:不懼Windows係統崩潰影響,藍屏時仍可維持急停與安全停機功能有效,確保產線安全運行。
7.功能擴展性:實時內核支持C語言程序開發,方便功能拓展與實時代碼提升效率。
MotionRT750視頻介紹可點擊→正運動強實時運動控製內核MotionRT750。
更多關於MotionRT750的詳情介紹與使用點擊→強實時運動控製內核MotionRT750(一):驅動安裝、內核配置與使用。
二.C#語言進行項目開發
1.在VS2019菜單“文件”→“新建”→“項目”,啟動創建項目向導。

2.選擇開發語言為“C#”和Windows窗體應用程序,點擊下一步。

3.配置好項目名稱和位置,以及相應框架,點擊創建。

4.找到廠家提供的光盤資料裏麵的C#函數庫,路徑如下(64位庫為例)。
進入廠商提供的光盤資料,找到zauxdll.dll,zmotion.dll和Zmcaux.cs這三個庫文件。庫文件路徑:【00光盤資料】→【04PC函數】→【01PC函數庫V2.1】→【Windows平台】→【C#】→【64位】→【庫文件】。

5.將廠商提供的C#的庫文件以及相關文件複製到新建的項目中。
(1)將zmcaux.cs文件複製到新建的項目裏麵中。

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

(3)將Zmcaux.cs文件添加進項目中。右鍵項目名稱,選擇添加,再選擇現有項,選擇Zmcaux.cs文件。

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

7.至此,項目新建完成,可進行C#項目開發。
三.PC函數介紹
PC函數手冊可在光盤資料獲取,具體路徑如下:“00光盤資料\03編程手冊\03ZMotion PC函數庫編程手冊”。






四.使用ZMotionTools工具配置並生成ZAR文件
在ZMotionToolsQT文件中找到使用手冊,參考《ZMotionTools使用手冊.pdf》進行調試工作,當總線初始化正常且無差錯,手動調試和回零動作均正常後,便可導出ZAR文件給上位機軟件工程師使用。

五.總線初始化的ZAR文件導出步驟
點擊【4_配置導入與保存】進入保存界麵,再點擊【配置更新到控製器】後,先瀏覽導出文件路徑(存儲文件路徑不要有中文),再點擊【導出】,等待提示文件導出成功。

在導出的文件夾內,還存在一個名為【ZmcEcatConfig】的子文件夾,其中的【ZmcEcatConfig.zar】文件即為我們工具導出的配置文件,上位機軟件工程師直接拷貝該ZAR文件使用即可。

六.C#項目如何使用配置工具導出ZAR文件進行EtherCAT總線初始化
1.將ZmotionTools工具導出的ZAR文件放置在C#項目的ZAR文件目錄下,實際開發項目時可根據需求自定義路徑。

2.上位機如何下載ZAR腳本進行總線初始化,並等待總線初始化完成。

打包好的ZAR文件裏麵中有定義一個全局變量【EcatInitStatus】,這個變量對總線初始化的完成情況有如下如下定義:
? -1 — 未進行
? 0 — 初始化失敗
? 1 — 初始化完成,初始化OK
? 2 — 從站個數對不上(配置軟件設置【總線節點數】大於0後才生效)
? 3 — 總線軸個數對不上(配置軟件設置【總線驅動器軸數】大於0後才生效)

所以上位機可以通過【ZAux_Direct_GetVariableInt】去獲取ZAR文件裏麵定義的全局變量的數值來判斷總線初始化是否成功,當然總線初始化是需要時間的。
我們一般把ZAR程序下載後,上位機通過While循環(可以設置一個超時時間比如30秒)在超時時間內每隔50ms就去獲取一次變量【EcatInitStatus】的值。
如果返回值不等於-1就說明總線初始化腳本執行結束了,然後根據返回值去判斷是否成功。如果返回值等於-1就需要一直獲取變量【EcatInitStatus】的值直到超過自己設置的超時時間就報警。
上位機具體代碼如下:
//選擇RAM模式下載ZAR文件到控製器進行總線初始化
int ret = zmcaux.ZAux_ZarDown(g_handle, filePaths[0], 0);
//如果ZAR文件下載成功
if (0 == ret)
{
//等待2秒後再去獲取總線初始化情況
Thread.Sleep(2000);
//設置while循環的超時時間是30s
int Time0ut = 30000;
while (Time0ut > 0)
{
//獲取總線初始化狀態的標誌位
ret = zmcaux.ZAux_Direct_GetVariableInt(g_handle, "EcatInitStatus", ref EcatInitStatus);
if ((ret == 0) && (-1 != EcatInitStatus))
{
if (0 == EcatInitStatus)
{
MessageBox.Show("總線初始化失敗");
}
else if (1 == EcatInitStatus)
{
MessageBox.Show("總線初始化成功");
}
else if (2 == EcatInitStatus)
{
MessageBox.Show("總線掃描,發現節點個數和設置的不對應");
}
else if (3 == EcatInitStatus)
{
MessageBox.Show("總線掃描,發現總線軸個數和設置的不對應");
}
break;
}
//超時時間減100ms
Thread.Sleep(100);
Time0ut = Time0ut - 100;
}
}
3.上位機如何實現總線通訊的軟複位。

在ZAR腳本中存在一個死循環,當檢測到總線初始化的狀態標誌位不為1時,會重新執行總線初始化程序。因此,若驅動器中途斷電導致總線通訊中斷,需重新進行總線初始化時,上位機通過【ZAux_Direct_SetUserVar】指令將總線初始化腳本變量【EcatInitStatus】設置為-1即可。
上位機具體代碼如下:
//重新進行總線初始化
int Err = zmcaux.ZAux_Direct_SetUserVar(g_handle, "EcatInitStatus", -1);
//如果重新總線初始化的指令下發成功
if (0 == Err)
{
Thread.Sleep(2000);
//等待2秒後再去獲取總線初始化情況
int TimeOut = 30000;
//設置while循環的超時時間是30s
int EcatInitStatus = -1;
//總線初始化狀態
while (TimeOut > 0)
{
//獲取總線初始化狀態的標誌位
Err = zmcaux.ZAux_Direct_GetVariableInt(g_handle, "EcatInitStatus", ref EcatInitStatus);
if ((Err == 0) && (-1 != EcatInitStatus))
{
if (0 == EcatInitStatus)
{
MessageBox.Show("總線初始化失敗");
}
else if (1 == EcatInitStatus)
{
MessageBox.Show("總線初始化成功");
}
else if (2 == EcatInitStatus)
{
MessageBox.Show("總線掃描,發現節點個數和設置的不對應");
}
else if (3 == EcatInitStatus)
{
MessageBox.Show("總線掃描,發現總線軸個數和設置的不對應");
}
break;
}
//超時時間減100ms
Thread.Sleep(100);
TimeOut = TimeOut - 100;
}
}
4.上位機驅動器報警如何清除報警。
如果總線軸的軸狀態AxisStatus的bit3為1並且bit2為0的話,就是總線驅動器有報警並且總線通訊是沒有斷開的,比如AxisStatus是8h這個情況。這個時候我們上位機可以發送驅動器報警清除進行報警清除。
上位機具體代碼如下:
//報警的軸號
uint AlmAxisId = 0;
//清除軸AlmAxisId驅動器的當前報警
int Err = zmcaux.ZAux_BusCmd_DriveClear(g_handle, AlmAxisId, 0);
//等待比較清除完成
Thread.Sleep(500);
Err = zmcaux.ZAux_Direct_Single_Datum(g_handle, (int)AlmAxisId, 0);//清除控製器報警
Err = zmcaux.ZAux_Direct_SetAxisEnable(g_handle, (int)AlmAxisId, 1);//對報警的軸重新上使能
5.例程使用。
選擇LOCAL連接方式並點擊【連接】。待彈出連接成功提示框後,點擊【總線掃描】;若初始化成功,相關節點信息將顯示在表格中,命令與輸出窗口也會同步呈現相應提示。

教學視頻請點擊→PC強實時運動控製(二):C#的EtherCAT總線初始化(下)
完整代碼獲取地址
▼

本次,正運動技術PC強實時運動控製(二):C#的EtherCAT總線初始化(下),就分享到這裏。
|