“表格指令”组中的指令在 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; | |
产品推荐
友情链接