時間:2025-06-27 17:26:06來源:深圳市正運動技術有限公司
今天,正運動小助手給大家分享一下運動控制卡周期上報,通過提前設置經常讀取的參數主動周期上報,可以減少PC主動輪詢的時間。
本文以ECI2A18B運動控制卡為例,主要講解如何使用C#編程語言來進行周期上報函數的編寫和功能的開發。
ECI2A18B運動控制卡介紹
ECI2A18B是一款10軸脈沖型、模塊化的網絡型運動控制卡,采用優化的網絡通訊協議可以實現實時的運動控制,同時支持多種通信協議,方便與其他工業控制設備連接和集成。安裝配置相對便捷,適合于模塊化和靈活性要求較高的控制系統。
ECI2A18B運動控制卡最大可擴展至12脈沖軸,支持8路高速輸入和12路高速輸出,集成豐富的運動控制功能,包含多軸點位運動、電子凸輪,直線插補,圓弧插補,連續插補運動等,滿足多樣化的工業應用需求。
正運動提供自主自研IDE-RTSys開發編程軟件,ECI2A18B控制卡支持多種上位機語言開發,均可調用同一套API函數庫,易與現有的工業控制系統集成,極大地提高了工程師進行二次開發的效率,加速設備的部署和應用。
01周期上報
1.首先了解當PC主動輪詢的次數過多時,可能會導致的問題:
(1)增加系統開銷:輪詢需要消耗系統資源,無論是任務輪詢還是定時器輪詢都需要相應的系統資源。這可能會導致系統性能下降,尤其是在多用戶或資源受限的環境中。
(2)浪費CPU資源:無論設備是否發生狀態改變,輪詢總在進行。在實際情況中,大多數設備的狀態改變通常不會那么頻繁,輪詢空轉將白白浪費CPU時間片。
(3)影響電源管理:向PC報告外圍設備的次數越多,消耗的功率就越高,這可能會縮短電池壽命或增加能源消耗。
(4)降低響應速度:如果輪詢頻率過高,可能會導致系統響應其他任務的速度變慢,因為CPU需要頻繁地檢查設備狀態,而不是處理其他計算或用戶交互任務。
(5)網絡負載增加:如果輪詢涉及到網絡通信,過多的輪詢請求可能會增加網絡負載,導致網絡擁堵或延遲增加。
(6)服務器壓力增大:在客戶端-服務器架構中,頻繁的輪詢請求可能會對服務器造成壓力,尤其是在服務器資源有限的情況下,可能會導致服務質量下降或請求超時。
2.了解PC主動輪詢次數過多,我們再來了解一下多種獲取方式對于程序運行占比的區別:
在討論單條獲取、多條獲取和周期性獲取對程序運行的影響時,我們需要考慮這些操作的特點及其對程序整體性能的潛在影響。
(1)單條獲取
單條獲取通常指的是程序中每次只處理一個單獨的數據項。這種方式簡單直接,但在處理大量數據時可能效率低下,因為每次操作都涉及到上下文切換和資源管理的開銷。在這種情況下,程序運行時間主要集中在處理數據本身,而非額外的控制邏輯。
(2)多條獲取
多條獲取涉及同時處理多個數據項。在現代計算機系統中,這通常通過多線程或并發技術實現,可以顯著提高數據處理的吞吐量。然而,多線程帶來的好處可能會被鎖爭、內存競爭和上下文切換等問題抵消。因此,多條獲取可能會減少單個數據項處理的相對運行時間,但總體運行時間的減少取決于多線程優化的效果。
(3)周期性獲取
周期性獲取是指按照一定的時間間隔重復執行數據獲取操作。這種方式常見于需要定期更新數據狀態的應用場景,如實時監控系統或定時任務。周期性獲取的運行時間占比取決于任務的周期性以及在每個周期內實際執行的工作量。如果周期性任務的負載較輕,那么它們可能不會顯著影響程序的整體運行時間。
3.應用場合:
在實際應用中,選擇哪種數據獲取策略取決于具體的應用場景、數據特性和性能要求。例如,如果程序需要快速響應單個事件,單條獲取可能更為合適。如果目標是最大化數據處理速度,多條獲取可能更有益。而對于需要定期維護數據新鮮度的應用,周期性獲取是必要的。
02C#語言進行周期上報
1.在VS2010菜單“文件”→“新建”→“項目”,啟動創建項目向導。
2.選擇開發語言為“Visual C#”和.NET Framework 4以及Windows窗體應用程序。
3.找到廠家提供的光盤資料里面的C#函數庫,路徑如下(32位庫為例)。
1)進入廠商提供的光盤資料找到“04PC函數”文件夾,并點擊進入。
2)選擇“01PC函數庫V2.1”文件夾。
3)選擇“Windows平臺”文件夾。
4)選擇“C#”文件夾。
5)根據需要選擇對應的函數庫,這里選擇32位庫。
4.將廠商提供的C#的庫文件以及相關文件復制到新建的項目中。
1)將zmcaux.cs文件復制到新建的項目里面中。
2)將zauxdll.dll和zmotion.dll文件放入bin\debug文件夾中。
5.雙擊Form1.cs里面的Form1,出現代碼編輯界面,在文件開頭寫入using cszmcaux,并聲明控制器句柄g_handle。
6.至此,項目新建完成,可進行C#項目開發。
03PC函數介紹
PC函數手冊可在光盤資料獲取,具體路徑如下:“00光盤資料\03編程手冊\03ZMotion PC函數庫編程手冊”。
1.鏈接控制器,獲取鏈接句柄。
2.控制器自動上報相關指令。
3.注意周期上報指令使用事項。
04C#之網絡通訊的周期上報
1.上位機軟件界面如下,首先連接控制器,設置周期上報參數和需要上報的參數,最后勾選啟動強制上報即可。
2.例程講解。
(1)連接控制器獲取句柄,上位機操作通過獲取到的句柄來操作控制器。
//連接控制器,控制器默認IP是192.168.0.11ZauxErr = zmcaux.ZAux_OpenEth("192.168.0.11", out g_Handle);if (0 != ZauxErr){ AlmInifFile.Write(DateTime.Now.ToString("F"), "ZAux_OpenEth執行錯誤,錯誤碼:" + ZauxErr.ToString(), "錯誤碼信息");}
(2)啟動上報。當啟動周期上報checkbox狀態發生變化的時候通知CheckChange函數,首先判斷是取消勾選還是勾選。如果是勾選則ZAux_CycleUpEnable使能周期上報并開始定時器進行周期上報數據包進行讀取和刷新。
private void checkBox1_CheckedChanged(object sender, EventArgs e){ //獲取上報的參數 StringBuilder psetesname = GetCycleStr(); //勾選啟動上報 if (!StartUp && checkBox1.Checked == true) { try { //使能周期上報 controlReturn = zmcaux.ZAux_CycleUpEnable(g_handle, Convert.ToUInt32(textBox1.Text), Convert.ToSingle(textBox2.Text), psetesname.ToString()); } catch (FormatException fe) { checkBox1.Checked = false; MessageBox.Show(string.Format("{0}: {1}", fe.GetType().Name, fe.Message)); return; } if (controlReturn != 0) { checkBox1.Checked = false; return; } textBox9.Text = "0"; AppendTextOut(string.Format("周期上報開始 \r\n 命令:{0}\r\n", psetesname.ToString())); start = DateTime.Now; // timer1.Enabled = true; StartUp = true; }else if(StartUp && checkBox1.Checked == false){ //取消勾選周期上報 controlReturn = zmcaux.ZAux_CycleUpDisable(g_handle, Convert.ToUInt32(textBox1.Text)); DateTime end = DateTime.Now; if (controlReturn != 0) { AppendTextOut(string.Format("周期上報關閉失敗 錯誤碼:{0:D} \r\n",controlReturn)); return; } timer1.Enabled = false; StartUp = false; TimeSpan abs = end - start; AppendTextOut(string.Format("{0:N3}ms, {2:N3} \r\n", abs.TotalMilliseconds, Convert.ToDouble(textBox9.Text), abs.TotalMilliseconds / Convert.ToDouble(textBox9.Text))); }}//讀取上報參數private void timer1_Tick(object sender, EventArgs e){ int received; try { //獲取周期上報收到的數據包數量 received = zmcaux.ZAux_CycleUpGetRecvTimes(g_handle,Convert.ToUInt32(textBox1.Text)); } catch (FormatException fe) { timer1.Enabled = false; MessageBox.Show(string.Format("{0}: {1}", fe.GetType().Name, fe.Message)); return; } if (received != Convert.ToUInt32(textBox9.Text)) { //收到新的數據包則打印 //打印函數 GetCycleInfo(); textBox9.Text = string.Format("{0:D}", received); }}
(3)打印數據。通過ZAux_CycleUpReadBuffInt讀取周期上報數據解析后通過AppendTextOut顯示。
//打印收到的數據包private void GetCycleInfo() { StringBuilder showString = new StringBuilder(); int ival = 0; for (int num = 0; num < 3; num++) { if (checkbox[num].Checked){ showString.Append(combobox[num].SelectedItem.ToString()); for (uint i = (uint)data[num].CycleParaStart; i < data[num].CycleParaNum; i++) { //從周期上報里面讀取內容 controlReturn = zmcaux.ZAux_CycleUpReadBuffInt(g_handle, Convert.ToUInt32(textBox1.Text), combobox[num].SelectedItem.ToString(),i, ref ival); showString.AppendFormat(" {0:D}",ival); } showString.Append("\n"); } } AppendTextOut(showString.ToString());}
05RTSys的使用
1.打開【RTSys】軟件,點擊【連接】輸入控制器的IP(默認IP:192.168.0.11)。
2.使用正運動RTSys軟件可以方便直觀的觀察周期上報參數數值。
3.上位機讀取周期上報的值并輸出在文本框。
4.點擊下拉框選擇其他參數或更改起始地址及數量讀取不同區域數據。
完整代碼獲取地址
▼
本次,正運動技術C#上位機與運動控制卡網絡通訊的周期上報,就分享到這里。
更多精彩內容請關注“正運動小助手”公眾號,需要相關開發環境與例程代碼,請咨詢正運動技術銷售工程師:400-089-8936。
本文由正運動技術原創,歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。
上一篇:怎么控制鋰電池的安全隱患
下一篇:沒有了!
中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.hysjfh.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-06-16
2025-06-09
2025-06-06
2025-05-19
2025-04-30
2025-04-11