说说西门子200的SM0.0特殊标志位
一直以来总想说说西门子200的特殊标志位SM0.0那会事,这么说这个?对。没有错,今天就说它(SM0.0)。这有什么可以说?不就是在STEP7 MicroWIN软件中系统定义的SMB0 系统状态位,Always_On SM0.0 该位总是打开,西门子编程人都知道的。
该标志位常用在当指令前面没有可用的实际控制条件时,提供了cpu和用户程序之间传递信息的方法。如、数据赋值程序:
(, 下载次数: 5) 上传 点击文件名下载附件 如果不加这个特殊标志位,程序编译时会报错(输出指令前面必须有输入触点),在此相当于无条件调用该指令的含义是一致的,并且是每一个周期VB0都被刷新一次。每一个周期刷新功能验证程序如下: (, 下载次数: 5) 上传 点击文件名下载附件 上诉程序会随着SM0.0每一个周期的刷新自动加1,当VB0数据到达字节数最大值255后的下一个扫描周期时,VB0字节数据将被溢出数据值为256,会循环实现加1。 至此,该特殊标志位这么简单的问题还需要过多的解释?请先不要拍砖,拍砖会伤头。 曾经我刚刚开始学习编程时,与网友有过一次关于循环体指令的理解讨论。当时理解:这个特殊标志位SM0.0既然是严格按每一个周期刷新的工作机制,则很自然地去理解了循环体FOR/NEXT指令的含义。 做一个简单的循环体(FOR/NEXT)指令,看看实际效果,程序如下: (, 下载次数: 4) 上传 点击文件名下载附件 上诉指令当输入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,是可以用程序去改变它的值的,所以才有刷新时刻一说 -------------- (, 下载次数: 5) 上传 点击文件名下载附件 这一段,单纯编译似乎没错,但下载时被告知编译错误。所以SM0.0不可写,是ReadOnly,也可以说是个常数。整个SMB0都是ReadOnly。 (, 下载次数: 5) 上传 点击文件名下载附件 ----------我认为S段off时是不会跳过的,全体无论如何按off条件执行。但觉得有特例,那是边缘指令。 -------貌似S段中,要么把SM0.0送进Q0.0,要么没有动作。实际运行,是把0送进了Q0.0。当S段为off时,能流都按off处理了(尽管是SM0.0),但无条件指令还在执行,把off能流送给了Q0.0。 这个例子写在这里,SM0.0= AlwaysOn,某种特殊情况下表现为off。象这种情况,最好避开。S段中,无条件指令只做条件,产生结果的都用条件指令。 欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4
如果不加这个特殊标志位,程序编译时会报错(输出指令前面必须有输入触点),在此相当于无条件调用该指令的含义是一致的,并且是每一个周期VB0都被刷新一次。
每一个周期刷新功能验证程序如下:
(, 下载次数: 5) 上传 点击文件名下载附件 上诉程序会随着SM0.0每一个周期的刷新自动加1,当VB0数据到达字节数最大值255后的下一个扫描周期时,VB0字节数据将被溢出数据值为256,会循环实现加1。 至此,该特殊标志位这么简单的问题还需要过多的解释?请先不要拍砖,拍砖会伤头。 曾经我刚刚开始学习编程时,与网友有过一次关于循环体指令的理解讨论。当时理解:这个特殊标志位SM0.0既然是严格按每一个周期刷新的工作机制,则很自然地去理解了循环体FOR/NEXT指令的含义。 做一个简单的循环体(FOR/NEXT)指令,看看实际效果,程序如下: (, 下载次数: 4) 上传 点击文件名下载附件 上诉指令当输入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,是可以用程序去改变它的值的,所以才有刷新时刻一说 -------------- (, 下载次数: 5) 上传 点击文件名下载附件 这一段,单纯编译似乎没错,但下载时被告知编译错误。所以SM0.0不可写,是ReadOnly,也可以说是个常数。整个SMB0都是ReadOnly。 (, 下载次数: 5) 上传 点击文件名下载附件 ----------我认为S段off时是不会跳过的,全体无论如何按off条件执行。但觉得有特例,那是边缘指令。 -------貌似S段中,要么把SM0.0送进Q0.0,要么没有动作。实际运行,是把0送进了Q0.0。当S段为off时,能流都按off处理了(尽管是SM0.0),但无条件指令还在执行,把off能流送给了Q0.0。 这个例子写在这里,SM0.0= AlwaysOn,某种特殊情况下表现为off。象这种情况,最好避开。S段中,无条件指令只做条件,产生结果的都用条件指令。 欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4
上诉程序会随着SM0.0每一个周期的刷新自动加1,当VB0数据到达字节数最大值255后的下一个扫描周期时,VB0字节数据将被溢出数据值为256,会循环实现加1。
至此,该特殊标志位这么简单的问题还需要过多的解释?请先不要拍砖,拍砖会伤头。
曾经我刚刚开始学习编程时,与网友有过一次关于循环体指令的理解讨论。当时理解:这个特殊标志位SM0.0既然是严格按每一个周期刷新的工作机制,则很自然地去理解了循环体FOR/NEXT指令的含义。
做一个简单的循环体(FOR/NEXT)指令,看看实际效果,程序如下:
(, 下载次数: 4) 上传 点击文件名下载附件 上诉指令当输入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,是可以用程序去改变它的值的,所以才有刷新时刻一说 -------------- (, 下载次数: 5) 上传 点击文件名下载附件 这一段,单纯编译似乎没错,但下载时被告知编译错误。所以SM0.0不可写,是ReadOnly,也可以说是个常数。整个SMB0都是ReadOnly。 (, 下载次数: 5) 上传 点击文件名下载附件 ----------我认为S段off时是不会跳过的,全体无论如何按off条件执行。但觉得有特例,那是边缘指令。 -------貌似S段中,要么把SM0.0送进Q0.0,要么没有动作。实际运行,是把0送进了Q0.0。当S段为off时,能流都按off处理了(尽管是SM0.0),但无条件指令还在执行,把off能流送给了Q0.0。 这个例子写在这里,SM0.0= AlwaysOn,某种特殊情况下表现为off。象这种情况,最好避开。S段中,无条件指令只做条件,产生结果的都用条件指令。 欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4
上诉指令当输入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,是可以用程序去改变它的值的,所以才有刷新时刻一说
--------------
(, 下载次数: 5) 上传 点击文件名下载附件 这一段,单纯编译似乎没错,但下载时被告知编译错误。所以SM0.0不可写,是ReadOnly,也可以说是个常数。整个SMB0都是ReadOnly。 (, 下载次数: 5) 上传 点击文件名下载附件 ----------我认为S段off时是不会跳过的,全体无论如何按off条件执行。但觉得有特例,那是边缘指令。 -------貌似S段中,要么把SM0.0送进Q0.0,要么没有动作。实际运行,是把0送进了Q0.0。当S段为off时,能流都按off处理了(尽管是SM0.0),但无条件指令还在执行,把off能流送给了Q0.0。 这个例子写在这里,SM0.0= AlwaysOn,某种特殊情况下表现为off。象这种情况,最好避开。S段中,无条件指令只做条件,产生结果的都用条件指令。 欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4
这一段,单纯编译似乎没错,但下载时被告知编译错误。
所以SM0.0不可写,是ReadOnly,也可以说是个常数。
整个SMB0都是ReadOnly。
(, 下载次数: 5) 上传 点击文件名下载附件 ----------我认为S段off时是不会跳过的,全体无论如何按off条件执行。但觉得有特例,那是边缘指令。 -------貌似S段中,要么把SM0.0送进Q0.0,要么没有动作。实际运行,是把0送进了Q0.0。当S段为off时,能流都按off处理了(尽管是SM0.0),但无条件指令还在执行,把off能流送给了Q0.0。 这个例子写在这里,SM0.0= AlwaysOn,某种特殊情况下表现为off。象这种情况,最好避开。S段中,无条件指令只做条件,产生结果的都用条件指令。 欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4
----------我认为S段off时是不会跳过的,全体无论如何按off条件执行。但觉得有特例,那是边缘指令。
-------貌似S段中,要么把SM0.0送进Q0.0,要么没有动作。
实际运行,是把0送进了Q0.0。
当S段为off时,能流都按off处理了(尽管是SM0.0),但无条件指令还在执行,把off能流送给了Q0.0。
这个例子写在这里,SM0.0= AlwaysOn,某种特殊情况下表现为off。
象这种情况,最好避开。S段中,无条件指令只做条件,产生结果的都用条件指令。