NoTime是基于實時系統(tǒng)構(gòu)建的.NET控制臺開發(fā)框架,用戶可以使用VisualStudio方便快捷地開發(fā)基于.NET語言的實時程序模塊,實現(xiàn)最小125微秒的線程調(diào)度周期。這樣一來,工程師的工作重心就能轉(zhuǎn)移到設(shè)備運控及邏輯程序本身,無需關(guān)心實時性的實現(xiàn)了。
我們先打開軟件自帶的案例,案例的功能主要是實現(xiàn)NoTime和Windows之間線程sleep的精度對比,流程是啟動線程后,函數(shù)中是一個while循環(huán),循環(huán)里流程是NoTime中先sleep 125μs,因為Windows最小的單位是1ms,所以Windows這邊是sleep 1ms,然后獲取微秒級的時鐘值,再減去上次獲取到的時鐘值,并且將差值做最大值計算,將最大值記錄下來,后面這一段是手動清除最大值。
下面我們啟動案例,看一下結(jié)果:可以看到NoTime這邊,sleep 125μs的值基本在125~141之間。但是Windows這邊的sleep 1ms的精度基本上會隨著Windows的調(diào)度而隨之變大變小,特別是我們打開一些占用CPU比較高的程序的時候。
介紹了NoTime的高精度線程能夠?qū)崿F(xiàn)最小125微秒的線程調(diào)度周期。那么如何在Windows與NoTime中部署機器控制程序,才能夠在最小改動的情況下,輕松實現(xiàn)性能的提升呢?
以下是我們建議放在NoTime中執(zhí)行的程序:
1.從業(yè)務(wù)層來看,NoTime主要適合實現(xiàn)有實時性要求的業(yè)務(wù)邏輯。對于具有周期重復(fù)性、需要快速啟停的動作程序,建議放到NoTime里,保障快速穩(wěn)定運行,例如短距離高速往返運動。
2.安全控制業(yè)務(wù)以及異常處理邏輯建議放到NoTime里,這樣就能保證即便Windows藍(lán)屏后,程序仍然可以正常運行,避免出現(xiàn)設(shè)備失控等情況。
3.全局報警信號監(jiān)控是適合放在NoTime里的,因為NoTime中刷新頻率更高,一能更快地捕捉IO觸發(fā),二是比較穩(wěn)定不會受到電腦環(huán)境干擾。
4.如果在一段運動中需要IO觸發(fā)后馬上就切換運動指令,而且從IO觸發(fā)到執(zhí)行運動指令的時間要求較短,可以將其單獨放在NoTime中,避免因Windows波動而導(dǎo)致運動指令切換延后,引起軸實際已經(jīng)過沖。
5.若有與外設(shè)實時通信的需求,可以基于我們的實時通信庫實現(xiàn),支持在NoTime下基于串口及網(wǎng)口與外設(shè)通信。
6.對通訊及對運動速度 需求不高的程序可以仍然放在Windows端不用改動,這樣就可以在保留現(xiàn)有完整功能的同時,完成遷移工作,減少單次工作量。
因NoTime提供的是一個開發(fā)平臺,具體業(yè)務(wù)劃分是不受限制的,可以將很小的一個功能函數(shù)在NoTime實現(xiàn),也可以將一個較大的業(yè)務(wù)模塊在NoTime實現(xiàn)。所以對于現(xiàn)有軟件要將部分功能遷移到NoTime下來說,軟件本身改動不大,Windows下的原有功能也可以保留。
那么如何快速的部署NoTime,讓原有程序以最小的改動實現(xiàn)性能提升,以及如何使用NoTime的基本程序結(jié)構(gòu)呢?
大家好,我是ProU軟件工程師傅超,我們提供了一個NoTime中的基本程序結(jié)構(gòu),大致分為運動流程,流程管理,通訊及數(shù)據(jù)四個部分:
1. 運動流程
首先看到的是我們NoTime程序的入口,在這我們先打開了和ProR的通訊通道,這個是必須要有的,而后是建立共享內(nèi)存,這個內(nèi)容我們后面會仔細(xì)講解,Maintask也就是我們主流程,我們轉(zhuǎn)到定義來仔細(xì)看一下。
在這我們初始化了三個數(shù)據(jù)結(jié)構(gòu)體,調(diào)用了子流程1,子流程2的功能函數(shù),目前這兩個函數(shù)里的內(nèi)容是一樣的,可以看到只是簡單的將一些數(shù)據(jù)置為0,下面的子流程3我們用了流程管理的結(jié)構(gòu),這個“add”就是添加了子流程3里的函數(shù),子流程的函數(shù)我們就寫具體的運動流程代碼或者某功能的實現(xiàn)代碼。
2.流程管理
我們轉(zhuǎn)到定義來看下流程管理的結(jié)構(gòu),這個管理結(jié)構(gòu)在NoTime和Windows下都是通用的,我們把需要執(zhí)行的子流程的函數(shù)做了一個統(tǒng)一管理,可以先看一下注冊的動作,我們做了一個簡單的封裝,可以更加便捷的去添加子流程里的動作。原理就是我們把要執(zhí)行的函數(shù)都先添加到一張列表里,流程啟動和停止通過變量去控制整張列表里函數(shù)的運行,值得一提的是,列表里函數(shù)在運行完后都會有一個反饋狀態(tài),有反饋狀態(tài)我們就可以更好的控制流程的運轉(zhuǎn),目前是有錯誤,完成,執(zhí)行中三種,這個可以后面再自定義補充。
3.通訊
接下來我們看下通訊,在這我們展示的是NoTime和Windows的交互方式,相關(guān)功能函數(shù)都是放在一個獨立的文件里,便于更加快捷的定位和操作。本次案例里采用的是共享內(nèi)存,回顧一下NoTime程序的入口函數(shù),在這是創(chuàng)建了共享內(nèi)存,然后在windows下打開共享內(nèi)存,從而實現(xiàn)NoTime與Windows的交互,若有與外設(shè)基于串口或網(wǎng)口通訊需求的也可以放在這一塊。
4.數(shù)據(jù)
我們分成了PublicData和GlobalData兩種數(shù)據(jù)結(jié)構(gòu)體,PublicData里面建立的數(shù)據(jù)是針對于主流程的以及基本需要的,比如退出指令和循環(huán)次數(shù),而GlobalData里面則是針對于子流程的,現(xiàn)在這里面放的就是子流程的一些狀態(tài)。
審核編輯:劉清
-
cpu
+關(guān)注
關(guān)注
68文章
10911瀏覽量
213144 -
.NET技術(shù)
+關(guān)注
關(guān)注
0文章
3瀏覽量
5795 -
機器控制
+關(guān)注
關(guān)注
0文章
11瀏覽量
4305
原文標(biāo)題:NoTime高精度線程和快速部署
文章出處:【微信號:伺服與運動控制,微信公眾號:伺服與運動控制】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
請問ADS7142的高精度模式(16bit)的實際精度是多少?
ads1278高速模式和高精度模式下所能得到的最高精度是多少?
高精度相位差計的設(shè)計
關(guān)于NI采集卡的高速率與高精度模式
高精度GPS模塊介紹資料
高精度AD采集芯片ADS7809的中文介紹
![<b class='flag-5'>高精度</b>AD采集芯片ADS7809的中文<b class='flag-5'>介紹</b>](https://file1.elecfans.com//web2/M00/A4/7A/wKgZomUMNGCAZ1k6AAAk7XNmn-8013.gif)
復(fù)雜環(huán)境下的自動駕駛高精度定位技術(shù)
YKCAT2如何搭建NoTime基本程序框架
泰克高精度電流探頭的按鍵介紹
![泰克<b class='flag-5'>高精度</b>電流探頭的按鍵<b class='flag-5'>介紹</b>](https://file.elecfans.com/web2/M00/9B/A6/poYBAGQlL1yAJB5tAAESpAvQ1Cs295.png)
高精度電壓源如何設(shè)計出來的
![<b class='flag-5'>高精度</b>電壓源如何設(shè)計出來的](https://file1.elecfans.com//web2/M00/88/D4/wKgaomR0cLeAKxM7AADVBInwMFI507.png)
評論