quote:以下是引用Automann在2012-11-19 22:06:41的发言:quote:以下是引用剑忠在2012-11-19 19:38:50的发言:[B]一、前面大家讨论了影响CPU循环Scan扫描周期的因素很多,当项目程序的Memory较大是,程序设计员的编程代码是否优化,以及OB块的分配调用,则是影响Scan周期的重要因素。
二、关于这个影响Scan周期的因素,我这有个CPU414-2DP成功解决了CPU循环Scan周期严重超时,导致CPU停机STOP的案例,这也是我去年(2011年)SIEMENS自动化专家会议的一篇论文内容,在此给大家分享和探讨。[/B]
1、本项目CPU414-2DP带8个ET200S系列PROFIBUS DP I/O从站、4套S7-200系列EM277模块PROFIBUS DP通讯、1套S7-200系列CP243-1模块Ethernet通讯,还有6套OS站(WinCC)与CP443-1模块Ethernet通讯,采用SCL和CFC工具组合编程,AS与OS全集成TIA架构设计。
2、当项目AS站CFC程序做完Download下载至CPU中,出现了循环Scan周期严重超时,导致CPU停机STOP!
3、经多天的细查看和分析:由于大量使用OB35调用,导致OB35块的本地数据(Local Data)使用超载。
4、通过将DI/DO诊断驱动块移至OB34;AI/AO诊断与驱动块,及PID和ALARM块移至OB33或OB32,OB35中仅保留电控驱动块,从而将降低了OB35的Local Data,使得CFC调用运行组(Run Sequence)得到优化,而成功解决!

5、通过Memory和Scan对比图示可看出,优化的效果很好。这么大的程序容量Memory,而Scan周期却1ms,这也得益于S7-400CPU丰富的OB块、强大的运算处理能力,以及CFC工具的方便性。
各循环中断组织块之间应该要设置相位偏移量吧?否则循环周期成倍数的循环OB还是会有同时调用的时候。
剑侠对程序优化前后的最大扫描周期为什么会相差几百倍?可能的解释是OB35循环中断程序过长,超过了OB35的循环周期,导致CPU被OB35长期占用造成的。而不是“OB35块的本地数据(Local Data)使用超载”。(我的理解是程序空间超载)。
这个例子很经典,向我们展示了程序优化的必要性和效果。