【SCL】1200应用项目: 四节传送带&机械手模拟控制

使用SCL编写小应用:四节传送带模拟和机械手模拟控制


前言

前面我们学习了第1个面向对象编程,使用FB块和形参;本章继续来练习两个scl语言应用!


一、四节传送带模拟控制

1.控制要求

M1-M4 是四条皮带机运转指示,A、B、C、D 是四条皮带机故障输入。
起动后,先起动最末的皮带机 M4,1s 后再依次起动 M3,1s 后再依次起动 M2,1s 后
再依次起动 M1;停止时,先停止皮带机 M1,1s 后再停止 M2,1s 后再停止 M3,1s 后再停
止 M4;当某条皮带机有重物时,该皮带机前面的应立即停止,该皮带机运行 1s 后停止,再
1s 后接下去的一台停止,依此类推。

2.参考图

 这里M1到M4用指示灯表示,4个开关表示4个故障输入,右下角是ON和OFF。

3.接线图和I/0分配

 I/0分配:

输入输出
名称作用地址名称作用地址
ON启动I0.0M1电机1Q0.0
OFF停止I0.2M2电机2

Q0.1

A故障输入I0.3M3电机3Q0.3
B故障输入I0.4M4电机4Q0.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.控制要求

按下启动按钮,传送带 A 启动运转,当传感器 S( 扭子开关拨到 ON) 检测到物体时,传
送带 A 停止运转, B 传送带启动运转,机械手下降 L1 亮,拨动 SQ1 到位, L1 灭,抓取物
L3 亮,抓到物体 SQ3 输出信号后机械手上升 L2 亮, S SQ1 复位,货物抓走后转送带 A
再启动;拨动 SQ2 到位, L2 灭,机械手左转 L5 亮,拨动 SQ5 到位, L5 灭,机械手下降
L1 亮, SQ2 复位,拨动 SQ1 到位, L1 灭,松开物体 L3 灭, SQ3 拨到 OFF ,机械手上升
L2 亮, SQ1 复位,拨动 SQ2 到位, L2 灭,机械手右转 L4 亮, SQ5 复位,拨动 SQ4 到位,
L4 灭,再按下 S ,依次循环下去。抬起启动按钮,模拟信号指示灯都灭。

2. 接线图和I/0分配

输入输出
名称作用地址名称作用地址
ON启动I0.0A传送带Q0.0
OFF停止I0.1B传送带Q0.1
S传感器I0.2L1指示灯Q0.2
SQ1限位I0.3L2指示灯Q0.3
SQ2限位I0.4L3指示灯Q0.4
SQ3限位I0.5L4指示灯Q0.5
SQ4限位I0.6L5指示灯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;

 

总结

以上就是今天的内容,我们下一篇见!

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

'...

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

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

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

打赏作者

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

抵扣说明:

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

余额充值