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

news2024/11/15 7:16:45

使用博图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 灭)。

 

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/174057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宏任务和微任务

宏任务和微任务1. 什么是宏任务和微任务2. 宏任务和微任务的执行顺序3. 去银行办业务的场景4. 分析以下代码输出的顺序5. 经典面试题1. 什么是宏任务和微任务 JavaScript 把异步任务又做了进一步的划分,异步任务又分为两类,分别是: ① 宏任…

寄存器、RAM、ROM、Flash

单片机寄存器简述 寄存器详细请点这里 1、单片机寄存器就是单片机片内存储器(片内RAM)一部分,每一个都有地址。只不过这几个寄存器有特殊的作用,比如指令:MUL AB,这条指令用到两个寄存器A,B进行乘法,结果存到BA里面&a…

kaggle竞赛 | Quora Insincere Question | 文本情感分析

目录赛题背景赛题评价指标数据集分析pytorch建模之前发布了一遍实战类的情感分析的文章,包括微博爬虫,数据分析,相关模型。 可以参考: https://blog.csdn.net/lijiamingccc/article/details/126963413 比赛链接: http…

Spring Boot学习篇(十二)

Spring Boot学习篇(十二) shiro安全框架使用篇(四) 2 在主页显示用户登录状态、用户信息和完成默认注销(不改shiro原来的配置)操作 2.1 变更SysUserController类 2.1.1 在SysUserController类中注入sysUserMapper Autowired SysUserMapper sysUserMapper;2.1.2 在SysUserC…

1598_AURIX_TC275_GPIO功能以及部分寄存器梳理1

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 接下来,看一下GPIO的寄存器以及部分相关的功能。这部分将会是接下来这个章节剩余的全部,可能内容偏雷同,因此都是跳跃式看。但是中间需要临时关注一下的…

【2022年MathorCup大数据竞赛】B题:北京移动用户体验影响因素研究(二)(问题一的分析和结果)

目录:题目解析一、问题的解答框架二、问题一的分析2.1 附件1的处理流程2.2 附件2的处理流程2.2.1 拉格朗日插补法2.3 数据编码2.4 相关分析2.5 基于互信息GBDT的特征提取2.6 量化分析一、问题的解答框架 二、问题一的分析 针对问题一,首先需要对附件1和…

《MySQL高级篇》十二、MySQL事务日志

文章目录1. redo日志1.1 为什么需要REDO日志1.2 REDO日志的好处、特点1. 好处2. 特点1.3 redo的组成1.4 redo的整体流程1.5 redo log的刷盘策略1.6 不同刷盘策略演示1. 刷盘策略分析2. 举例1.7 写入redo log buffer 过程1. 补充概念:Mini-Transaction2. redo 日志写入log buffe…

「链表」数据结构简析

前言 前言:研究一个数据结构的时候,首先讲的是增删改查。 文章目录前言一、链表简介1. 含义2. 节点组成3. 存储方式1)数据在内存中的存储方式2)单链表在内存中的存储方式2)双链表在内存中的存储方式2)循环链…

程序地址空间

目录 1. 验证程序地址空间布局图 2. 虚拟地址空间 什么是虚拟地址空间 3. 进程地址空间 4. 为什么要有虚拟地址空间 1. 有效保护物理内存 2. 使内存管理模块和进程管理模块实现解耦合 3. 将内存分布有序化 1. 验证程序地址空间布局图 下面我们写段代码验证一下上图中…

qt调用matlab生成的dll库

最近由于在项目中要用到matlab的算法,而用C转换matlab算法非常麻烦,所以采用qtmatlab混合编程的方法,在使用中遇到了些许问题,特记录如下。 一、生成matlab库 1、首先需要下载matlab完整版,之前在网上下载的简版&…

基于C#制作一个休息提醒闹钟

> 此文主要通过WinForm来制作一个休息提醒闹钟,通过设置时间间隔进行提醒,避免沉浸式的投入到工作或者学习当中,战斗的同时也要照顾好自己。 实现流程1.1、创建项目1.2、时间间隔配置页1.3、闹钟提醒页1.4、开机自启动配置1.5、日志记录1.…

一个数据库文档生成神器

Gitee项目地址,可以直接去开源项目查看(推荐) 简介 在企业级开发中、我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有、要么有、但都是…

MySql 5.7.40备份到腾讯云cos+从cos恢复

1 备份 1.1 安装coscli # wget https://github.com/tencentyun/coscli/releases/download/v0.12.0-beta/coscli-linux # mv coscli-linux /usr/bin/coscli # chmod 755 /usr/bin/coscli # coscli --version如果github慢可以使用国内镜像: wget https://cosbrowse…

数电相关知识

文章目录 逻辑电路与或非异或 门电路与的物理电路电压比较器D型锁存器优先编码器边沿触发器RS触发器施密特触发器基本原理555定时器数电电平TTL器件CMOS器件逻辑电路 与或非异或 门电路 与乘大于1或加大于1异或异性为1,异吗? 与的物理电路

Leetcode:17. 电话号码的字母组合(C++)

目录 问题描述: 实现代码与解析: 回溯: 原理思路: 问题描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&…

【数据库】必须知道的MySQL优化

文章目录SQL语言有哪几部分组成为什么要进行MySQL优化?优化方法有哪些?SQL层面优化MySQL配置方面架构设计方面硬件和操作系统方面.SQL语言有哪几部分组成 数据定义语言,简称DDL:DROP,CREATE,ALTER等语句。数据操作语言&#xff0…

【Java|golang】2299. 强密码检验器 II

如果一个密码满足以下所有条件,我们称它是一个 强 密码: 它有至少 8 个字符。 至少包含 一个小写英文 字母。 至少包含 一个大写英文 字母。 至少包含 一个数字 。 至少包含 一个特殊字符 。特殊字符为:“!#$%^&*()-” 中的一个。 它 不…

VMware 安装 OpenWrt 旁路由并配置 PassWall

准备 OpenWrt 镜像包,本例使用的是在恩山论坛上面下载的https://www.right.com.cn/forum/thread-8271618-1-1.html网络选择 NAT 模式创建虚拟机一直下一步至一直下一步至,这里选择 NAT 方式一直下一步至,这里选择“使用现在虚拟磁盘”&#x…

高并发系统设计 -- 粉丝关注列表如何设计

粉丝关注列表如何设计和落地 业务场景 上图我们简称relation页。relation页展示用户的关系相关信息,包含两个子页面: follower页,展示关注该用户的所有用户信息。attention页,展示该用户关注的所有用户信息 主要操作 用户可以…

数论之欧拉筛法(含朴素筛选、埃式筛选详细代码)

文章目录前言朴素筛法(纯暴力,O(n^2^))埃式筛法(找出合数来确认质数, O(n*log(logn)))欧拉筛法(线性筛选,O(n))参考文章前言 在学习Acwing c蓝桥杯辅导课第八讲数论-1295. X的因子链…