西门子SCL出栈入栈算法
块接口配置
在input中建立
- 初始化 数据类型:BOOL
- 入栈 数据类型:BOOL
- 出栈 数据类型:BOOL
** 在inout中建立**
- 输入输出····· 数据类型:int
- 栈空间····· 数据类型:array[*] of int
这里的数组不用填写数字,直接用星号代替,意味着变为变量,我们可以在外部的接口去配置它。
在static中建立
-
上升沿存储数组····数据类型:array[0…99] of bool
这里你想建多少数多少都可以 -
指针 ·····数据类型:Dint
-
上限······ 数据类型:Dint
-
下限······· 数据类型:Dint
剩下的那两个为上升沿指令的名称,可以自己在使用的时候去设置它
外部变量配置
注意:需要建立一个新的全局DB块,DB块中的数据类型需要与FB块接口的数据类型一致
SCL出栈入栈源码
REGION :获取上下限 //REGION语句可以提高代码的可读性,
#shang := UPPER_BOUND(ARR := #zhankongjian, DIM := 1); //上限
#xia := LOWER_BOUND(ARR := #zhankongjian, DIM := 1); //下限
END_REGION ;
REGION :初始化指针
IF #chushihua THEN //初始化指针
#zhizheng := #xia; //让指针的值等于下限
END_IF;
END_REGION ;
REGION :入栈
REGION :上升沿
#入栈(CLK := #ruzhan,
Q => #yan[0]);
END_REGION ;
REGION :入栈开始
IF #yan[0] THEN //上升沿指令发生变化
#zhankongjian[#zhizheng] := #shurushuchu; //输入输出的值赋值给指针指向的栈空间
IF #zhizheng < #shang THEN //判断指针小于上限时
#zhizheng += 1; //指针+1
END_IF;
END_IF;
END_REGION ;
END_REGION ;
REGION :出栈
REGION :上升沿
#出栈(CLK := #chuzhan,
Q => #yan[1]);
END_REGION ;
REGION :出栈开始
IF #yan[1] THEN //上升沿发生变化,开始出栈
IF #zhizheng < #shang THEN //指针小于上限
#shurushuchu := #zhankongjian[#zhizheng];//指针指向的栈空间中的值赋值给输入输出
ELSIF #zhizheng = #shang THEN //指针等于上限
#zhankongjian[#shang] := 0; //将指针指向的栈空间清空
#zhizheng -= 1; //指针减一
#shurushuchu := #zhankongjian[#zhizheng]; //再将指针指向栈空间的值赋值给输入输出
END_IF;
#zhankongjian[#zhizheng] := 0; //栈空间清空
IF #zhizheng > #xia THEN //当指针大于下限,
#zhizheng -= 1; //指针减一
END_IF;
END_IF;
END_REGION ;
END_REGION ;