北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章539 浏览8517641

西门子SCL编程实例——斜坡发生器(连续版)

之前我曾写过一个斜坡发生器函数(参考文章:西门子SCL编程实例——斜坡发生器(基于定时器)),它能控制输出值经过一个平滑的上升或下降的变化过程而达到目标值。这个函数只实现一次变化,不能连续变化。前段时间有小伙伴询问如何让斜坡发生器实现连续的变化输出?比如电机转速从0 r/min平滑变化到100 r/min,然后再到 500 r/min等等。今天这篇文章,我给出我的解决方案。

cover.png

在原来函数的基础上,我编写了更新版的斜坡发生器,命名为:FB5028_RampGeneratorEx。

为了实现斜坡的连续变化,我定义了一个可变数组(见下文的输入/输出变量),你可以在这个数组中随意添加斜坡节点信息。这些信息包括:启动信号(何时开始输出)、目标值和斜坡时间,我将其定义为用户自定义数据类型:typeRampData,如下图所示:

typeRampData.png

在博途开发环境下新建函数块:FB5028_RampGeneratorEx,其输入、输出及输入/输出变量的定义如下图所示:

variable1.png

其中:

输入变量
名称
数据类型
描述
enable
布尔值
使能(TRUE=使能,FALSE=复位)
initValue
实数
初始值
输出变量
名称
数据类型
描述
value
实数
输出值
stepActive
布尔型
步激活
cycleCounter
双整数
步循环计数
singleStepDone
布尔型
单步完成
complete
布尔型
全部完成
输入/输出变量
名称
数据类型
 描述
arrayRampData
typeRampData
斜坡函数信息数组

静态变量及临时变量定义如下图所示:

variable2.png

注意:

变量IEC_Timer_TCON_Instance是定时器指令TON在多重背景数据块下自动生成的静态变量。

FB5028_RampGeneratorEx的代码如下图所示(注释部分详细介绍了代码功能):

code1.png

code2.png

code3.png

code4.png

code5.png

code6.png

为了测试代码,我定义了全局数据块DB_test,它包含了斜坡信息数据及相关变量,如下图所示:

DB_test.PNG

在OB1中编写代码测试如下图所示:

test00.png

test01.png

test02.png

启动二次斜坡发生测试示例如下图:

test03.png

该函数块的代码我已经测试通过,如果你有任何问题,欢迎留言。

下面是西门子SCL编程的文章归档链接:

》》西门子SCL编程入门到精通文章归档《《

我的书《西门子S7-1200/1500 PLC SCL语言编程 ——从入门到精通》从硬件到软件,比较详细的介绍了SCL语言的编程,感兴趣的话可以扫描下面的二维码查看:

西门子SCL编程实例——斜坡发生器(连续版)

来源:本站|   大小:721 KB|   下载次数:515次

取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论

  • // 使能斜坡函数
    IF NOT #Enable THEN
    #statStepCounter := 0;
    #StatCycleCounter := 0;
    #StatValueOutput := 0;
    #StatEnableTimer := FALSE;
    #StatComplete := FALSE;
    #StatSingleStepDone := FALSE;
    #StatStepActive := FALSE; //函数发生器运行中被使能中断后再次使能,此时将自动运行第一个斜坡,这是非设计的
    GOTO _output;