| 作者 | 主题 |
|---|---|
|
谦 总坛主
经验值:23725 发帖数:3679 精华帖:8 |
楼主
主题:应用探讨——CPU循环的探讨
PLC CPU的循环扫描时间是决定PLC工作性能的重要指标之一。PLC采用循环程序执行的原理,在程序处理过程中,CPU需要一致的过程映像信号。尤其在一些对实时通信要求苛刻的应用领域,如运动控制中,CPU的系统扫描时间更是决定系统先进性和可用性的关键因素。本话题从CPU的扫描时间概念开始,将就以下问题展开讨论:
1、CPU工作原理 2、如何计算CPU的循环时间? 3、与通信相关的CPU扫描时间注意事项 4、例程分析 活动奖励: 此次集中交流将持续至2013年1月4日,其中所有精华帖作者将获得加倍精华奖励积分;最终所有有效留帖的网友将获得加倍发帖积分。更多积分带给您更多奖品兑换的自由。 对于有突出发言贡献的网友可获得金币奖励,可以在当前的兑换奖品中兑换奖品。 交流结束后也将专门整理重要内容,供广大网友分享参考。 预祝大家交流愉快,收获丰富! |
|
n次看你的背影 奇侠 经验值:7974 发帖数:2321 精华帖:73 |
38楼
主题:回复:应用探讨——CPU循环的探讨quote:以下是引用UWE在2012-11-17 23:38:19的发言: 谢谢大家对本话题的热心参与,如以上各位大侠所言,CPU的扫描时间既包括OB1的全部扫描时间(包括可对主程序中断的当前循环中更高优先级的扫描时间),也包括操作系统的运行时间,如周期扫描的系统控制、过程映像的更新、定时器的更新、通信负荷等。其中,OB1的用户程序执行对于CPU资源占用非常关键。如果程序编得不合理或不优化,有可能造成OB1扫描时间大于扫描周期监视时间(SCMT,如150ms),从而导致CPU停机。 下面给大家提个问题:如果主程序的扫描时间超过设置的SCMT,CPU会调用哪个OB?在此OB中采取什么措施可能防止CPU停机? 刚好有块416的CPU,借这个学习、讨论的机会,写了点测试代码,做了一下实验。 1、如果扫描周期超出扫描监控时间,CPU会调用OB80。如果OB80没有下载到PLC,CPU会进入STOP模式,见实验贴图: ![]() 2、如果扫描周期超出扫描监控时间,OB80下载到PLC,没有写任何用户程序,CPU不会进入STOP模式,但CPU上INTF红色指示灯会点亮。见实验贴图: ![]() 3、后来在OB80里面写了几句代码,发现只要超出扫描监控时间的事件一直存在,OB80每个扫描周期都会被执行,直到事件消失,执行完OB80里面的程序,才离开中断程序,CPU上INTF红色指示灯会熄灭。 ![]() ![]() 通过实验,了解了操作系统调用OB80的机制。在某些场合,我们也可以在OB80里面用一个定时器来做一个延时功能,如果事件发生,启动定时器,延时到那么就调用SFC46,让CPU进入STOP模式。
佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”
|
|
凌飞翼 奇侠 经验值:7039 发帖数:3395 精华帖:26 |
44楼
主题:回复:应用探讨——CPU循环的探讨
在程序监控中我曾发现:个别时刻会有突然的周期延长。仔细寻找造成延长的因素,发现用PID向导生成调节子程序时,默认了1.0秒的采样时间,如果PID调节回路较多,这个PID运算集中在一起耗时就十分突出。
更多的时候,采样时间取1.0秒、1.5秒,不会对调节回路产生影响。为了让扫描周期少波动。可以把不同回路的采样时间区别开来,PID就不会集中触发运算。 PID运算是如此,通讯、滤波等较为耗时的工作,也都可以照此办理。
制冷、热工-许可证试验室承建,给了我深究测量与控制的绝好机会。分享-值得期待!
|
|
n次看你的背影 奇侠 经验值:7974 发帖数:2321 精华帖:73 |
52楼
主题:回复:应用探讨——CPU循环的探讨
2、如何计算CPU的循环时间?
对总坛主提出的这个议题,我也进行了一些思考: 从上面的讨论中我们已经知道,循环时间(扫描周期)是指CPU执行六个步骤耗时的总和。我在想,难道循环时间只能从ONLINE模块信息、和OB1的临时变量中获得吗?显然,把CPU循环过程的每个步骤耗时统计出来相加得出循环时间是非常困难的。在用户程序中能计算出CPU的循环时间吗?于是进行了一番思考和尝试: 因为CPU在循环期间,每个周期进入用户程序OB1时,都会将当前操作系统的日期、时间戳写到它声明的临时变量里面,如果我们用户程序读取上一周期进入OB1的时间戳和进入本周期OB1的时间戳,然后用本周期的时间戳减去上周期的时间戳,不也就能得出上一周期的循环时间了吗?于是写了点测试代码,在CPU416里面执行测试了一下(注:是在真实CPU416环境里面测试)。测试发现,用户程序也能计算CPU的循环时间,结果和ONLINE模块信息、OB1的临时变量获得的循环时间是吻合的。测试代码和结果见参考贴图: ![]()
佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”
|
|
剑忠 奇侠 经验值:9641 发帖数:622 精华帖:57 |
59楼
主题:回复:应用探讨——CPU循环的探讨
[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工具的方便性。
大学之道,在明明德,在亲民,在止于至善。
|
|
Automann 至圣 经验值:18299 发帖数:6168 精华帖:137 |
103楼
主题:回复:应用探讨——CPU循环的探讨quote:以下是引用小釉在2012-11-28 19:49:45的发言: 有两种变成习惯,有一种是在ob1中无条件的调用fc。另一种在ob1中有条件的调用fc 这两种习惯哪种好一些? 个人比较偏向于第一种,因为第一种的扫描周期基本能够稳定。而第二种有可能造成扫描周期大幅变化。 大家怎么看待这个事情? 怎样调用FB、FC,这个事与扫描周期的关系很大,怎么能跟着感觉走,凭习惯来定呢? 相对于将全部程序放在OB1而言,使用FB、FC的优点之一就是可以在需要时调用它们,因此可以缩短扫描周期。如果在不需要的时候也调用(无条件调用),那岂不成了作无用功,或者瞎捣乱? “第一种的扫描周期基本能够稳定”,为了扫描周期的稳定,付出了什么代价?有条件调用可能使大多数、甚至绝大多数扫描周期缩短,为了这种稳定则反之,代价太大。稳定得到了什么好处呢?没什么好处!扫描周期天生就是不稳定的,不稳定天塌不下来!因为需要周期稳定的任务可以放到循环中断里。
追求完美
|