移植“LIFO: 输出表格的最后一个值”的示例

时间:2021-07-09点击次数:117

移植“LIFO: 输出表格的最后一个值”的示例

表格指令的移植过程(移植类别 4)

“表格指令”组中的指令在 S7-1500 中不再可用,而且无法在移植过程中使用其它指令进行替代,因为这些指令都基于**寻址。 但是,S7-1500 中提供有可手动实现这些指令的其它函数。 以下以指令“LIFO: 输出表格的最后一个值”为例,说明如何实现该函数功能。

实现

以下 STL 程序说明了如何实现“LIFO”表格函数: 本示例中的函数已可用作 SCL 中一个函数。

下表列出了所用变量的声明:

操作数

声明

数据类型

说明

val

Output

INT

返回值

tab

InOut

PLC 数据类型“Table10”

包含有 10 行的表格

 

x

InOut

INT 类型的 ARRAY[0..9]

每个 ARRAY 元素表示一行。 本示例中使用 INT 类型的 ARRAY。 但是,可创建任何数据类型的 ARRAY。 如,也可以使用 STRUCT 数据类型的 ARRAY 或 PLC 数据类型的 ARRAY。


 

lng

InOut

INT

缓冲区的长度。 该值取决于“tab.x”的 ARRAY 中元素的数目。

 

first

InOut

INT

**个写入值

 

last

InOut

INT

最后一个写入值

h

Temp

INT

辅助变量

Ret_Val

 

BOOL

函数值


下表列出了如何实现函数“Lifo”:

该函数返回写入表格中的最后一个值(后进先出)。 函数值“true”表示表格为空。

SCL
 
#h:=(#tab.last-1) MOD #tab.lng; // 递减索引
IF #h<0 THEN #h:=#h + #tab.lng; END_IF; // 只允许正数索引
IF #h <> #tab.first THEN // 扫描以查看索引是否可以相互覆盖
#tab.last := #h; // 保存下一个值的索引
#val := #tab.x[#h];// 输出所需值
#Lifo:= false;
ELSE
#Lifo:= true; // 错误 >> 表格为空;不输出任何值
#val := #tab.x[#tab.last]; // 输出最后一个有效值
END_IF;
 



http://shtxjd.cn.b2b168.com

下一篇:删除 SQL 实例

产品推荐