欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

如何提高window實時性能

作者:佚名   來源:本站原創   點擊數:  更新時間:2011年02月24日   【字體:

1 概述
此文是在實現modbus-RTU通訊的基礎上總結而來的,主要講述了如何提高window做工業控制時的實時性能。

PC機上做控制系統,一般就是在window或者linux操作系統上做控制系統軟件開發,window上做控制系統,有如下優勢:

1)現有的設備驅動支持

2)各類廠家提供的現成的卡板

3)以及比較平民化的開發平臺

4)數量眾多的開發人員。

 

2 提高實時性手段
window是一個非實時操作系統,如果要做實時任務的話,有必要用些特別的手段,來提高其實時控制的能力。

 

1)  語言最好選擇C語言,之所以選擇C語言,因為工業控制主要基于window API編程,使用很多window內核的服務。

2)  多任務一般采用多線程來實現,根據任務的緊要程度,設置線程的優先級別,一定要設置優先級。

3)  如果在一個線程中有多個任務的話,建議采用協程的方式實現多任務,任務內部最好不要調用Sleep()等休眠函數

4)  為了提高內核的時鐘的調度精度,必須使用多媒體定時器并且將其精度設置為1ms,這樣內核任務調度精度也提高為1ms,這估計是微軟的內部耦合。如果不使用多媒體定時器的話,內核定時器時鐘精度一般只有15ms左右。

5)  每個線程的一個循環必須釋放一次CPU,采用Sleep(1),這樣才能保證機器的CPU不被耗光,否則低優先級的任務就沒有機會得到執行了。

6)計時采用QueryPerformanceFrequency()和 QueryPerformanceCounter()函數來計時,可以達到ns級別。

上面手段都是用戶空間的手段,在內核空間應該也有手段(應用程序作為驅動跑),但是我不熟,就不說了。

3 效果
使用以上幾種方式實現的控制程序,時間關鍵優先級別多線程任務調度精度可以達到2-5ms級別,計時精度可以達到ns級別。這對于很多(大部分)要求不高的控制來說,基本是夠用的。

至于驅動部分,window的驅動的反應速度還是挺快的(CPU占用率不過高的情況下面達到us級別的反應),這個和我們用戶空間的程序不一樣,例如window的串口驅動,可以將接收FIFO設置為1,采用事件方式讀串口,即使波特率為115200bps,也不會丟失數據。

使用上面的方法,我在PC機上實現了modbus-RTU客戶端,其3.5T設置為5ms,可以很穩定地和PLC主設備通訊。

 

4 硬實時
如果在PC機上追求真正的硬實時,那么一般是在window或者linux系統中加入硬實時內核,形成雙內核系統,例如RTX或者RTAI,這些都有成功的案例,例如西門子的基于RTX的數控系統,基于RTAI的實時控制系統,這些實時系統都是用于100us級別的硬實時系統中,需要開發者自己寫驅動,其架構是實時內核上跑實時任務,普通內核上跑一般任務,實時任務和一般任務間通過通訊的方式溝通。由于我還沒有在這些實時系統上做過開發,所以暫時不寫。
 

關閉窗口

相關文章