课程中心
HOME
课程中心
正文内容
plc编程命令JC 西门子PLC语句表编程:跳转指令
发布时间 : 2024-11-28
作者 : 小编
访问数量 : 23
扫码分享至微信

西门子PLC语句表编程:跳转指令

正常情况下,程序的执行顺序是自上而下,逐条扫描执行的。STL指令集中有一类跳转指令,可以中断程序的这种线性执行流,跳转到指定的位置继续执行。

一、 跳转标签

跳转的"目标"地址由"标签"来指定,该标签称之为"跳转标签"。跳转标签最多4个字符,且第一个字符必须为字母。跳转标签后必须带有冒号":" ,且在行中必须位于程序语句之前。

二、 跳转指令

跳转指令根据"跳转"的机理,首先可分为"无条件跳转"和"条件跳转",除此之外,还有一个特殊的跳转指令,可实现分支跳转。

1、 无条件跳转指令JU

程序在执行时,遇到JU指令,无条件的跳转到其"标签"所指示的代码行继续执行。跳转指令和跳转目标必须在同一个块内。

需要注意的是:理论上,JU指令允许向前跳,也允许向后跳。向后跳属于常规用法,一般没什么问题。但向前跳,容易形成死循环,因此,一般不建议使用JU命令向前跳。

2、 有条件跳转指令

顾名思义,与无条件跳转不同,有条件跳转指令中断原程序逻辑流,发生跳转是需要条件的,根据跳转条件的不同,它们又有不同的分类。

(1) 由RLO的状态决定是否跳转

对于"JC"指令,当逻辑运算结果(RLO)为"1"时,"跳转"生效,中断当前的线性扫描,跳转到"跳转标签"所标识的行继续执行。同样,可以选择向前跳,也可以向后跳。

"JCN"指令与"JC"指令相反,当"RLO"为"1"的时候,"跳转"生效。

另外:当条件不满足,不执行跳转的时候,该指令会将RLO置"1",然后继续执行下面的指令。

(2) 带BR位,由RLO状态决定是否跳转

对于"JCB"指令,其与"JC"指令一样,当RLO为1时,"跳转"生效,中断当前的线性扫描,跳转到"跳转标签"所标识的指令行继续执行。而与"JC"指令不同的是,"JCB"指令会"额外"的做一项工作:将RLO的状态复制到BR(二进制结果位)中。

同样,"JNB"指令,其触发跳转的条件为RLO=0,且也会将RLO状态复制到BR中。

(3) 由"状态寄存器"的"BR"位决定跳转与否

(4) 由"状态寄存器"的"OV"、"OS"位决定跳转与否

状态字的第4位和第5位分别为"溢出位OV"和"溢出状态保持位OS"。当算术运算或浮点数比较指令执行时出现错误(如溢出、非法操作和不规范的格式等)时,OV位会被置1,同时OS位也被置1。而如果后面同类指令执行结果正确,则OV位会被清0,但OS位仍然保持为1。只有JOS指令、块调用指令和块结束指令才能复位OS位。

一般用于检查算术运算指令结果是否有溢出,若有溢出,可用JO、JOS指令进行跳转,以做相应的错误处理。

(5) 由条件码1(CC1)和条件码0(CC0)决定是否跳转

状态字的第7位(CC1)和第6位(CC0)分别为条件码1和条件码0。这两位综合起来用于表示在累加器1(ACCU1)中产生的算术运算或逻辑运算的结果与"0"的大小关系、比较指令的执行结果或移位指令的移出位的结果。

CC1和CC0的状态与"算术运算"的结果的关系如下:

在"跳转指令"中,有一类指令根据算术运算的结果来决定逻辑流是否跳转,本质上,是在执行完算术运算后,根据CC1和CC0的不同状态,来决定相应的跳转指令是否具备跳转条件,如下表所示:

3、 分支跳转指令JL

在语句表的指令集中,还有一条特殊的跳转指令,它能够实现向多路分支跳转的功能,它就是分支跳转指令JL,其执行流程如下图所示。

JL指令根据累加器1(ACCU1)的低字节中的数值大小来决定程序"沿着"哪一条分支执行。由于一个字节的数值范围为0~255,因此,JL指令最多可管理多达256条分支的程序。

JL指令一般要与无条件跳转指令JU配合使用,其指令的格式如下:

详见《PLC语句表编程:“跳转指令”特辑》

例说300PLC中STL编程实现程序循环

说明:

本篇文章是我获得头条图文原创申请资格后发表的第一篇文章,其实获得这个资格后心中还是有点忐忑的,因为我是头条新手,担心触犯到规则而失去资格,得而复失是谁都不想承受的。基于此,后续文章我可能会尽量省去对软件帮助文件中指令解释的切图,还望大家多多包涵!

