|
今天,正運動小助手給大家分享一下強實時運動控製內核MotionRT750下PC上位機的EtherCAT總線初始化。
PC上位機EtherCAT總線的初始化方式主要分為兩種:純上位機初始化和下載BASIC腳本初始化。本文將詳細講解如何通過純上位機的方法來實現PC上位機EtherCAT總線初始化。
全國產強實時運動控製內核MotionRT750
MotionRT750是正運動技術首家自主自研的x86架構Windows係統或Linux係統下獨占確定CPU的強實時運動控製內核。

該方案采用獨占確定CPU內核技術實現超強性能的強實時運動控製。它將核心的運動控製、機器人算法、數控(CNC)及機器視覺等強實時的任務,集中運行在1-2個專用CPU核上。與此同時,其餘CPU核則專注於處理Windows/Linux相關的非實時任務。
此外集成MotionRT750 Runtime實(shi)時(shi)層(ceng)與(yu)操(cao)作(zuo)係(xi)統(tong)非(fei)實(shi)時(shi)層(ceng),並(bing)利(li)用(yong)高(gao)速(su)共(gong)享(xiang)內(nei)存(cun)進(jin)行(xing)數(shu)據(ju)交(jiao)互(hu),顯(xian)著(zhu)提(ti)升(sheng)了(le)運(yun)動(dong)控(kong)製(zhi)與(yu)上(shang)層(ceng)應(ying)用(yong)間(jian)的(de)通(tong)信(xin)效(xiao)率(lv)及(ji)函(han)數(shu)執(zhi)行(xing)速(su)度(du),最(zui)終(zhong)實(shi)現(xian)更(geng)穩(wen)定(ding)、更高效的智能裝備控製,確保了運動控製任務的絕對實時性與係統穩定性,特別適用於半導體、電子裝備等高速高精的應用場合。

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

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

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

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

5.使用純上位機總線初始化時需要找廠商提供ZMotionECAT.cs文件。

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

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

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

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

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

1.上位機連接MotionRT750的接口。

2.控製器回零模式。

3.驅動器回零模式。

03 PC純上位機總線初始流程

總線初始化代碼:
04 C#總線初始化功能展示例程介紹
一、選擇連接方式為LOCAL連接,點擊【連接】。彈出連接成功提示框後,配置總線軸地址參數和本地脈衝軸地址參數後,點擊【總線初始化】,會在界麵表格中顯示總線相關信息。

1.若無法成功總線初始化,命令與輸出窗口會打印相關錯誤信息。如:Unknown device man XXX Slot return error:3205.
報錯信息如下圖,則需要先詢問對應驅動器廠家提供XML文件。

解決方法:將驅動器廠家提供的XML文件,添加到RTSys項目的配置文件中。
(1)打開RTSys軟件,點擊【文件】,選擇【新建工程】。

(2)選擇文件路徑,輸入文件名,然後點擊【保存】。

(3)右鍵點擊【配置文件】,選擇【添加到配置文件】,選中要添加的XML文件後點擊【打開】。

(4)點擊菜單欄中的【控製器】,接著點擊【生成ZAR文件】,隨後點擊【瀏覽】來選擇生成ZAR文件的路徑。

(5)將生成的ZAR文件放在項目的ZAR文件夾中,隨後進行總線初始化。

具體代碼如下:
// 獲取解決方案根目錄
string solutionDir = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, @"..\..\..\"));
string zarPath = Path.Combine(solutionDir, "ZAR");
// 獲取所有文件的完整路徑string[] fileNames = Directory.GetFiles(zarPath).Select(Path.GetFileName).ToArray();
foreach(string fileName in fileNames)
{
//Init.zar為下載的ZAR文件名
if (fileName == "Init.zar")
{
string path = Path.Combine(zarPath, "Init.zar");
zmcaux.ZAux_ZarDown(g_handle, path, 0);
AppendTextOut("ZAR文件下載成功!!!", Color.DarkGoldenrod);
}
}
2.如需將對應總線節點的IO狀態信息或模擬量信息映射到控製器上對應起始地址查看,則修改對應節點IO或模擬量的起始地址,修改完成後,點擊【保存】,再點擊【總線初始化】。

