在现实的工业控制中,经常需要采用一些实时控制的技术,比如大型钢厂的轧钢系统和大型变电站的实时报警系统,事实上Windows不是一个实时操作系统,一个比较流行的实时OS是VxWorks.但是基于VxWorks的实时系统究竟能否实现实时或者能够实现多少精度的实时呢?因为我们知道,真正的实时系统是不存在的,我目前了解到的最高精度的实时反应是20皮秒(但是记住,这个不是实时系统,仅仅是两个信号的间隔)。
我们需要有一套操作简单,真实可靠的系统对实时系统进行检测,不错,高精度的示波器和逻辑分析仪可以实现一定程度的实时系统的检测,因为所谓对实时系统的检测,无非就是一些控制信号和控制指令的反应时间,但是由于示波器和逻辑分析仪的不直观,我们无法对一个实时系统长时间的运行进行有效的测试。而且这样的系统也很难融入到一个现有的系统进行实时测试。
需要说明的是,单纯的软件是无法完成这样的系统的,我们需要一些高性能的数据采集卡来完成我们的系统测试。首先我们需要一款能够将模拟信号转换为数字信号的数据采集卡,这块数据采集要求能够达到200M以上的数据传输率。我们知道由于Windows不是一个实时的系统,因此想要如此高速的传送数据几乎是不可能的,因此必须采用DMA的方式,通过硬件地址映射将数据直接输出到内存。
软件方面是绝对没有可能用.Net来完成的,由于大量的与硬件的交互动作,以及与底层驱动直接的接口有时很难划分,因此整个软件仍然采用DDK+VC的方法来实现。经过最终的试验测试,发现Windows系统可以在很大程度内将自己的系统反应控制在5ms以内,但是有的时候会产生上百毫秒的误差,由于windows的任务调度的限制,完全无法完成实时系统的任务,甚至是低精度任务。而VxWorks可以做到长时间的10微秒以内的稳定工作,虽然在VxWorks下的软件开发相对于Windows下开发,成本提高太多,但是根据实际的试验数据来看,这些成本的投入还是合算的。
后记:这篇文章完全没有贬低windows系统的意思,事实上windows的表现完全超出了我的预期,Unix系统的实时性好于Windows但是也无法达到实时的效果。Vxworks的表现的确不错,但是开发成本过高。
与实时系统相关的一些知识的介绍:
VxWorks白皮书: http://www.windriver.com/whitepapers/wp_vxworks_vxvmi.pdf
Tornadohttp://www.windriver.com/products/development_tools/ide/tornado2/tornado_2.pdf
Labview/RT 很有特色的一个实时OS: http://www.ni.com/realtime/