回复:应用探讨——CPU循环的探讨——发帖整理

总坛主 西门子1847工业学习平台

  • 帖子

    3679
  • 精华

    8
  • 被关注

    367

论坛等级:至圣

注册时间:2003-06-06

普通 普通 如何晋级?

发布于 2013-01-06 13:24:51

58楼

quote:以下是引用SAGITAR在2012-11-28 09:21:51的发言:
quote:以下是引用n次看你的背影在2012-11-19 21:50:20的发言:
quote:以下是引用Zane在2012-11-19 21:00:59的发言:
quote:以下是引用n次看你的背影在2012-11-19 19:13:14的发言:
quote:以下是引用Zane在2012-11-19 17:48:18的发言:
quote:以下是引用n次看你的背影在2012-11-19 13:30:01的发言:
2、如何计算CPU的循环时间?
对总坛主提出的这个议题,我也进行了一些思考:
从上面的讨论中我们已经知道,循环时间(扫描周期)是指CPU执行六个步骤耗时的总和。我在想,难道循环时间只能从ONLINE模块信息、和OB1的临时变量中获得吗?显然,把CPU循环过程的每个步骤耗时统计出来相加得出循环时间是非常困难的。在用户程序中能计算出CPU的循环时间吗?于是进行了一番思考和尝试:

因为CPU在循环期间,每个周期进入用户程序OB1时,都会将当前操作系统的日期、时间戳写到它声明的临时变量里面,如果我们用户程序读取上一周期进入OB1的时间戳和进入本周期OB1的时间戳,然后用本周期的时间戳减去上周期的时间戳,不也就能得出上一周期的循环时间了吗?于是写了点测试代码,在CPU416里面执行测试了一下(注:是在真实CPU416环境里面测试)。测试发现,用户程序也能计算CPU的循环时间,结果和ONLINE模块信息、OB1的临时变量获得的循环时间是吻合的。测试代码和结果见参考贴图:




跑偏了。


其实我认为总坛主在讨论议题上是有选择性的,而且是有深意的,并没有跑偏!至于我上面的观点只是例程分析和参考。

你对大家说,扫描时间可以计算了,但绕了半天还是算个上一周期的扫描值,这个值不用算且OB1的临时变量里就有,并且这个值就是按你所说的方法来的,这已经是个已知值了!
其实大家讨论的范畴是当前扫描周期的不确定性,它不容易被精确计算,只能预判,得到的数据都是过去式了,但我们可以从这个过去式的数据里发现一些规律。
因此,讨论扫描周期并不是要去精确地计算扫描周期的长短,而是要掌握一种概念或者是规律,控制程序的扫描周期在一个可靠的范围内波动,从而确保整个系统工作的稳定与可靠。

呵呵,Zane版主,看来你又在锻炼我了。 ^_^ 莫非你要我算出当前循环时间?很显然我不能。既然总坛主提出了这个讨论议题,我也按照这个游戏规则计算了一下,也应该属于正常的讨论议题。至于“拿来主义”、和“傻瓜式”,我并不想多说。对一个专业议题的思考、理论分析和实际编程测试、计算,只是个人兴趣!能开阔我的视野。

两个方面,自己编或者使用系统块,但是大多数系统块,自己是便不出来的,当然自己锻炼编程没有问题。赞同。但从节省时间来考虑的话,肯定是系统块节约时间,原因是操作系统帮你完成你所需要的功能。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54624条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。