quote:以下是引用n次看你的背影在2012-11-19 13:30:01的发言:2、如何计算CPU的循环时间?
对总坛主提出的这个议题,我也进行了一些思考:
从上面的讨论中我们已经知道,循环时间(扫描周期)是指CPU执行六个步骤耗时的总和。我在想,难道循环时间只能从ONLINE模块信息、和OB1的临时变量中获得吗?显然,把CPU循环过程的每个步骤耗时统计出来相加得出循环时间是非常困难的。在用户程序中能计算出CPU的循环时间吗?于是进行了一番思考和尝试:
因为CPU在循环期间,每个周期进入用户程序OB1时,都会将当前操作系统的日期、时间戳写到它声明的临时变量里面,如果我们用户程序读取上一周期进入OB1的时间戳和进入本周期OB1的时间戳,然后用本周期的时间戳减去上周期的时间戳,不也就能得出上一周期的循环时间了吗?于是写了点测试代码,在CPU416里面执行测试了一下(注:是在真实CPU416环境里面测试)。测试发现,用户程序也能计算CPU的循环时间,结果和ONLINE模块信息、OB1的临时变量获得的循环时间是吻合的。测试代码和结果见参考贴图:

N侠,你算出来的东西本来OB1的临时变量里就有(上一次扫描的运行时间OB1_PREV_CYCLE),有必要算它吗?顺便说一下,我一直佩服你写代码的热情和效率。
我有以下观点:
1)操作系统和STEP7已经为我们提供了扫描周期,我们享用就行了。
2)根据用户程序、指令执行时间和系统硬件结构计算出扫描周期是不可能的。
3)扫描周期的计算并不重要,重要的是在编程时怎样采取措施,避免因扫描周期过长影响系统的正常运行。