当前位置: 首页 > news >正文

【SCL】1200应用案例:交通灯模拟自动装料控制

使用博图SCL语言来编写 交通灯模拟控制 和 自动装料应用案例

文章目录

目录

前言

一、应用:交通灯模拟控制

1.控制要求

2.I\o分配和接线

 3.程序编写和效果

4.小结

二、自动装料模拟控制 

 1.控制要求

 2.I/O分配

3.程序编写 

 4.小结

总结


前言

本篇文章我们继续学习西门子SCL语言的应用;


一、应用:交通灯模拟控制

1.控制要求

接通 PLC 控制器,按下启动按钮,信号灯系统开始工作,先是南北红灯 R 亮,东西绿 G 灯亮;
25S 后东西绿灯 G 灭,东西黄灯 Y 闪亮;
5S 后 ,南北红灯 R 灭,南北绿灯 G 亮,东西黄灯 Y 灭,东西红灯 R 亮;
25S 后南北绿灯 G 灭,南北黄灯 Y 闪亮;
5S 后南北黄灯灭,南北红灯 R 亮,东西红灯 R 灭,东西绿灯 G 亮,周而复始。

当按下停止按钮时,系统停止工作。

2.I\o分配和接线

I/0分配:

输入输出
名称作用地址名称作用地址
SB1启动I0.0L1东西红灯Q0.0
SB2停止I0.1L2东西绿灯Q0.1
L3东西黄灯Q0.2
L4南北红灯Q0.3
L5南北绿灯Q0.4
L6南北黄灯Q0.5

接线图:

接线时注意24V正负极不要接反。 

 3.程序编写和效果

 这里就按照流程来编写就可以了,注意先后顺序。 

 

程序: 


//控制部分
IF "启动" THEN
    "数据块_1".变量 := 1;
END_IF;