引言:

我之前的文章讲了S7-200PLC中for循环的用法,也举例说明了循环指令配合指针可以进行数据的集中快速处理,想必大家对循环指令已经有了一个大致的概念。今天想给小伙伴们分享一下S7-300PLC中LOOP循环指令的用法,它的作用和200PLC中的for循环指令一样,因为在300梯形图的指令表下没有for指令(在SCL编程中是有for指令的),所以LOOP循环指令只能在STL编程语言下应用。

梯形图(LAD)语言编程是PLC中应用最广泛的编程方法,而语句表(STL)语言编程则是仅此于LAD的一种方法,至少我个人是这么认为的,所以今天就借LOOP指令的讲解了解一点吧。

文章的题目就是例说,所以直接上例子吧,为了方便大家对比200和300中的异同点,我做了一个和前一篇文章相似的程序:

OB1中的程序

这个图片就是我写在OB1中的两行程序,因为全部使用的M区的变量,所以整个项目就只有OB1这一个程序块。

图中程序段的第二行,我用红框标示出来的①和②,就是LOOP指令的使用方法。大家可以看到我对程序的备注,①处我备注的是循环指令的头,②处我备注的是循环指令的尾,其实在STEP7的帮助文件中没有对这个头尾进行太多的解释,但是我个人看过的所有LOOP循环程序中都是这样使用的,因此这个用法是一种规定规则性用法,大家需要遵照!

为了更详细的说明LOOP指令使用时应该遵守的规则,我对网络2进行了单独的切图:

程序段2的切图

图中建议直接套用的部分,大家直接套用就是,我目前还没有见过不是这么写的。

蓝色圈③处L 2就是把2装入ACCU1中,也就是装入32位累加器1中,其实帮助文件的解释是累加器1的低16位中的值不等于0的时候就会执行循环,也就一个字的表示范围(-32768~+32767),但是这里最好是输入0-65365之间的无符号数,免得自己混乱,而且从实际应用中来说循环几百次就差不多了!(我今天输入-2,程序也执行了循环,有兴趣的朋友可以自己深入测试!)

MW2可以自己随便制定,比如DB1.DBW50也是可以的,只需要这里是一个16位的变量即可。

再来说一下LOOP NEXT,这个NEXT其实是一个标签名字,这个是可以随便取的,如果SSS或者什么,但是要前后对应,而且必须在所处的块内是唯一的名字。因为这个LOOP循环指令其实是扫描到这里就跳转到前边的标签处,执行下一次循环程序,所以是要求这个LOOP指令和标签是处于一个块中的,而且必须是在同一个块中,帮助文件中也是这么描述的。

上边讲了硬性的规则,下边就来看一下程序运行的情况:

程序运行监控图--集合图

该图片是PLCSIM里边的监控,这次我没有用变量表来监控,就是为了方便把程序的执行过程展示给大家,图片中是A,B,C分别代表程序执行的3个阶段。

图片A阶段是CPU刚刚从STOP到RUN的监控图,可以看到所有的值都为0。

图片B阶段是我点击了M0.0让其为1,而后被自复位了,因为程序中网络段1就是M0.0接通就自复位,同时将字符串“YOUAREYANGMAN”中的字符装入MD8-MD20中。(一个字符需要占用1个字节,并且西门子300PLC中没有像200中那样的字符串复制梯形图指令,因此只有分段传送了,当然如果不用MOVE指令还是有别的办法的。)--同时可以看到MD32-MD44中的值全部都是0,是因为LOOP循环指令没有被执行。

图片C阶段是我点击了M0.2让其为1,网络2中的程序检测到M0.2的结果为1,执行JC就跳转到了love标签处,这个标签是跳转指令的标签不是LOOP指令的标签。当M0.2的结果为0的时候是执行JCN指令,跳转到了标签end处,end处是空指令,什么都不执行。程序执行到love标签处,先给MD100和MD200赋予一个初始值,然后进入循环指令,需要循环的次数是2次。

重点来说一下循环中的这段程序:

L MD[MD100],T MD[MD200]这里的[MD100],[MD200]其实都是32位变量的间接寻址,大家可以理解为是指针。在循环指令第一次执行的时候这里其实是L MD8,T MD32,也就是说吧MD8中的内容装到MD32中。(本文的主旨是讲循环指令,所以MD[MD100]=MD8的原因这里就不解释了,后续有时间会发文章出来)

MD8的值传送到MD32中,就可以看到MD32中的值从0变成了‘YOUA’,然后再执行MD100和MD200的自加32,实现地址的变更。当自加32完成后,MD[MD100]=MD12了,MD[MD200]=MD36了。--因为循环中的程序是先传送数据,而后变更地址,所以最新的地址要第二次循环的时候才被写入。

