西门子SCL出栈入栈算法(附带源码)

西门子SCL出栈入栈算法

块接口配置

在这里插入图片描述在input中建立

  1. 初始化 数据类型:BOOL
  2. 入栈 数据类型:BOOL
  3. 出栈 数据类型:BOOL

** 在inout中建立**

  1. 输入输出····· 数据类型:int
  2. 栈空间····· 数据类型:array[*] of int
    这里的数组不用填写数字,直接用星号代替,意味着变为变量,我们可以在外部的接口去配置它。

在static中建立

  1. 上升沿存储数组····数据类型:array[0…99] of bool
    这里你想建多少数多少都可以

  2. 指针 ·····数据类型:Dint

  3. 上限······ 数据类型:Dint

  4. 下限······· 数据类型: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 ;
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mountain and sea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值