IF "停止" THEN
    "东西红灯" := 0;
    "东西黄灯" := 0;
    "东西绿灯" := 0;
    "南北红灯" := 0;
    "南北黄灯" := 0;
    "南北绿灯" := 0;
    RESET_TIMER(#IEC_Timer_0_Instance);
    RESET_TIMER(#IEC_Timer_0_Instance_1);
    RESET_TIMER(#IEC_Timer_0_Instance_2);
    RESET_TIMER(#IEC_Timer_0_Instance_3);
    "数据块_1".变量 := 0;
END_IF;

//运行部分
CASE "数据块_1".变量 OF
    1:
        "南北红灯" := 0;
        "东西绿灯" := 0;
        "东西红灯" := 1;
        "南北绿灯" := 1;
        #IEC_Timer_0_Instance(IN := "南北绿灯",
                              PT := T#5s,
                              Q => "输出点1");
        IF "输出点1" THEN
            "南北绿灯" := 0;
            
            "数据块_1".变量 := 2;
        END_IF;
    2:
        "中继1" := 1;
        "南北黄灯" := "中继1" AND "Clock_1Hz";
        #IEC_Timer_0_Instance_1(IN := "中继1",
                                PT := T#2s,
                                Q => "输出点2");
        IF "输出点2" THEN
            "东西红灯" := 0;
            "中继1" := 0;
            "南北黄灯" := 0;
            "数据块_1".变量 := 3;
        END_IF;
    3:
        "南北绿灯" := 0;
        "东西红灯" := 0;
        "南北红灯" := 1;
        "东西绿灯" := 1;
        #IEC_Timer_0_Instance_2(IN := "东西绿灯",
                                PT := T#5s,
                                Q => "输出点3");
        IF "输出点3" THEN
            "东西绿灯" := 0;
            "数据块_1".变量 := 4;
        END_IF;
    4:
        "中继2" := 1;
        "东西黄灯" := "中继2" AND "Clock_1Hz";
        #IEC_Timer_0_Instance_3(IN := "中继2",
                                PT := T#2s,
                                Q => "输出点4");
        IF "输出点4" THEN
            "中继2" := 0;
            "东西黄灯" := 0;
            "数据块_1".变量 := 5;
        END_IF;
    5:
        
        "东西红灯" := 0;
        "东西黄灯" := 0;
        "东西绿灯" := 0;
        "南北红灯" := 0;
        "南北黄灯" := 0;
        "南北绿灯" := 0;
        RESET_TIMER(#IEC_Timer_0_Instance);
        RESET_TIMER(#IEC_Timer_0_Instance_1);
        RESET_TIMER(#IEC_Timer_0_Ins

4.小结

这里程序不难, 使用CASE语句来逐步完成东西和南北方向指示灯;在编写时要注意每走下一步都要将上一步的状态清零,避免造成重复;结束和停止时都要将定时器进行复位,来实现每次循环。


 


二、自动装料模拟控制 

 1.控制要求

按下启动开关, L2 灭, L1 亮,车未到位,表明允许汽车开进装料。料斗出料口 D2
闭,若料位传感器 S1 置为“ 0 ”(料斗中的物料不满),进料阀开启进料, D4 亮。当 S1
置为“ 1 ”(料斗中的物料已满),则停止进料( D4 灭)。电动机 M1 M2 M3 均为“ 0 ”。
当汽车开进装车位置时,限位开 SQ1 置为“ 1 ”,信号灯 L2 亮, L1 灭,车到位;同时
启动电动机 M3 ,经过 3s 后,再启动 M2 ,再经 2s 后启动 M1 ,再经过 3s 后才打开出料阀,
D2 亮,物料经料斗出料。 当车装满时,限位开关 SQ2 为“ 1 ”, D1 亮,料斗关闭, 3s
M1 停止, M2 M1 停止 3s 后停止, M3 M2 停止 3s 后停止,同时 L2 灭, L1 亮,表明
汽车可以开走。
按下停止按钮,自动配料装车的整个系统终止运行。

 

 

 2.I/O分配

输入输出
名称作用地址名称作用地址
SB1启动I0.0L1指示灯Q0.0
SB2停止I0.1L2指示灯Q0.1
SQ1限位I0.2D1指示灯Q0.2
SQ2限位I0.3D2指示灯Q0.3
S1料位传感器I0.4D4指示灯Q0.4
M1电机Q0.5
M2电机Q0.6
M3电机Q0.7

3.程序编写 

程序是在FB块中编写的,使用的是#变量,在主程序调用后可以填入相应的I/O点。 程序:

IF #停止1 THEN
    #L1 := 0;
    #L2 := 0;
    #D1 := 0;
    #D2(出料口) := 0;
    #D4(进料阀指示) := 0;
    #M1 := 0;
    #M2 := 0;
    #M3 := 0;
    #中继1 := 0;
    #中继2 := 0;
    RESET_TIMER(#IEC_Timer_0_Instance_4);
    RESET_TIMER(#IEC_Timer_0_Instance_5);
    RESET_TIMER(#IEC_Timer_0_Instance_6);
    RESET_TIMER(#IEC_Timer_0_Instance_7);
    RESET_TIMER(#IEC_Timer_0_Instance_8);
    RESET_TIMER(#IEC_Timer_0_Instance_9);
    "数据块_1".II变量 := 0;
    
END_IF;

IF  #启动1 THEN
    #L2 := 0;
    #L1 := 1;
    
    #M1 := 0;
    #M2 := 0;
    #M3 := 0;
    "数据块_1".II变量 := 1;
END_IF;


CASE "数据块_1".II变量 OF
    1:
            IF #S1(料位传感器) THEN
                #D4(进料阀指示) := 0;
                #D2(出料口) := 0;
                "数据块_1".II变量 := 2;
            ELSIF #S1(料位传感器)=0 THEN
                #D4(进料阀指示) := 1;
                #D2(出料口) := 1;
                "数据块_1".II变量 := 1;
            END_IF;
            
    2:
        IF #SQ1 THEN
            #L2 := 1;
            #L1 := 0;
            "数据块_1".II变量 := 3;
        END_IF;
    3:
        #M3 := 1;
        #IEC_Timer_0_Instance_4(IN:=#M3,
                                PT:=T#3s,
                                Q=>#输出点1);
        IF #输出点1 THEN
            #M2 := 1;
        END_IF;
        #IEC_Timer_0_Instance_5(IN:=#M2,
                                PT:=T#2s,
                                Q=>#输出点2);
        IF #输出点2 THEN
            #M1 := 1;
        END_IF;
        #IEC_Timer_0_Instance_6(IN:=#M1,
                                PT:=T#3s,
                                Q=>#输出点3);
        IF #输出点3 THEN
            #D2(出料口) := 1;
            "数据块_1".II变量 := 4;
        END_IF;
    4:
        IF #SQ2 THEN
            #L2 := 0;
            #L1 := 1;
            #D1 := 1;
            #D2(出料口) := 0;
        END_IF;
        #IEC_Timer_0_Instance_7(IN:=#D1,
                                PT:=T#3s,
                                Q=>#输出点4);
        IF #输出点4 THEN
            #M1 := 0;
            #中继1 := 1;
        END_IF;
        #IEC_Timer_0_Instance_8(IN:=#中继1,
                                PT:=T#3s,
                                Q=>#输出点5);
        IF #输出点5 THEN
            #M2 := 0;
            #中继2 := 1;
        END_IF;
        #IEC_Timer_0_Instance_9(IN:=#中继2,
                                PT:=T#3s,
                                Q=>#输出点6);
        IF #输出点6 THEN
            #M3 := 0;
            "数据块_1".II变量 := 5;
        END_IF;
        
    5:
        #中继1 := 0;
        #中继2 := 0;
        #L2 := 0;
        #L1 := 0;
        #D1 := 0;
        RESET_TIMER(#IEC_Timer_0_Instance_4);
        RESET_TIMER(#IEC_Timer_0_Instance_5);
        RESET_TIMER(#IEC_Timer_0_Instance_6);
        RESET_TIMER(#IEC_Timer_0_Instance_7);
        RESET_TIMER(#IEC_Timer_0_Instance_8);
        RESET_TIMER(#IEC_Timer_0_Instance_9);
        "数据块_1".II变量 := 0;
        
END_CASE;

 4.小结

 自动装料使用的是CASE语句来完成,其中要注意这一点控制要求:用if   eisif  解决。

若料位传感器 S1 置为“ 0 ”(料斗中的物料不满),进料阀开启进料, D4 亮。当 S1
置为“ 1 ”(料斗中的物料已满),则停止进料( D4 灭)。

 

总结

以上就是 交通灯 和 自动装料  这两个应用案例。

相关文章:

  • 深度理解机器学习1-自然语言处理
  • 我靠steam/csgo道具搬运实现财富自由
  • Python入门实践(三)——列表
  • 【蓝桥杯】历届真题 重复字符串(省赛)Java
  • 数据结构初级<排序>
  • Pr 计时器动画
  • 让你彻底明白Java SPI与SpringBoot自动配置,内附实例代码演示
  • 【Uniapp】四、运行环境、终端及组件通信(完结)
  • LeetCode(Array)1365. How Many Numbers Are Smaller Than the Current Number
  • 云原生技能树-docker image 操作-练习篇
  • hids Elastic Security 系列1-Elastic Security介绍
  • 2022 自杀式年度总结(已发老板)
  • [创业之路-46] :动态股权机制 -1- 七步法(流程)
  • Python 实现 JSON 解析器
  • 【数据结构】万字深入浅出讲解顺序表(附原码 | 超详解)
  • Allegro如何设计线圈操作指导
  • c程序gcc编译常见报错及解决方法整理
  • SSH (Secure Shell)
  • 《蓝桥杯》30天拿下Python算法设计与分析【Day 11】
  • PyTorch初学者指南:数据预处理