模拟量模块6ES7231-7PC22-0XA0西门子触摸屏代理商西门子交换机代理商
所谓子程序,它是区别于主程序而存在的独立程序段,只能呆在副程序区的可怜瓜娃子。就像我之前说的,你妈妈叫你打酱油,有苹果就顺便买几个,这里的打酱油是主程序,买苹果是子程序。
SIEMENS | 模块 | 6ES7512-1DK01-0AB0 |
SIEMENS | 模块 | 6ES7132-6BF01-0AA0 |
Siemens | 电缆 | 6ES7288-6EC01-0AA0 |
SIEMENS | 存储卡 | 6ES7954-8LL03-0AA0 |
SIEMENS | 交换机 | 6GK5216-0BA00-2AC2 |
SIEMENS | 交换机 | 6GK5208-0BA00-2AC2 |
Siemens | 模块 | 6ES7288-1CR60-0AA0 |
酱油是必须要打的,但苹果买不买取决于你CALL不CALL,如果你想把买苹果的钱拿去买辣条,此时买苹果这个子程序就不会被驱动(CALL),你妈妈会不会赏你一个鞋饼就另说了。
调用子程序和条件跳转一样,都是PLC的瞬移特异功能,但CJ主要是在主程序区蹦跶,怎么跳转,都逃主程序区这五指山,但调用子程序就不一样了,它一跳就直接跳到副程序区去了,就跟孙猴子的筋斗云似的。那么,这个筋斗云怎么用呢?我们接着往下看。
1、子程序调用指令CALL、SRET
要想在PLC梯形图中跳出主程序这个牢笼,召唤子程序,就必须要用到子程序调用指令CALL,还要捎带上CALL的媳妇SRET。
和CJ不一样的是,子程序调用指令CALL必须要和子程序返回指令SRET成对使用。但又和CJ指令一样,CALL的适用软元件也是分支指针P0~P127,且P63不能用于CALL。
在编程时要注意分支指针P的使用,同一标号的P不能被CJ指令和CALL指令共用,例如CALL P5中的P5就不能用于CJP5。
从编程手册中可以看到,CALL指令仅用于16位,且具有连续执行型和脉冲执行型两种。连续执行型和脉冲执行型的区别于CJ差不多,在此不再赘述。
SRET指令和FEND指令一样无驱动条件,仅用于子程序的返回。在子程序中,执行到子程序返回指令SRET时,立即返回到主程序调用指令的下一行继续往下执行。
如上图所示,当驱动条件X0接通(X0=ON),执行CALLP5,程序跳转到副程序区中子程序的入口地址P5处往下执行,执行到SRET指令时,立即返回到主程序区CALLP5的下一行继续往下执行。
2、子程序嵌套
子程序嵌套,是指子程序中再应用子程序调用指令去调用其他子程序,所谓“三十六计计中计”,一环扣一环,一套嵌一套。当然,这个调用的过程类同于主程序调用子程序的过程。
如上图所示就是2层嵌套的程序流程图,当驱动条件X0接通,调用子程序1,在执行子程序1的过程中,驱动条件X1接通,调用子程序2,执行完子程序2后,返回到子程序1中调用指令CALLP6的下一行继续执行完子程序1,直到执行到子程序1的返回指令后返回到主程序中调用指令CALL P5的下一行继续往下执行。
在三菱PLC2N中,调用子程序的嵌套层数,对主程序而言多有5层,显然,对子程序而言就要少一层,就是4层。如上图的子程序嵌套流程图,子程序2中还可以有3,3中有4,4中有5,5中就不能有6了。
3、子程序的软元件使用
按理来说,主程序和子程序的软元件是通用的,也就是说,三菱PLC2N中的软元件,可以用于主程序,也可用于子程序,但有一个比较特殊,那就是定时器。
所有定时器均可用于主程序,但子程序要用定时器的话,就没这么简单了,它只能是T192~T199、T246~T249这10个。
在子程序调用过程中被驱动的软元件,其状态在子程序调用结束后,会保持在后一次调用时候的状态不变。哪怕这些软元件的驱动条件在子程序调用结束后发生了改变,软元件的状态也不会发生改变。
4、子程序应用
什么时候才会用到子程序呢?显然,子程序是区别于主程序的独立程序段,这里的独立,其实就很明显的突出的子程序的作用,那就是把功能模块化,不同的子程序互相独立,各自有着不同的功能,为主程序提供不同的服务。
当系统规模很大、控制要求复杂时,可以把程序分为一块一块的子程序,使程序简化;当某个功能需要多次执行时,也可以编成子程序,需要时直接调用,清晰方便,是主程序简单化。
子程序调用的实际应用,在这里我就不举例了,因为这和主程序区别也不大,只是功能模块化而言。打败了子程序调用后,我们乘胜追击,继续进攻PLC的FOR循环吧!
二、循环
PLC的循环也是程序流程转移的一种,对应的指令为FOR、NEXT。
和子程序调用指令一样,循环指令FOR和NEXT也是成对出现的,但不同的是,FOR指令和NEXT指令都没有驱动条件。在子程序调用指令CALL、SRET中,CALL指令是需要驱动条件的,条件跳转指令CJ也需驱动条件。
从编程手册中,我们可以看到,FOR指令仅用于16位,且只有连续执行型。这是显然的,因为它没有驱动条件,哪来的脉冲执行型?
所谓FOR循环,指的是重复,在程序中,PLC扫描到FOR-NEXT指令时,对FOR-NEXT指令之间的程序重复执行n次。如下图所示,程序扫描到FORK5时,在FOR K5与NEXT指令之间的程序2重复执行5次,再退出循环继续往下执行。
FOR指令的适用软元件有很多,但常用的是常数K,也就是用常数K指定程序重复执行的次数。循环指令的应用相对简单,但有几点还是需要我们注意的。
1、循环嵌套
从上文中我们知道了子程序可以嵌套,同样的,循环指令也可以嵌套,多也是5层。如下图所示为5层循环嵌套,如下图所示。
如上图所示,若这5层循环中,每层循环的次数均为10,显然,所有循环全部执行完时,第五层循环被执行了100000次,第4层执行了10000次,依次类推,第1层被执行了10次。这就跟剥洋葱似的,“一层一层剥开我的心~”咳咳,抱歉,一不小心就唱起来了,回归正题。
我们在应用循环嵌套时,一定要注意所嵌循环的次数,因为循环次数过多会造成程序运算时间过长,使PLC的响应变慢,甚至超时。
循环是可以并立嵌套的,如下图所示。此时两个并立的循环为一层,也就是说,下图为2层的循环嵌套。
2、循环指令使用
循环指令使用在使用时要注意以下几点:
(1)循环指令FOR必须要和NEXT指令成对使用,缺一不可,同生共死;
(2)FOR指令和NEXT指令的顺序不能颠倒;
(3)FOR指令和NEXT指令必须存在同一程序区,FOR指令在主程序区,对应NEXT指令也必须在主程序区,不能写在副程序区。
6AV2181-8XP00-0AX0 |
6EP1437-2BA20 |
6EP3337-8SB00-0AY0 |
6ES7288-7DP01-0AA0 |
6ES7132-6BH01-0BA0 |
6ES7231-5PD32-0XB0 |
CTS7214-1AD33-0X24 |
6ES7215-1BG40-0XB0 |
6ES7288-2QT16-0AA0 |
6ES7512-1DK01-0AB0 |
6ES7132-6BF01-0AA0 |
6ES7288-6EC01-0AA0 |
6ES7954-8LL03-0AA0 |
模拟量模块6ES7231-7PC22-0XA0西门子触摸屏代理商西门子交换机代理商模拟量模块6ES7231-7PC22-0XA0西门子触摸屏代理商西门子交换机代理商模拟量模块6ES7231-7PC22-0XA0西门子触摸屏代理商西门子交换机代理商西门子电机代理商西门子变频器代理商