3.通過RTSys軟件查看IO或模擬量映射的地址成功與否。
成功連接控製器後,在菜單欄中找到【控製器】→【控製器狀態】→【槽位0節點】,可以看到所有節點對應的IO或模擬量起始地址。可以在總線初始化完成後觀看此界麵確認IO或模擬量起始地址映射正常。

相關代碼介紹:
(1)上位機如何鏈接上MotionRT750。
if (Controler_IP.Text != null && Controler_IP.Text != "")
{
int ret = -1;
switch (Connect_ModeIP.Text)
{
case "IP":
//控製器IP地址連接
ret = zmcaux.ZAux_FastOpen(2, Controler_IP.Text.Trim(), 5000, out g_handle);
break;
case "COM":
//控製器COM串口號連接
ret = zmcaux.ZAux_OpenCom(uint.Parse(Controler_IP.Text), out g_handle);
break;
case "LOCAL":
//LOCAL接口連接RT750
ret = zmcaux.ZAux_FastOpen(5, Controler_IP.Text.Trim(), 5000, out g_handle);
break;
case "PCI":
//插入卡槽卡號連接PCI卡
ret = zmcaux.ZAux_FastOpen(4, Controler_IP.Text.Trim(), 5000, out g_handle);
break;
}
if (ret != 0)
{
MessageBox.Show("IP鏈接失敗,報錯碼: " + ret.ToString());
}
else
{
if (g_handle != (IntPtr)0)
{
//連接成功後停止所有軸
ret = zmcaux.ZAux_Direct_Rapidstop(g_handle, 2);
MessageBox.Show("鏈接成功!");
this.Text = "已連接";
timer1.Enabled = true;
}
}
}
(2)總線初始化結構體定義,自定義初始化所需的變量,例如LocalAxisId(本地軸起始ID)和LocalAxisNum(本地軸使用的軸數量)。
具體變量信息可以在解決方案中點擊ZMotionEcat.cs文件進行查看。
其中,DrivePdoMode用於設置每個軸的發送PDO和接收PDO的配置選擇。不同模式對應的PDO數據各不相同。
例如,若總線軸需切換至EtherCAT周期速度模式或EtherCAT周期力矩模式,則相應的PDO列表必須包含對應數據,如模式17和18支持三種總線模式。
具體列表數據請參考RTBasic手冊中的drive_profile說明。
if (textBox1.Text == "" || textBox3.Text == "")
{
Console.WriteLine("總線參數不能為空");
return;
}
//定義總線初始化的信息結構體個數,最多可以支持128個節點MyEcatInit.EcatInitInfoSet ecatInitInfo = new
MyEcatInit.EcatInitInfoSet(int.Parse(textBox3.Text));
?ecatInitInfo.InitStructFlag = 0; //是否自定義初始化參數,設置1的話使用默認的總線初始化參數,設置成0則需要自定義總線初始化相關參數
if (ecatInitInfo.InitStructFlag != 1)
{
// 1. 本地軸參數,用於指定本地軸的起始 ID 和使用的軸數量
ecatInitInfo.LocalAxisId = int.Parse(textBox2.Text); // 本地軸起始 ID
ecatInitInfo.LocalAxisNum = int.Parse(textBox4.Text); // 本地軸使用的軸數量
// 2. 驅動軸相關參數,用於指定驅動軸的起始 ID 和數量
ecatInitInfo.DriveAxisStart = int.Parse(textBox1.Text); // 驅動軸起始 ID,第 1 個驅動軸為 DriveAxisStart,第 2 個為 DriveAxisStart + 1 以此類推
ecatInitInfo.DriveAxisNum = -1; // 驅動軸數量[默認 -1],-1 表示總線初始化的時候不判斷驅動的軸數量是否對上,若為 0 表示掃描到的軸數量,會檢查掃描到的軸數量是否一致
ecatInitInfo.EcatNodeNum = int.Parse(textBox3.Text); // 總線節點數目[默認 -1],-1 表示總線初始化的時候不判斷節點個數是否對上
for (int i = 0; i < ecatInitInfo.EcatNodeNum; i++)
{
ecatInitInfo.DrivePdoMode[i] = 12; // PDO 模式數組,參考 RTBasic 手冊 drive_profile 說明,默認值為 12 表示需要配置相關 PDO
}
ecatInitInfo.DriveEnable = 1; // 總線初始化時是否自動使能,1 驅動器自動使能,0 不使能驅動器
ecatInitInfo.DriveIoSpa = 16; // 一個驅動映射多少個 IO 端口數量
// 3.DC 同步時鍾和 DC 偏移補償,用於指定係統時鍾模式和 DC 偏移標誌及時間
ecatInitInfo.SysClockMode = 1; // 係統時鍾模式,1 開啟 DC 同步時鍾,0 關閉 DC 同步時鍾
for (int i = 0; i < ecatInitInfo.EcatNodeNum; i++)
{
ecatInitInfo.DcOffsetFlag[i] = 0; // N 個節點對應的是否需要進行 DC 偏移補償,0 關閉 DC 偏移,1 開啟 DC 偏移,以節點 ID 形式
ecatInitInfo.DcOffsetTime[i] = 0; // N 個節點對應的 DC 偏移時間,單位為微秒,0.5 表示 0.5 微秒,以節點 ID 形式
}
}
二、點擊【軸參數初始化】進入軸控製界麵,開始總線軸的手動調試運動。
1.軸的使能控製。首先將軸類型切換到總線軸,再觀察軸使能狀態指示燈的顏色,可以準確判斷軸的使能情況:綠色代表已使能,紅色則表示未使能。點擊圖案即可切換軸的使能狀態。

