一直以来我都不相信在XP系统下可以做实时控制,我个人始终认为决定一个程序的根本特征的东西,就是它的程序框架,那些国外的RTOS提供商们宣称他们可以在XP下做到100us,我认为简直就是天方夜谈一样,因为XP操作系统的框架就在那摆着,你不可能指望把一辆牛车开出奔驰的速度,可是我TMD又错了,事实上又证明了经验害死人的主观错误,我错了,我真的错了。因为我做出来了,连我自己都不相信。我不知道是否有人能理解出我此时因为感觉自己失败而痛苦的心情。
要想说明白XP系统下开发运动控制的难点在哪里,需要从一个标准说起,这个标准的名称叫做IEC 1131-3,几乎所有的RTOS厂商都支持这个运动控制上的编程标准,最著名的厂家我个人认为有两个一个是CODESYS一个是德国的倍福,虽然德国的倍福用的也是CODESYS的平台,但是经过我认真的分析它的特点发现倍福有很多都是自己的东西。其实根本就不用管什么ST FBD LD SFC IL那些并不是决定一个系统是否实时的难点,实现这些语言中国很多厂商都能做到。在这个标准下实现实时性的难点是IEC 1131-3的数据定义标准,下面是一个例子:
L1_green AT %QB0.1:BOOL;(*定义一个bool型的变量*)
anlog_1 AT%Q*:DINT;(*定义一个双整形的变量*)
以及和以上类似的各种类型的数据定义。如果没有研究过实时库的人,你是不太可能明白,在这种数据结构下,如何刷新这些变量,以及为什么想提高实时性,这么困难,因为变量的刷新周期就决定了这个系统实时性的性能,而+,-,*,/这些类似的运算,大家如果使用同样的CPU的话,同样的编译优化技术(已经很成熟了,发挥空间很小了),想在计算上获得优势想都不要想,决定了你系统实时性能的,就是变量的刷新周期,可是