关于堆栈,我也来说两句,在LAD或者STL编程中,堆栈的用处可不仅仅用于四则运算,呵呵,四则运算是“数据结构”这门课程中堆栈的典型应用,但在PLC编程中,堆栈的用处可不止这些。S7—200有1个9位的堆栈,栈顶用来存储逻辑运算的结果,第2~9层用来存储中间运算结果。堆栈中的数据一般按“先进后出”的原则存取。我们来分析一下以下梯形逻辑中堆栈的典型应用。
以下LAD图形

以下为相应的STL代码
LD I0.0
LD I0.1
LD I2.0
A I2.1
OLD
ALD
= Q5.0
从以上STL代码中可以看到使用到了堆栈指令,分析这段代码,为什么要用堆栈指令呢?当执行到LD I0.0时,系统自动存入堆栈,当执行LD I0.1时,又把I0.1的值也存入堆栈,执行LD I2.0 时,I2.0的值也存入堆栈。当执行到A I2.1是取出I2.1的值,并且与栈顶值(I2.0的值)相与,结果的值再存入堆栈。执行到OLD指令时,OLD取出堆栈第一级(I2.0和I2.1与的结果,同时出栈)和第二级(I0.1的值,同时出栈),并且做或运算,并把或运算的结果存入堆栈。当执行到ALD时,ALD取出堆栈第一级(OLD或的结果)和第二级(I0.0的值),并且做与运算。从以上过程可以看出,如果没有堆栈,将不可能实现多分支串并联的电路(至少在S7200中,S7300中另当别论).
总之堆栈的作用有二:
1.处理电路块的串联和电路块的并联时,用来储存一个或多个电路块内部的运算结果.
2.处理由触点与线圈(或触点与其他输出类指令)组成的多分支电路时,用堆栈来保存分支点的运算结果。