西门子SCL编程,记录电机运行时间累计,如何快速的实现50台电机
1:在博途中新建一个1214项目,可以不添加扩展模块
2:在程序中新建一个FC功能块,LAD的编程方法
3:FC的接口变量如下图所示:
4:程序如下:因方便查看,所以就没有用秒脉冲,用的0.1S的脉冲,真正使用时可调整为秒脉冲
5:插入一个SCL程序段,程序如下:为了防止操作员误按下时间清零按钮,所以加了一个5秒长按才能清零程序
//计秒
IF #TEMP THEN
#单次运行秒 := #单次运行秒 1;
#总运行秒 := #总运行秒 1;
END_IF;
//计分钟
IF #单次运行秒>=60 THEN
#单次运行分钟 := #单次运行分钟 1;
#单次运行秒 := 0;
END_IF;
IF #总运行秒 >= 60 THEN
#总运行分钟 := #总运行分钟 1;
#总运行秒 := 0;
END_IF;
//计小时
IF #单次运行分钟>=60 THEN
#单次运行小时 := #单次运行小时 1;
#单次运行分钟 := 0;
END_IF;
IF #总运行分钟>=60 THEN
#总运行小时 := #总运行小时 1;
#总运行分钟 := 0;
END_IF;
//不运行,单次时间都为0
IF #RUN=FALSE THEN
#单次运行小时 := 0;
#单次运行分钟 := 0;
#单次运行秒 := 0;
END_IF;
//需要长按清零按钮5秒,才可以清零,防止误按。
IF #intTemp>=50 THEN
#单次运行小时 := 0;
#单次运行分钟 := 0;
#单次运行秒 := 0;
#总运行小时 := 0;
#总运行分钟 := 0;
#总运行秒 := 0;
#RESET := FALSE;
#intTemp := 0;
END_IF;
//如果按下的时间不足5秒,松开的按钮,要把内部的计录要清掉
IF #RESET=FALSE AND #intTemp>=1 AND #intTemp<=50 THEN
#intTemp := 0;
END_IF;
6:建立一个全局的全局的DB数据块,建立如个结构体的数给,索引为1~50,代表1#~50#电机
7:主程序中插入一段SCL程序段,调用FC计时功能块
8:当RUN信号为TRUE时,开始计时,为FALSE时停止计时,单次运行时间清零,长按RESET为5秒时,单次和总运行时间都清零。
在运行前,要先把电机的实际运行信号I点信号映射到RUN信号点
9:查看第1台运行时间情况
10:查看第38台运行时间情况
如果有朋友觉得INT类型记录太小,容易溢出的话,也可以改成DINT类型