位变量复位之效率分析

已锁定

醉书生

  • 帖子

    718
  • 精华

    25
  • 被关注

    18

论坛等级:侠士

注册时间:2004-06-13

普通 普通 如何晋级?

位变量复位之效率分析

1041

5

2007-10-10 10:09:18

在西门子 S7-200 中,如何复位一个位变量,比如 Q0.0 ?
  最常用最直接的就是用 R 指令吧
    ld sm0.0
    r q0.0, 1 // 占用程序空间 9 字节,执行时间3.7us
  但我更喜欢用线圈输出指令
    ldn sm0.0
    = q0.0 // 占用程序空间 4 字节,执行时间2.1us
  两种方法各有优劣,R 指令的好处是代码量少,复位多个变量时占用空间不变,但需要多个被复位的变量地址连续,且执行时间较长。线圈输出指令的好处是执行效率高,复位多个变量时不需要地址连续,但占用空间随变量增多而变大,且代码要多。
  [COLOR=RED]R指令占用空间: 9
  R指令执行时间: 0.8 + 2.9 * (n==1) + 14 * (n-1)
  线圈指令占用空间: 2 + 2 * n
  线圈指令执行时间: 0.9 + 1.3 * n 微秒 // n 为复位的变量数[/COLOR]

  n 为复位的变量数,可以算出,n<=3 时,无论时间还是空间,线圈指令均占优势,n<=15 时,线圈指令时间上占优势,但花费空间更多,n>15 时,R 指令更好。

  事实上,只要时间占优,我更愿意选择线圈指令。不要小看几个微秒的区别,这些指令太基础太常用了,在整个工程中用到的机会很多,对扫描周期的影响可以达到数百个微秒,甚至到毫秒级,而扫描周期跟整个系统实时性表现密切相关。作为开发者,这里应该斤斤计较。

  两种复位方法,实际上代表着两类编程习惯,比如用两个按钮控制启停,可以这样:
    ld i0.0
    s q0.0, 1
    ld i0.1
    r q0.0, 1 // 注意两个网络的顺序,此顺序同时按下两个按钮时是停止优先的
  或
    ld i0.0
    o Q0.0
    an i0.1
    = q0.0
  两种方法在空间、时间上均有较大别区。这只是一个最简单的例子,在复杂的逻辑处理中,R/S 指令的使用可以简化编程思路,想到什么条件就置/复位一下,不用考虑逻辑互锁,这些指令可以分散在不同的网络甚至不同的子程序中(但要考虑到多条指令的顺序,因在一个扫描周期内,同一输出点的多次操作,只有最后一条是有效的,如果程序其它地方要引用Q0.0的状态,更要小心翼翼)。轻松是轻松了,但这是不利于程序结构化的,出现异常时排错较为麻烦。后一种方式在处理复杂逻辑时很麻烦,有时甚至需要在网络前加额外的辅助条件变量,但时空效率高,对同一输出的处理集中在一个网络中,异常时通过在线监控可轻易排错。
  前一种方式轻松的是开发者,后一种方式轻松的是整个系统。
位变量复位之效率分析 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33266条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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