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

西门子SCL编程实例——带运行计时的电机控制

今天这篇文章,我们来介绍一个带运行计时的电机控制函数块,为后续的电机调度函数块做准备。我之前曾写过一个电机控制函数块FB5001_MotorControl(西门子SCL编程实例——带反馈监视的电机控制),我们在它的基础上,增加运行时间累计功能。

cover.png

打开博途新建项目,将FB5001_MotorControl添加到项目中,修改其名称为FB5007_MotorControlWithRuntime。在原函数块基础上:

①增加输入参数:GlobalTime和ResetRuntime。

  • GlobalTime:来自循环中断组织块的全局时间(单位:秒);

  • ResetRuntime:复位函数块内部的用于计时的变量;

②增加输入/输出参数:

  • Runtime:电机运行的实际时间(单位:秒)。多次启动的运行时间可累积;

③增加用于计时的静态变量:

  • statStartTime:按下启动按钮的时间(单位:秒);

  • statLastRunningTime:上次运行的时间(单位:秒),用于累计;

  • statRunTime:当前运行时间(单位:秒);

整个函数块(FB5007_MotorControlWithRuntime)的变量声明如下图所示:

variables.png

代码如下:

code.png

为了能产生时间信号,我们添加循环中断组织块OB30,将其中断时间设置为1秒。设置一个全局变量,比如"DB200_Global".globalSecon,在OB30中将其周期性加1,代码如下:

OB30.PNG

添加一个启动组织块,每次CPU重启时让全局时间变量清零(该全局时间变量的数据类型为UDInt,其取值范围为0~4_294_967_295。以每秒加1的频率计时,可支持大约136年,因此即使不清零也没有关系),如下图所示:

OB100.PNG

这样,就可以在OB1中调用FB5007_MotorControlWithRuntime,统计其运行时间了。

OB1.png

我已经测试过,如果你有任何问题,欢迎留言。我们后续会在这个函数块的基础上,写电机调度的函数块(比如有多个电机,如何按照预定规则进行启停控制)。

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

取消

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

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

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

发表评论

牛年到,祝福到!

祝愿大家在新的一年里,身体健康,工作顺利,财运滚滚,牛年大吉!

×