说说西门子200的SM0.0特殊标志位
一直以来总想说说西门子200的特殊标志位SM0.0那会事,这么说这个?对。没有错,今天就说它(SM0.0)。这有什么可以说?不就是在STEP7 MicroWIN软件中系统定义的SMB0 系统状态位,Always_On SM0.0 该位总是打开,西门子编程人都知道的。
该标志位常用在当指令前面没有可用的实际控制条件时,提供了cpu和用户程序之间传递信息的方法。如、数据赋值程序:

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

上诉程序会随着SM0.0每一个周期的刷新自动加1,当VB0数据到达字节数最大值255后的下一个扫描周期时,VB0字节数据将被溢出数据值为256,会循环实现加1。
至此,该特殊标志位这么简单的问题还需要过多的解释?请先不要拍砖,拍砖会伤头。
曾经我刚刚开始学习编程时,与网友有过一次关于循环体指令的理解讨论。当时理解:这个特殊标志位SM0.0既然是严格按每一个周期刷新的工作机制,则很自然地去理解了循环体FOR/NEXT指令的含义。
做一个简单的循环体(FOR/NEXT)指令,看看实际效果,程序如下:

上诉指令当输入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校验程序常常被使用,非常方便。
2016年9月23日星期五