2.配置好軸參數、軸號及相關參數後,通過左轉右轉手動調試軸運動。
建議將【脈衝當量】設置為機台運動1mm所需的脈衝數。若按此推薦設置,【速度】的單位為mm/s,【加速度】和【減速度】的單位則為mm/s²。
通常,【加速度】和【減速度】設置為速度的10倍。
3.若在調試過程中不確定機台運動1mm所需的脈衝數,可將【脈衝當量】設為1。
為安全起見,【速度】可先設為10,此時左右整體速度為1*10=10個脈衝每秒,【加速度】和【減速度】均設為1000。隨後手動運動軸,觀察軸是否運動及【反饋位置】是否有變化。
若手動運動時【反饋位置】數據變化但實際軸未動,可逐步將【脈衝當量】以10倍遞增,每次調整後反複手動運動,檢查軸是否運動。
【反饋位置】由編碼器反饋,若其數據變化,軸必定在運動;若肉眼難以察覺,可能是機台運動較慢。

手動運動和寸動代碼如下:
//參數同步
zmcaux.ZAux_Direct_SetAtype(g_handle, axis[select_axis], int.Parse(atype_s[select_axis])); //設置軸類型
zmcaux.ZAux_Direct_SetUnits(g_handle, axis[select_axis], units[select_axis]); //設置脈衝當量
zmcaux.ZAux_Direct_SetAccel(g_handle, axis[select_axis], accel[select_axis]); //設置加速度
zmcaux.ZAux_Direct_SetDecel(g_handle, axis[select_axis], decel[select_axis]); //設置減速度
zmcaux.ZAux_Direct_SetSpeed(g_handle, axis[select_axis], speed[select_axis]); //設置運行速度
zmcaux.ZAux_Direct_SetFsLimit(g_handle, axis[select_axis], Fslimit[select_axis]); //設置正向軟限位
zmcaux.ZAux_Direct_SetRsLimit(g_handle, axis[select_axis],Rslimit[select_axis]); //設置負向軟限位
zmcaux.ZAux_Direct_SetFastDec(g_handle, axis[select_axis], speed[select_axis]* accel[select_axis]); //設置快減減速度,達到限位或異常停止時自動采用
Thread.Sleep(1);
if (param < 5)//左轉
{
zmcaux.ZAux_Direct_Single_MoveAbs(g_handle, axis[select_axis], Rslimit[select_axis]);
}
else if (5 <= param && param 9)//運動
{
if (mode[select_axis])//絕對運動
{
zmcaux.ZAux_Direct_Single_MoveAbs(g_handle, axis[select_axis], move_dpos[select_axis]);
}
else //相對運動
{
zmcaux.ZAux_Direct_Single_Move(g_handle, axis[select_axis], move_dpos[select_axis]);
}
}
三、在確保手動運動正常且方向無誤的前提下,我們可以繼續測試軸的回零功能。
若未勾選【啟用控製器回零方式】,則默認采用總線驅動器回零(精度更高,推薦使用,驅動器回零參考驅動器手冊)。
此時,需參照總線驅動器手冊中對回零模式的說明,並將原點傳感器連接至驅動器的原點輸入口。若勾選【啟用控製器回零方式】,則使用控製器回零,具體回零方式可參考下拉框中的介紹。
在實際項目中,仍建議優先選擇總線驅動器回零。回零測試步驟如下:
1.選擇回零軸號,配置軸的正限位信號、負限位信號及原點信號後,點擊【配置軸IO】。若軸狀態顯示“30h”,則勾選【反轉】,並再次點擊【配置軸IO】。
2.配置速度、爬行速度及回零模式後,點擊【啟動回零】。若出現方向錯誤或速度過快的情況,請立即點擊【緊急停止】,並重新進行調試。

