勇哥注:
windows下的实时拓展:RTX、INTime、Kithara、VxWin
Linux下的实时拓展:Preempt-RT、RTAI、Xenomai
window下的实时拓展都是商业软件,大部分都是按装机台数授权,成本昂贵。
Linux下的实时拓展都是开源软件,然后软件商集成+改进包装成收费软件,成本低些。
一般可以考虑选择windows+实时拓展+软件主站的方式,详细原因见后面的解释。
操作系统的选择,在工业控制领域,windows应用的要更广泛一些。
这是有原因的:一是windows的市场占有率高,二是开发工具极其丰富,三是受众面广泛因此带来培训与应用的成本极低,四是微软公司很难倒闭。
不管是windows,还是linux,都有实时拓展可供选择。
对于总线驱动(软驱动),也都有对应的选择。
kithara本身就带总线驱动模块。
双内核指的是操作系统用几个核,剩下核心交给实时拓展独占使用。
而单内核的实时拓展,是对操作系统进行了改造,把它变成了实时系统,但是对开发者来说,调用接口不会发生改变。
因为windows这样的操作系统是商业产品,闭源的,所以无法修改内核代码完成拓展,只能以双内核方式来实现拓展。
下图是Kithara的架构:
用户程序把需要实时的代码以(原生机器码编译出来的,只能是c++,delphi)dll方式载入ring0层执行。(下图中竖黄条所示)
用户程序把UI交互、工作逻辑等部分的程序放在ring3层执行(C#代码,用户层执行),但是C#程序可以通过Kithara RTS API,调用Kithara内核提供的功能。
Kithara RTS -Kernel 内核提供了自己的实时驱动:Usb3、CAN、SSD Storeage等。
下图表示了windows的ring0和ring3层的内存空间。
以及Kithara的内存空间。
ring0如果想和ring3交互数据,一般有共享内存和管道两种方式。
硬件主站方式时,有些协议并不是标准的以太网网口,例如Rtex,这个时候就得配专用的通信卡。
这对系统的稳定性和成本带来问题。
如果使用软主站的方式,相对来说就没有这些问题。但从成本来说,虽然少了硬件成本,但其实是多了软件成本的。

