以上都是定性的描述,能不能定量说明呢?当然了,确定性肯定是有具体指标的,脱离具体数字分析实时性没有意义。如果我们将反应时间规定为1个小时,那么就连Windows这样的操作系统也是实时的了,因为它响应再慢也不会花一个小时。工业上很多场合1个小时显然是太夸张了,我们至少要缩小到10ms这样的量级,例如一个控制或插补周期执行时间不能超过1ms,这样Windows系统肯定满足不了要求。Zui近炒的比较火的5G通信技术可以将延时控制在1ms左右,它也不是实时的,由于速度足够快也可以用于工业控制领域取代有线通信,这就是为什么5G这么火的原因。
理解实时性不太难,影响实时性的因素有哪些呢?这方面讨论涉及操作系统原理,各大机器人厂家肯定不会公开自己的测试和试验结果。评价实时性的主要指标是latency和jitter,jitter受到操作系统调度算法的影响很大,其它的例如系统负载也有影响,调度算法的影响大概是十微妙级的。jitter对机器人性能的影响不容易量化,因为中间环节有些复杂(底层伺服闭环)。
影响实时性的另一个主要因素是内存分配。动态内存的分配耗时非常不确定,这也是为什么很多实时系统都避免采用动态内存。这里我举两个例子:
1.在PLC中不提供动态数组,只能用定长数组,也就是说使用之前必须先分配好数组长度。这显然很不方便,例如我们有时在函数调用时传递一个数组,而事先并不想考虑数组的大小。这样一来,我们只好计算好每次传递的数组长度,或者设置一个尽量大的数组,显然这会造成空间的浪费。
2. 如果你有过在MATLABSimulink中编写S函数或者用户自定义函数的经历,你就会发现,S函数中要求你在使用变量之前必须先进行定义或分配空间,不能像在m文件中一样不事先定义就赋值(可以看这个MATLAB自带的例子:IntegrateMATLAB Algorithm inModel)。因为Simulink中的模块是可以生成C语言并导出到硬件上直接运行的,这意味着它对实时性有要求。一些PLC,例如前面提到的菲尼克斯和倍福,都支持将Simulink中仿真好的控制模型直接生成为控制程序,而无需重新编程。难怪我们在Simulink中编写S函数的时候总感觉不像在MATLAB写程序那么自由随意。