QQ登录

只需一步,快速开始

西门子200的SM0.0特殊标志位

[ 复制链接 ]
西门子200的SM0.0特殊标志位

说说西门子200的SM0.0特殊标志位

    一直以来总想说说西门子200的特殊标志位SM0.0那会事,这么说这个?对。没有错,今天就说它(SM0.0)。这有什么可以说?不就是在STEP7 MicroWIN软件中系统定义的SMB0 系统状态位,Always_On    SM0.0     该位总是打开,西门子编程人都知道的。

    该标志位常用在当指令前面没有可用的实际控制条件时,提供了cpu和用户程序之间传递信息的方法。如、数据赋值程序:

6361024482411332009448527.JPG

如果不加这个特殊标志位,程序编译时会报错(输出指令前面必须有输入触点),在此相当于无条件调用该指令的含义是一致的,并且是每一个周期VB0都被刷新一次。

每一个周期刷新功能验证程序如下:

6361024484156610998449604.JPG

上诉程序会随着SM0.0每一个周期的刷新自动加1,当VB0数据到达字节数最大值255后的下一个扫描周期时,VB0字节数据将被溢出数据值为256,会循环实现加1。

   至此,该特殊标志位这么简单的问题还需要过多的解释?请先不要拍砖,拍砖会伤头。

   曾经我刚刚开始学习编程时,与网友有过一次关于循环体指令的理解讨论。当时理解:这个特殊标志位SM0.0既然是严格按每一个周期刷新的工作机制,则很自然地去理解了循环体FOR/NEXT指令的含义。

   做一个简单的循环体(FOR/NEXT)指令,看看实际效果,程序如下:

6361024485930024691366128.JPG

上诉指令当输入I0.0为ON且紧接着连接一个上升沿(P)接通一个周期后,VB0的数值应该是1?答案当然不是1,而是10。那这里的一个循环体仅仅有效了一个周期,为什么循环体内的加1程序会循环10次,怎么又不是按程序的扫描刷新机制工作了呢?糊涂了,彻底的糊涂了。其实答案前面已经说到了,这个特殊标志位另一个作用就是提供了cpu和用户程序之间传递信息的方法,说明详见200系统手册5-4,特殊存储器(SM)标志位内容,仅此说明,一点肤浅的认识,请勿拍砖。我对指令就是这样一个一个慢慢理解,逐渐累积起来的。

循环体(FOR/NEXT)指令注解:

FOR:

INDX:每次循环体次数的累积数存储地址

INIT:起始值

FINAL:结束值

NEXT:循环体返回标志。

当调用循环体指令时,循环体会按起始数(INIT指定)开始自动往下一个程序网络段运行,一直至遇到NEXT指令时返回,返回到FOR标记的网络段自动进行第二次循环……,循环次数到FINAL指定的数值为止,自动跳出循环体。一些通讯程序中如CRC校验程序常常被使用,非常方便。


---------------我的理解:

S7200的指令主要分二类:一类叫做无条件指令,另一类叫做有条件指令。其它的如LBL、NEXT,只起标记作用,它们与条件无关。

1、无条件类指令,以位为操作数,或产生位结果的,也就在LAD中操作能流的。

2、条件类指令,当然前面必须给条件才行。

所以,象INC指令,你得给一个条件。SM0.0和M0.0没有本质区别。如果你的程序中让M0.0始终为1,效果就和SM0.0一样。

条件,LAD必须显式给出,这个也许叫规则吧。

还可以隐式给出,这在STL中是合法的。比如:

INCB VB0

光这一句,STL可以执行,前面的条件,若是主程序或子程序开始,则为1;中间的情况,则为上一程序段留下来的条件。


----------我的本意是主要想说明这个标志位SM0.0是每个周期均刷新的,而不是程序段本身。


----------也可以认为SM0.0根本不刷新。


证明SM0.0有没刷新,你可以让程序去写SM0.0,能不能让它变0。

象 I0.0,是可以用程序去改变它的值的,所以才有刷新时刻一说



--------------

6361025791664462849425877.JPG

这一段,单纯编译似乎没错,但下载时被告知编译错误。

所以SM0.0不可写,是ReadOnly,也可以说是个常数。

整个SMB0都是ReadOnly。

6361025831644053558613326.JPG


----------我认为S段off时是不会跳过的,全体无论如何按off条件执行。但觉得有特例,那是边缘指令。


-------貌似S段中,要么把SM0.0送进Q0.0,要么没有动作。

实际运行,是把0送进了Q0.0。

当S段为off时,能流都按off处理了(尽管是SM0.0),但无条件指令还在执行,把off能流送给了Q0.0。


这个例子写在这里,SM0.0= AlwaysOn,某种特殊情况下表现为off。

象这种情况,最好避开。S段中,无条件指令只做条件,产生结果的都用条件指令。




回复

使用道具 举报

快速回复 返回列表 客服中心 搜索