回复:欢迎拍砖。再论沿指令,实例还原真相

yanxiao

版主

  • 帖子

    12196
  • 精华

    47
  • 被关注

    189

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

发布于 2018-02-01 09:29:25

64楼

展开查看
以下是引用看雪001在2018-01-31 10:27:07的发言 >44楼

这个例子如果换成用P指令,那么,效果等同于:

 就是说在重用子程序时,将沿指令的地址用成了一个地址,逻辑结果就会混乱。

44楼 看雪001 的例子非常典型,有必要再解释一下。


先把要用到的200smart的沿指令特点写一下:

1、第一次扫描,沿指令把输入信号存下来,然后输出0;

2、后续的扫描,沿指令把输入信号和前次扫描存下的数据作比较,输出结果,然后把当前的输入数据再保存下来。

3、上升沿的比较规则:若当前输入 设为 AC,前次扫描保存下的数据 设为 AP,那么输出 OUT=(!AP) and AC。


看雪001的子程序内,含有一个上升沿指令,作用是对输入管脚signal上的信号取上升沿,然后从rising管脚上输出。


先看图中下面的调用,输出rising管脚上的M0.0是什么值?此时的沿指令,前一次调用保存的值是图上面的调用1,也就是CPU_输入0(I0.0),本次调用的输入是CPU_输入1,根据运算规则,输出 M0.0=(!I0.0) and I0.1。如此简单。效果同下面的语句相同:

LDN I0.0

A I0.1

= M0.0

(I0.0和I0.1来自同一扫描周期).


那么第一次调用的输出M0.0又是什么呢?假设对这个子程序的调用只有图示的两次。

CPU程序是个大循环。调用1时的沿指令,保存的前次扫描值,是调用2时留下的,即I0.1。按上面的分析,调用1的输出,除了每一次扫描时输出0,后续扫描的输出逻辑是:

M0.0 = (!I0.1) and I0.0

相当于:

LDN I0.1

A I0.0

= M0.0

但是,I0.1和I0.0来自两个相邻的扫描周期!


绕了一大圈,其实得到的结果很简单。

没有出现 逻辑 混乱。

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9120条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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