西门子1200存储器和寄存器(图说西门子特殊寄存器之SM1.0-SM1.7)

昨天回答了一个悟空问答,是有网友问PLC里边的SM1.1是什么意思,我做了回答后到目前快八千人阅读了,索性干脆把SMB1这个字节都来研究一下,分享给大家。

本文将按照SM1.0到SM1.7的顺序进行实验截图讲解,先看一下西门子200Micro/WIN软件中的帮助文档介绍吧:

西门子1200存储器和寄存器(图说西门子特殊寄存器之SM1.0-SM1.7)(1)

西门子官方对各个位的定义

上图是西门子对这些位的定义,我们平时只需要使用即可,为了让大家对这些点有更深入的了解,所以还是在程序中运行验证一下,看看是否如官方定义那样能准确反映指令的执行状态是否有错。

废话不多说了,直接上图:

①SM1.0 当操作结果为零时,某些指令的执行打开该位。

西门子1200存储器和寄存器(图说西门子特殊寄存器之SM1.0-SM1.7)(2)

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 数字操作产生负结果时,该位打开。

西门子1200存储器和寄存器(图说西门子特殊寄存器之SM1.0-SM1.7)(3)

SM1.2运行监控图

如图,程序第二行45-48=-3,得到负值,SM1.2就被置位了,而第一行程序结果为正值其跟随的SM1.2是没有被置位的,也就是说SM1.2和SM1.0有共通性,是可以多次使用,并且其状态是紧随最接近的那次运算。

④SM1.3 尝试除以零时,该位打开。

西门子1200存储器和寄存器(图说西门子特殊寄存器之SM1.0-SM1.7)(4)

SM1.3运行监控图

如图,程序第二行48÷0时,程序出错了,且SM1.3被置位了。多次使用,且紧随最近一次运算的特性和上边的情况一样。需要多说一句的是,该图片除以0,是CPU运行后才报错的,因为如果是程序编译的时候有错误是不能下载也不能运行的。

⑤SM1.4 "增加至表格"指令尝试过度填充表格时,该位打开。

西门子1200存储器和寄存器(图说西门子特殊寄存器之SM1.0-SM1.7)(5)

SM1.4监控程序起始状态

(不知道这个图片朋友们能看清楚么,感觉头条对大图片的支持好像不太好,可能我对上同图功能不太了解),该图片是程序下载下去后,我没有触发M0.2,也就是AD_T_TBL这个命令没有被触发。该命令就是增加至表格命令,也叫填表命令。因这命令的使用稍微有点复杂,所以程序分成3段来写,左边的框是这些变量的监控值。第一行程序就是定义表,并且对有些参数初始化,第二行是用M0.2触发上升沿去触发填表指令同时触发一次计数一次,并且让SM1.4去触发M0.0 。第三行程序是为了让大家更好的理解SM1.4的动作过程,做的动作捕捉锁存程序。

西门子1200存储器和寄存器(图说西门子特殊寄存器之SM1.0-SM1.7)(6)

SM1.4监控程序之填表1次

该图片是M0.2触发一次后,执行了一次填表命令,前后对比可知VW12中被写入了数值100,同时SM1.4没有动作,可以看到第三行的程序M0.1没有被自锁。倘若SM1.4动作一次,无论是被置位还是点动一次,M0.1都将实现自锁定。

西门子1200存储器和寄存器(图说西门子特殊寄存器之SM1.0-SM1.7)(7)

SM1.4监控程序之填表2次

该图片是M0.2触发第2次后,又一次执行填表命令,前后对比可知这次VW14中被写入了数值100,同时SM1.4没有动作,因为第三行的程序M0.1没有依然没有被自锁。

西门子1200存储器和寄存器(图说西门子特殊寄存器之SM1.0-SM1.7)(8)

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指令尝试从空表读取的时,该位打开。

西门子1200存储器和寄存器(图说西门子特殊寄存器之SM1.0-SM1.7)(9)

SM1.5运行监控初始状态

FIFO指令即先进先出指令,也是对表操作的指令。该图即是运行FIFO指令时,M0.2没有被触发时的初始状态图,同样左边是相关参数的监控表。程序的第一行主要是上电清零复位,程序第二行是触发先进先出指令,同时观察SM1.5的动作,可以看到VW20我在程序其他地方没有定义,因此它不是一个被完整定义的表,也可以说不是表,所以程序执行的时候,SM1.5应该会动作。第三行程序和前边的一样,是用来锁存SM1.5是否有动作的小程序。

西门子1200存储器和寄存器(图说西门子特殊寄存器之SM1.0-SM1.7)(10)

SM1.5运行FIFO程序时的监控

西门子1200存储器和寄存器(图说西门子特殊寄存器之SM1.0-SM1.7)(11)

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数值转换为二进制数时,该位打开。

西门子1200存储器和寄存器(图说西门子特殊寄存器之SM1.0-SM1.7)(12)

SM1.6运行监控图

该图程序第一行BCD_I运行无错误,所以SM1.6没有激活;程序第二行1114不能被转换为一个BCD数,所以程序出错了,SM1.6就被激活了。所以SM1.6就是用来检测一个值是否是合法的BCD码数据。这里卖个关子,留一个问题给朋友们,为何程序段第一行1113用BDC_I指令就没有出错,而程序段第二行1114同样使用BCD_I指令就报错了呢? 如果不明白的朋友请关注留言,我将给出答案。

⑧SM1.7 当ASCII值无法转换成有效的十六进制数值时,该位打开。

西门子1200存储器和寄存器(图说西门子特殊寄存器之SM1.0-SM1.7)(13)

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的朋友有所帮助,欢迎大家转发关注,如有不明白的地方请留言,我将及时回复,谢谢。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页