PLC中的堆栈与嵌套是什么?有什么作用?
堆栈和嵌套是在PLC应用程序设计中经常碰到的两个术语。
1、堆栈
堆栈就是货仓,这是数字电子技术中借用的一个名词。具体到PLC来说,堆栈就是在PLC中的一个特定存储区,用来存储某些中间运算结果和存放程序断点及数据。堆栈操作的特点是:先进后出,后进先出。
如图为一具有11个存储单元的堆栈,最下面为栈底,最上面为栈顶。把一个数据
或运算结果送入堆栈,叫进栈或压栈;把运算结果取出叫出栈。进栈时,后来的永远在栈顶,原先栈中的数则依序向下移动一个单元。出栈时,栈顶的数从栈中弹出(不在栈中了)而下面的数则依序向上移动一个单元。这就和家中的米箱类似,先进米箱的米最后吃,最后倒进去的米先吃。进栈和出栈是对堆栈的两种操作,还有一种操作叫读栈。读栈只是读出栈顶的数据,而不会把数据从栈弹出。
上面介绍的是三菱FX2N的有关堆栈知识,在计算机中,堆栈是一个非常重要的概念,他可以帮助我们正确理解许多程序运行的过程
2、嵌套
嵌套就是套中套。例如,在一个大循环中,进入循环后发现其中还有一个小循环要先做,而且每一次大循环都要先做这个小循环,直到大循环做完,这就叫做循环嵌套。再如调用子程序,子程序是一段公共程序,可以在主程序的任何地方进行调用,调用完后又回到主程序继续往下运行。如果一个程序在调用子程序时,子程序在运行中,又去调用另一个子程序,这就叫子程序嵌套。从上面二个例子可以说明,在PLC中,所谓嵌套是指在执行某种功能操作的过程中,再次执行这种类型的功能操作,(当然操作内容已经不同)就叫做这种操作的嵌套。PLC对各种内容的嵌套的层数都有一定的规定。三菱FX2N对主控指令的嵌套应用最多8层,而对子程序调用嵌套最多5层等等。(技成培训原创,未经授权不得转载,违者必究!)
往期优秀文章回顾:
PLC顺序控制,行业大牛的图文案例讲述
释疑贴:西门子S7系列PLC的程序运行及其嵌套、调用机理
我是小庄,初入工控行业,目前正努力钻研、提高。即日起,借“塞北名驼”这个平台,不定期更新一些学习心得,借以鞭策自己。
一、S7-300/400 CPU中的程序
CPU原则上运行两个不同的程序:
1、操作系统 。操作系统集成在CPU中,用于组织"与特定控制任务"无关的所有CPU功能和顺序。操作系统的任务具体包括下列各项:
处理重启(热启动)和热重启 更新输入过程映像区,并写输出过程映像区 调用用户程序 采集中断信息,调用中断OB 识别错误并进行错误处理 管理内存区域 与编程设备及其他通讯伙伴进行通讯 通过修改操作系统参数,可以在某些区域影响CPU响应。2、用户程序。 顾名思义,其为用户创建、编写并下装到CPU中的程序,用户用它来实现特定的控制任务。用户程序的任务包括:
· 确定CPU的重启(热启动)和热重启条件(例如,用特定值初始化信号) · 处理过程数据,包括数字量和模拟量数据 · 响应中断 · 处理正常程序周期中的干扰在STEP7中,用户程序是由一个个的"块"构成的,在之前的文章中,断断续续的做了一些介绍,根据类型汇总如下:
图1 “块”的种类汇总
二、用户程序的调用体系
STEP7的用户程序由一个个的"块"构成,各个"块"要正确、有机的结合在一起,才能实现特定的功能。这就涉及到了"块"的调用和嵌套了。
1、块的创建次序与嵌套
图2阐述了一个扫描周期内块调用的次序。在编写程序时,创建块时一般遵循以下步骤:
a) 从上到下依次创建块 b) 调用的每个块必须已经存在 c) 最后在OB1中定义调用次序图2 “块”的调用次序与嵌套
遵循上述规则,图2中创建块的顺序为:
FC1>FB1+背景数据块DB1>DB10>SFC1>背景数据块DB3>FB2+背景数据块DB2>OB2
图2还展示了块的嵌套深度。嵌套深度取决于特定的CPU。如果内嵌太深,有可能导致本地数据堆栈溢出。
2、块调用的基本原理
图3给出了用户程序中"块"调用的过程。
图3 “块”的调用原理
块的调用与被调用,原理上比较简单,注意到以下几个方面即可:
a) 组织块OB可以调用其他逻辑块,但不能被其他块调用; b) SFB、SFC是集成在CPU中的一些特定功能/功能块,它们的程序逻辑是固定的,用户不能自定义,因此,它们只能被其他逻辑块调用,而不能调用其他逻辑块 c) 用户自定义的FB、FC既可以调用其他FB、FC、SFB、SFC,也可以被其他逻辑块调用。相关问答
对于西门子PLC中嵌套指令的说明-盖德问答-化工人互助问答社区
jin-s-这个好理解,就像我们数学里的四则运算中的括号一样,先算括号里面的,再算外面的我就是不明白,什么时候用a(什么时候用o(开头这个好理解,就...
三菱PLC主控嵌套,在竖线上的那个开点,怎么敲上去?
用不着输入,将软件选为“读出模式”就会自动显示。读出模式用不着输入,将软件选为“读出模式”就会自动显示。读出模式
plc怎样添加子程序?
子程序调用指令CALL的编号为FNC01。操作数为P0~P127,此指令占用3个程序步。子程序返回指令SRET的编号为FNC02。无操作数,占用1个程序步。如果X0接通,则转到...
plc例子程序与函数有什么区别?
区别1.PLC例子程序和函数在使用方式和作用上有着不同。2.-PLC例子程序是一种宏观的、完整的解决方案,包含了多个指令的组合,用于实现特定的功能。它可以...
plc今后会被单片机代替吗?梯形图变成高级语言?
这是一个很有意思的话题,我就个人经历谈谈我对两者的看法吧,仅供参考。07研究生期间,我当时研究方向是嵌入式,但因为老板的军工项目接触了PLC。项目是在国家...
plc是实时系统吗?
是。所有的PLC都应该是实时操作系统,大部分的嵌入系统也应该是实时操作系统。特点就是响应的最大时间不会超过允许值(对于PLC来说就是最长扫描周期)、可靠性...
西门子struct用法?
在西门子的PLC编程中,结构体(struct)可以用来定义一组相关的变量,方便程序员进行统一管理和调用。以下是一些西门子struct的使用方法:1.定义结构体:使用...
单片机与PLC的区别?
一、区别:1、PLC是建立在单片机之上的产品,单片机是一种可编程的集成芯片。2、plc就是由单片机加上外围电路做成的,单片机开发式底层开发,程序编写用汇编...
s7-200cpu所支持的组织块类型包括循环组织块?
(01)自由循环组织块OB1S7CPU启动完成后,操作系统循环执行OB1,OB1执行完成后,操作系统再次启动OB1。在OB1中可以调用FB、SFB、FC、SFC等用户程序使其循环执...
如何在MCGS中做出一个按钮?
在触摸屏中可以用SLEEP和WAITFOR函数,不过这两个函数在嵌入版软件中不能用(无效)。用PLC做就简单了,画面中的按钮对应PLC里面的一个辅助触点,PLC辅助触点的...