本文将按照SM1.0到SM1.7的顺序进行实验截图讲解,先看一下西门子200Micro/WIN软件中的帮助文档先容吧:
西门子官方对各个位的定义
上图是西门子对这些位的定义,我们平时只须要利用即可,为了让大家对这些点有更深入的理解,以是还是在程序中运行验证一下,看看是否如官方定义那样能准确反响指令的实行状态是否有错。

废话不多说了,直接上图:
①SM1.0 当操作结果为零时,某些指令的实行打开该位。
SM1.0运行监控图
如图,左边的图片第一行程序是45-45=0,因此其紧跟的SM1.0接通了,M10.0也被勉励;而第二行程序48-45=3,其紧跟的SM1.0没有接通。右侧的图片是我把第二行程序修正为48-48后再次运行的监控,此时两行程序中的SM1.0都接通了,证明西门子的解释是精确的减法操作的结果为0,因此SM1.0被置1了。
这里还有一个问题要提一句,便是从图中可以看到SM1.0是可以多次利用的,并且他是紧跟一个运算的结果,判断最近的这个运算结果是否为0,不做试验是不知道这个点的,以是任何事情自己亲手做一定更有收成。
②SM1.1 当溢出结果或检测到造孽数值时,某些指令的实行打开该位。
这个点,由于我在悟空问答里边已经回答了,以是这里就不再讲了,麻烦大家自己去看看。(实在,如果我在这里回答,不知系统会不会说我是抄袭我自己,^_^)
③SM1.2 数字操作产生负结果时,该位打开。
SM1.2运行监控图
如图,程序第二行45-48=-3,得到负值,SM1.2就被置位了,而第一行程序结果为正值其跟随的SM1.2是没有被置位的,也便是说SM1.2和SM1.0有共通性,是可以多次利用,并且其状态是紧随最靠近的那次运算。
④SM1.3 考试测验除以零时,该位打开。
SM1.3运行监控图
如图,程序第二行48÷0时,程序出错了,且SM1.3被置位了。多次利用,且紧随最近一次运算的特性和上边的情形一样。须要多说一句的是,该图片除以0,是CPU运行后才报错的,由于如果是程序编译的时候有缺点是不能下载也不能运行的。
⑤SM1.4 \"大众增加至表格\"大众指令考试测验过度添补表格时,该位打开。
SM1.4监控程序起始状态
(不知道这个图片朋友们能看清楚么,觉得头条对大图片的支持彷佛不太好,可能我对上同图功能不太理解),该图片是程序下载下去后,我没有触发M0.2,也便是AD_T_TBL这个命令没有被触发。该命令便是增加至表格命令,也叫填表命令。因这命令的利用轻微有点繁芜,以是程序分成3段来写,左边的框是这些变量的监控值。第一行程序便是定义表,并且对有些参数初始化,第二行是用M0.2触发上升沿去触发填表指令同时触发一次计数一次,并且让SM1.4去触发M0.0 。第三行程序是为了让大家更好的理解SM1.4的动作过程,做的动作捕捉锁存程序。
SM1.4监控程序之填表1次
该图片是M0.2触发一次后,实行了一次填表命令,前后比拟可知VW12中被写入了数值100,同时SM1.4没有动作,可以看到第三行的程序M0.1没有被自锁。倘若SM1.4动作一次,无论是被置位还是点动一次,M0.1都将实现自锁定。
SM1.4监控程序之填表2次
该图片是M0.2触发第2次后,又一次实行填表命令,前后比拟可知这次VW14中被写入了数值100,同时SM1.4没有动作,由于第三行的程序M0.1没有依然没有被自锁。
SM1.4监控程序之填表3次
该图片是M0.2触发第三次后,SM1.4被触发了一次,由于程序的第三段M0.1被自锁定了,为何填表2次没有chuf触发SM1.4,而填表第三次就触发了呢?是由于我定义的表格的最大条款是6,并且指定了填入数据是从第5个条款开始填写,以是填写2次就把条款5和条款6里边填写了内容,当第三次填写时该当是往条款7中写内容,而我的表最大条款便是6,因此可以说是“过度添补表格了”,或者说填写表格时候溢出了,因此SM1.4动作了一下。
从程序可以看到SM1.4和前边的SM点是有不同的,便是这里是SM1.4是点动了一下,不像前边的是保持为1。以是SM1.4便是在利用填表指令(AD_T_TBL)时候给与用户一个信息提示的状态位。
⑥SM1.5 LIFO或FIFO指令考试测验从空表读取的时,该位打开。
SM1.5运行监控初始状态
FIFO指令即前辈先出指令,也是对表操作的指令。该图即是运行FIFO指令时,M0.2没有被触发时的初始状态图,同样左边是干系参数的监控表。程序的第一行紧张是上电清零复位,程序第二行是触发前辈先出指令,同时不雅观察SM1.5的动作,可以看到VW20我在程序其他地方没有定义,因此它不是一个被完全定义的表,也可以说不是表,以是程序实行的时候,SM1.5该当会动作。第三行程序和前边的一样,是用来锁存SM1.5是否有动作的小程序。
SM1.5运行FIFO程序时的监控
SM1.5运行LIFO程序时的监控
这两张图片分别是运行FIFO和TIFO指令时候的监控,M0.2触发了指令,如果VW20是一个完全且里边有内容的表,那么其干系条款中的值将被复制到VW10中。这里VW20是一个空表,以是SM1.5被激活了一次,程序的第三行捕获到了该状态,并进行了自锁,以是M0.1被锁定了,至此SM1.5的功能也被验证了。
SM1.4和SM1.5都是关于PLC处理表指令时候给出的状态提示,和前边处理数值指令时候的那些状态位的触发情形是不一样的,处理数值干系指令时候SM状态位是常ON的状态,而处理表指令的SM1.4-SM1.5则是点动的状态,这是他们的不同,同时也解释了单单看帮助文件,有些内容是无法确定的,还是要连线测试一下才能知道的更多。--关于填表指令的程序,如果有不明白的请关注留言,我会及时解答。因文章的主旨是将SM分外寄存器,以是表指令就没细说,望大家包含。
⑦SM1.6 考试测验将非BCD数值转换为二进制数时,该位打开。
SM1.6运行监控图
该图程序第一行BCD_I运行无缺点,以是SM1.6没有激活;程序第二行1114不能被转换为一个BCD数,以是程序出错了,SM1.6就被激活了。以是SM1.6便是用来检测一个值是否是合法的BCD码数据。这里卖个关子,留一个问题给朋友们,为何程序段第一行1113用BDC_I指令就没有出错,而程序段第二行1114同样利用BCD_I指令就报错了呢? 如果不明白的朋友请关注留言,我将给出答案。
⑧SM1.7 当ASCII值无法转换成有效的十六进制数值时,该位打开。
SM1.7运行监控图
该图程序第一行是将字符ABCD传送到MD0中,然后用ATH指令也便是ASCII转16进制指令把MB1开始的3个字节中的字符转换为16进制放到MB10开始的3个字节中,由于都被完美转换了,以是没缺点,SM1.7未动作。而程序的第二行,是将字符HIJK传送到MD4中,然后用ATH指令将MB4开始的3个字节中的字符转化为16进制数后放到MB20开始的3个字节中去,可是这里出错了,SM1.7就被置位了。这里出错的缘故原由是HIJK不能被ATH指令有效的转换为16进制,就相称于在西门子200系统中HIJK不能被视作合法的ASCII字符,西门子对有效的ASCII输入字符有规定,而HIJK不在有效规定内。
至此,SM1.0-SM1.7的编程监控讲解就结束了,相信通过我这篇大家对这些分外点位的认识和用法有了比帮助文件中更深的认识,希望能对学习利用西门子200的朋友有所帮助,欢迎大家转发关注,如有不明白的地方请留言,我将及时回答,感激。