使用SCL编写小应用:四节传送带模拟和机械手模拟控制
文章目录
目录
文章目录
前言
一、四节传送带模拟控制
1.控制要求
2.参考图
3.接线图和I/0分配
4.编写程序
1.逆序启动
2.顺序停止
3.故障输入
4.调试
5.完整代码
二、机械手控制
1.控制要求
2. 接线图和I/0分配
3.编写程序
总结
前言
前面我们学习了第1个面向对象编程,使用FB块和形参;本章继续来练习两个scl语言应用!
一、四节传送带模拟控制
1.控制要求
2.参考图
这里M1到M4用指示灯表示,4个开关表示4个故障输入,右下角是ON和OFF。
3.接线图和I/0分配
I/0分配:
输入 | 输出 | ||||
---|---|---|---|---|---|
名称 | 作用 | 地址 | 名称 | 作用 | 地址 |
ON | 启动 | I0.0 | M1 | 电机1 | Q0.0 |
OFF | 停止 | I0.2 | M2 | 电机2 | Q0.1 |
A | 故障输入 | I0.3 | M3 | 电机3 | Q0.3 |
B | 故障输入 | I0.4 | M4 | 电机4 | Q0.3 |
C | 故障输入 | I0.5 | |||
D | 故障输入 | I0.6 |
接线图:
这里PLC的输入和输出接上断路器是防止短路。
4.编写程序
看题可以发现,这里主要有三点:逆序启动,顺序停止,故障输入。
1.逆序启动
起动后,先起动最末的皮带机 M4,1s 后再依次起动 M3,1s 后再依次起动 M2,1s 后再依次起动 M1;
这里可以用一个1秒脉冲来触发启动,使用1s的上升沿来对A变量进行加1,再用case语句进行判断,启动就可以完成了。
#T[1].TON(IN := #启动标志 & NOT #SC ,
PT := T#1s,
Q => #SC);
#P_R[1](CLK := #SC);
IF #P_R[1].Q THEN
#A := #A + 1;
END_IF;
//启动部分
CASE #A OF
0:
IF #启动 THEN
#C := 0;
#M4 := 1;
#启动标志 := 1;
END_IF;
1:
#M3 := 1;
2:
#M2 := 1;
3:
#M1 := 1;
#启动标志 := 0;
#A := 0;
END_CASE;
2.顺序停止
和启动的思路相同,用case语句来实现:
#T[2].TON(IN := #标志2 & NOT #SC1,
PT := T#1s,
Q => #SC1);
#P_R[2](CLK := #SC1);
IF #P_R[2].Q THEN
#B := #B + 1;
END_IF;
//停止部分
CASE #B OF
0:
IF #停止 & NOT #启动标志 THEN
#标志2 := 1;
#M1 := 0;
END_IF;
1:
#M2 := 0;
2:
#M3 := 0;
3:
#M4 := 0;
#标志2 := 0;
#B := 0;
END_CASE;
3.故障输入
当某条皮带机有重物时,该皮带机前面的应立即停止,该皮带机运行 1s 后停止,再1s 后接下去的一台停止,依此类推。
可以用M2来示例:当故障输入B被按下,前面的M1立即停止,M2运行1s停止,M3和M4相同。
既然还是都是1s那就可以用1个定时器来脉冲:
进入case语句后先判断是哪个故障输入,如果是B就将C赋值为2,上一台电机M1清零,当C不等于0的时候,定时器触发产生脉冲,对D进行++,然后在下面的小case语句中,将M2,M3,M4间隔1s停止,最后将变量清零,就结束。另外3个相同。
#T[3].TON(IN := #C <> 0 & NOT #SC2 ,
PT := T#1s,
Q => #SC2);
#P_R[3](CLK := #SC2);
IF #P_R[3].Q THEN
#D := #D + 1;
END_IF;
//故障输入部分
CASE #C OF
0:
IF #故障输入1 THEN
#C := 1;
;
ELSIF #故障输入2 THEN
#M1 := 0;
#C := 2;
;
ELSIF #故障输入3 THEN
#M1 := 0;
#M2 := 0;
#C := 3;
;
ELSIF #故障输入4 THEN
#M1 := 0;
#M2 := 0;
#M3 := 0;
#C := 4;
;
END_IF;
1:
CASE #D OF
1:
#M1 := 0;
2:
#M2 := 0;
3:
#M3 := 0;
4:
#M4 := 0;
#B := 0;
#C := 0;
#D := 0;
END_CASE;
2:
CASE #D OF
1:
#M2 := 0;
2:
#M3 := 0;
3:
#M4 := 0;
#B := 0;
#C := 0;
#D := 0;
END_CASE;
3:
CASE #D OF
1:
#M3 := 0;
2:
#M4 := 0;
#B := 0;
#C := 0;
#D := 0;
END_CASE;
4:
CASE #D OF
1:
#M4 := 0;
#B := 0;
#C := 0;
#D := 0;
END_CASE;
END_CASE;
4.调试
最后在主程序调用,写入相应的变量就完成啦!
5.完整代码
(*#M1-M4 是四条皮带机运转指示,A、B、C、D 是四条皮带机故障输入。
起动后,先起动最末的皮带机 M4,1s 后再依次起动 M3,1s 后再依次起动 M2,1s 后
再依次起动 M1;停止时,先停止皮带机 M1,1s 后再停止 M2,1s 后再停止 M3,1s 后再停
止 M4;当某条皮带机有重物时,该皮带机前面的应立即停止,该皮带机运行 1s 后停止,再
1s 后接下去的一台停止,依此类推。*)
#T[1].TON(IN := #启动标志 & NOT #SC ,
PT := T#1s,
Q => #SC);
#T[2].TON(IN := #标志2 & NOT #SC1,
PT := T#1s,
Q => #SC1);
#P_R[1](CLK := #SC);
#P_R[2](CLK := #SC1);
IF #P_R[1].Q THEN
#A := #A + 1;
END_IF;
IF #P_R[2].Q THEN
#B := #B + 1;
END_IF;
//启动部分
CASE #A OF
0:
IF #启动 THEN
#C := 0;
#M4 := 1;
#启动标志 := 1;
END_IF;
1:
#M3 := 1;
2:
#M2 := 1;
3:
#M1 := 1;
#启动标志 := 0;
#A := 0;
END_CASE;
//停止部分
CASE #B OF
0:
IF #停止 & NOT #启动标志 THEN
#标志2 := 1;
#M1 := 0;
END_IF;
1:
#M2 := 0;
2:
#M3 := 0;
3:
#M4 := 0;
#标志2 := 0;
#B := 0;
END_CASE;
#T[3].TON(IN := #C <> 0 & NOT #SC2 ,
PT := T#1s,
Q => #SC2);
#P_R[3](CLK := #SC2);
IF #P_R[3].Q THEN
#D := #D + 1;
END_IF;
//故障输入部分
CASE #C OF
0:
IF #故障输入1 THEN
#C := 1;
;
ELSIF #故障输入2 THEN
#M1 := 0;
#C := 2;
;
ELSIF #故障输入3 THEN
#M1 := 0;
#M2 := 0;
#C := 3;
;
ELSIF #故障输入4 THEN
#M1 := 0;
#M2 := 0;
#M3 := 0;
#C := 4;
;
END_IF;
1:
CASE #D OF
1:
#M1 := 0;
2:
#M2 := 0;
3:
#M3 := 0;
4:
#M4 := 0;
#B := 0;
#C := 0;
#D := 0;
END_CASE;
2:
CASE #D OF
1:
#M2 := 0;
2:
#M3 := 0;
3:
#M4 := 0;
#B := 0;
#C := 0;
#D := 0;
END_CASE;
3:
CASE #D OF
1:
#M3 := 0;
2:
#M4 := 0;
#B := 0;
#C := 0;
#D := 0;
END_CASE;
4:
CASE #D OF
1:
#M4 := 0;
#B := 0;
#C := 0;
#D := 0;
END_CASE;
END_CASE;
二、机械手控制
1.控制要求
2. 接线图和I/0分配
输入 | 输出 | ||||
---|---|---|---|---|---|
名称 | 作用 | 地址 | 名称 | 作用 | 地址 |
ON | 启动 | I0.0 | A | 传送带 | Q0.0 |
OFF | 停止 | I0.1 | B | 传送带 | Q0.1 |
S | 传感器 | I0.2 | L1 | 指示灯 | Q0.2 |
SQ1 | 限位 | I0.3 | L2 | 指示灯 | Q0.3 |
SQ2 | 限位 | I0.4 | L3 | 指示灯 | Q0.4 |
SQ3 | 限位 | I0.5 | L4 | 指示灯 | Q0.5 |
SQ4 | 限位 | I0.6 | L5 | 指示灯 | Q0.6 |
SQ5 | 限位 | I0.7 |
3.编写程序
看控制要求和控制参考图,这里用case语句可以一步一步写下来。
到最后再赋值为1,可以接着循环运行。
IF #OFF THEN
#L1 := 0;
#L2 := 0;
#L3 := 0;
#L4 := 0;
#L5 := 0;
#A := 0;
#B := 0;
#W := 0;
END_IF;
CASE #W OF
0:
IF #ON THEN
#A := 1;
#W := 1;
END_IF;
1:
IF #S THEN
#A := 0;
#B := 1;
#L1 := 1;
#W := 2;
END_IF;
2:
IF #SQ1 THEN
#L1 := 0;
#L3 := 1;
#W := 3;
END_IF;
3:
IF #SQ3 THEN
#L2 := 1;
#A := 1;
#W := 4;
END_IF;
4:
IF #SQ2 THEN
#L2 := 0;
#L5 := 1;
#W := 5;
END_IF;
5:
IF #SQ5 THEN
#L5 := 0;
#L1 := 1;
#W := 6;
END_IF;
6:
IF #SQ1 THEN
#L1 := 0;
#L3 := 0;
#W := 7;
END_IF;
7:
IF #SQ3 = 0 THEN
#L2 := 1;
#W := 8;
END_IF;
8:
IF #SQ2 THEN
#L2 := 0;
#L4 := 1;
#W := 9;
END_IF;
9:
IF #SQ4 THEN
#L4 := 0;
#W := 10;
END_IF;
10:
#W := 1;
END_CASE;
总结
以上就是今天的内容,我们下一篇见!