程序继续向下执行,在断点调试测试的时候可以看到,程序执行完L MW2这一句的时候,ACCU1的值还是2,当执行完LOOP NEXT的时候,ACCU1的值就变成了1,当第二次执行到LOOP NEXT指令的时候ACCU1的值就变为了0,所以程序不再继续循环了。--我说段话还有一个用意是解释为何监控图上最终MW2的值是1,为何不是0?

MW2最终为1是正确的,原因是第一次LOOP执行完,跳转到NEXT:T MW2,就是因为这句话造成了MW2为1的,因为T指令就是把ACCU1中的内如复制给后边的变量中,此时ACCU1是1,因此MW2位1。第二次循环指令执行到最后LOOP NEXT处后ACCU1的值为0了,就不跳转回去了,MW2没法再次被写了,所以说MW2=1是正确的最后结果。

当第二次执行循环程序时,是把MD12的值传送到MD36中,因此可以看到MD36的值从0变为了‘REYA’,后边的自加再次实现地址变更,地址变为MD16和MD40,可是程序循环2次结束了。(循环执行2次3次4次,我都实验了的,可以保证我说的是正确的,朋友们可以自行测试!)

LOOP NEXT在第二次执行完之后,程序就继续向下执行NOP 0处,至此所有的程序就执行完了!

指令和程序就分析完了,LOOP循环指令的一些硬性规则,以及程序执行的过程,特别是循环次数到达后MW2的值为1而不为0原因,希望通过我的这篇文章,能够让大家对这些有了更深入的认识。顺便说了一些STL编程中的相关指令,以及西门子300中间接寻址的方式,这些本文讲的比较浅,因为主旨是讲循环指令,望大家理解!

力求文章解释的清除明白还能有点深度是我的追求,如果觉得本文对您有帮助请关注,如有问题关注并留言,我会及时回复,谢谢!

相关问答

plc编程入门怎么学,开始时需要学什么?

[回答]学IT有两种方式:自学可以自己去买关于IT方面的书籍,例如软件编程,那么你就需要将软件编程从零基础到编程开发的书籍都需要买全,这样是比较省钱,但是...

深圳PLC培训机构哪家靠谱?

[回答]PLC是可编程逻辑控制器的简称,PLC是种专门为在工业环境下应用而设计的数字运算操作电子系统。它采用一种可编程的存储器,在其内部存储执行逻辑运算...

道诺智能投料机的采用哪种计量方法?

[回答]由料斗,秤料螺旋,计量系统,锁风系统,送料阀、鼓风系统,电控装置、报警装置等组成。所有设备零部件全部装在一个机座上,便于起吊及现场安装。该机针...

帮忙一下,工业线路板维修包括哪些?

[回答]工业线路板维修跟随现在世界的快捷发展,电子技术和自动化的技术都得到了很好的发展,面对于这些数控的技能也是越来越众多。现正在少量的数控机床已...

谁能帮助我!管焊的用途是什么吗

[回答]冷却淬火油,冷却电镀用液、冷却减速器润滑油、冷却轧制机、拉丝机冷却液。4、机械制造业:各种淬火液冷却,冷却压力机、工业母机润滑油,加...1.管焊...

哪位知道乙型网带输送机食品输送加工网带

[回答]河南的杨经理咨询我们公司输送铁块用的(链板输送机),杨经理输送的铁块砸在输送面上有一定的冲击力所以要求链板做厚一点。根据杨经理的要求我们给杨...

除氯设备公司有哪些

[回答]襄阳膜科水处理工程有限公司产品有:反渗透设备,超滤设备:超滤除热原(内毒素)设备,精密过滤器,微孔过滤器,白酒过滤设备,EDI设备,离子交换设备,全自...

哪位行家!可以推荐一下:铜陵农用JC-17型机耕船,JC-17型机耕...

[回答]源型与漏型的选择决定了使用那种传感器,他决定了COM端口的电压为正或是为负PLC的是输入点/输出点的公共端子COM口,当公共点接入负电位时,就是源型接...

诸位老师,有没有谁给我推荐一下!宁波鄞州专业的精密高速数...

[回答]和其他数控系统相比,FANUC对自身的系统采用比较好的保护电路。数控系统是数字控制系统的简称,英文名称为(NumericalControlSystem),根据计算机存储...

我不知情的情况下,我的宽带被电信公司装到别的地方使用,我...

立即咨询v2jc****hgwvtb11分钟前提交了咨询ejxl****hrwtha3分钟前提交了咨询...60分钟无限次追问立即咨询接入电力线(PLC)宽带通信合作协议其他合同范本39132...

 李伟波  五霸岗 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部