3.若軸狀態顯示“8h”,則表示驅動器出現報錯。以下是遇到驅動器報警後的處理方法。

(1)檢查驅動器上的LED麵板是否顯示報錯信息,報錯時將呈現相應的錯誤碼。

常見的錯誤,如驅動器過載和轉矩飽和異常等,均可通過【清除報警】按鈕清除。

具體代碼如下:
int position = 3; // 獲取第3位
int value = 0;
zmcaux.ZAux_BusCmd_DriveClear(g_handle, (uint)param, 0); //清除總線伺服軸報警
Thread.Sleep(5000); //等待報警清除
zmcaux.ZAux_BusCmd_SDOReadAxis(g_handle, (uint)param, 0x6041, 0, 6, ref value); //讀取驅動器狀態字對應數據字典6041
if (((value >> position) & 1) == 0)
{
zmcaux.ZAux_Direct_Single_Datum(g_handle, param, 0); //清除控製器報警
Thread.Sleep(100);
zmcaux.ZAux_Direct_SetAxisEnable(g_handle, param, 1); //重新上使能
MessageBox.Show("報警清除成功!!!");
}
else{MessageBox.Show("報警清除失敗,重新清除或查找報錯原因!!!");}
(2)如(ru)果(guo)通(tong)過(guo)代(dai)碼(ma)無(wu)法(fa)清(qing)除(chu)報(bao)警(jing),絕(jue)大(da)多(duo)數(shu)驅(qu)動(dong)器(qi)報(bao)警(jing)問(wen)題(ti)可(ke)以(yi)通(tong)過(guo)斷(duan)電(dian)並(bing)重(zhong)啟(qi)驅(qu)動(dong)器(qi)來(lai)解(jie)決(jue)。若(ruo)斷(duan)電(dian)重(zhong)啟(qi)後(hou)報(bao)警(jing)依(yi)然(ran)存(cun)在(zai),則(ze)需(xu)參(can)照(zhao)驅(qu)動(dong)器(qi)手(shou)冊(ce)進(jin)行(xing)錯(cuo)誤(wu)排(pai)查(zha),並(bing)可(ke)谘(zi)詢(xun)驅(qu)動(dong)器(qi)技(ji)術(shu)人(ren)員(yuan)以(yi)獲(huo)取(qu)解(jie)決(jue)方(fang)案(an)。
教學視頻請點擊→PC強實時運動控製(一):C#的EtherCAT總線初始化(上)
完整代碼獲取地址
▼

本次,正運動技術PC強實時運動控製(一):C#的EtherCAT總線初始化(上),就分享到這裏。
更多精彩內容請關注“正運動小助手”公眾號,需要相關開發環境與例程代碼,請谘詢正運動技術銷售工程師:400-089-8936。

正運動技術專注於運動控製技術研究和通用運動控製軟硬件產品的研發,是國家級高新技術企業。正運動技術彙集了來自華為、中zhong興xing等deng公gong司si的de優you秀xiu人ren才cai,在zai堅jian持chi自zi主zhu創chuang新xin的de同tong時shi,積ji極ji聯lian合he各ge大da高gao校xiao協xie同tong運yun動dong控kong製zhi基ji礎chu技ji術shu的de研yan究jiu,是shi國guo內nei工gong控kong領ling域yu發fa展zhan最zui快kuai的de企qi業ye之zhi一yi,也ye是shi國guo內nei少shao有you、完整掌握運動控製核心技術和實時工控軟件平台技術的企業。主要業務有:運動控製卡_運動控製器_EtherCAT運動控製卡_EtherCAT控製器_運動控製係統_視覺控製器__運動控製PLC_運動控製_機器人控製器_視覺定位_XPCIe/XPCI係列運動控製卡等等。
|