[工业自动化-19]:西门子S7-15xxx编程 - 软件编程 - PLC程序块、组织块OB与PLC多线程原理、OB、FC、FB、DB

news2024/12/26 22:49:54

目录

一、PLC的块的种类

1.1 什么是块

1.2 块的种类

1.3 不同块之间的相互调用关系

1.4 OB、FC、FB和DB

二、PLC程序组织块OB

2.1 什么是程序块OB

2.2 为什么需要程序块OB

2.3 PLC有哪些程序块

2.4 如何使用程序块 - OB块的执行顺序和规则

2.5 PLC用户程序主函数(主循环)

2.6 PLC初始化函数

2.7 PLC函数调用支持

2.8 PLC的多线程支持

三、PLC 结构化逻辑编程

3.1 概述

3.2 程序段与程序块OB


一、PLC的块的种类

1.1 什么是块

在PLC(可编程逻辑控制器)编程中,块(Block)是组织程序(Organization Program)的基本单元。

块是一个逻辑上的概念,通常包含一系列的指令或语句,用于实现特定的功能、算法或任务。

块可以看作是一个相对独立的程序部分,可以在整个PLC程序中重复使用。

1.2 块的种类

块在PLC编程中有多种类型,其中最常见的包括:

  1. 程序块(OB,Organization Block):程序块是组织程序的基本单元,用于编写和执行PLC的控制逻辑。程序块按照特定的规则和要求编写,如主程序块(OB1)、副程序块(SFB)、中断程序块(OBi)、循环程序块(OBx)和系统程序块(OBD)等等。

  2. 函数块(FC,Function Block):函数块是一种可重用的程序段,包含输入、输出和中间处理部分。函数块通常用于对某个特定数据类型进行处理或一个特定的功能操作。

  3. 数据块(DB,Data Block):数据块是一个具有特定数据格式的数据存储区域。数据块中可以存储PLC程序使用的各种数据类型,如输入和输出数据、控制参数、控制算法参数等。

  4. 技术块(TB,Technological Block):技术块是一种特定的程序部分,用于描述和管理生产过程中的特定技术流程、工艺参数等信息。

块的作用在于将PLC程序划分为多个逻辑上独立的模块,使编程更加容易和灵活。通过合理的使用块,程序的逻辑和功能可以被分解为不同的部分,在编写和调试PLC程序时可以更加高效和灵活地开发控制逻辑,提高程序的可读性和可维护性。此外,块的使用也可以提高PLC程序的重用性,减少重复编写相似代码的工作量。

1.3 不同块之间的相互调用关系

OS-> OB -> FB -> FC -> DB

1.4 OB、FC、FB和DB

在PLC(可编程逻辑控制器)编程中,OB、FC、FB和DB是常见的缩写词,分别代表不同的概念和功能:

  1. OB(Organization Block):OB是组织块的意思,在PLC编程中表示一个程序块,用于编写和执行PLC的控制逻辑。OB包括各种类型,如主程序块(OB1)、中断程序块(OBi)、循环程序块(OBx)等,根据其不同的类型和执行规则,在PLC程序中有不同的作用和触发条件。

  2. FC(Function):FC表示函数块,是PLC中的一种可重用程序段,通常用于封装和实现某个特定功能或算法。FC通常有输入和输出,通过参数传递来实现对输入数据的处理,并返回处理结果或更新相关的输出数据。函数块可以在PLC程序中被调用和重复使用。

  3. FB(Function Block):FB表示功能块,也是PLC中的一种可重用程序段。与函数块不同的是,功能块不仅包含输入和输出,还具有内部的数据存储区域,可以通过内部数据交换实现数据处理和逻辑控制。功能块通常使用图形化的可视化编程工具进行编写和调用。

  4. DB(Data Block):DB表示数据块,是PLC中用于存储数据的一种特定数据结构。数据块常用于存储输入、输出数据、控制参数、算法参数等,可以在PLC程序中被访问和修改。通过合理使用数据块,可以实现数据的集中管理和重复使用。

综上所述,OB、FC、FB和DB在PLC编程中分别代表组织块、函数块、功能块和数据块,它们在PLC程序中有不同的作用和功能。工程师们可以根据实际需求,合理选择和使用这些程序块来实现PLC的控制逻辑和数据管理。

1.5 数据块中的数据类型

在西门子PLC编程中,常见的数据类型包括:

  1. 位(Bool):用于表示开关状态,取值为0或1。

  2. 字节(Byte):用于存储8位二进制数据。

  3. 字(Word):用于存储16位二进制数据。

  4. 双字(Double Word):用于存储32位二进制数据。

  5. 整数(Int):用于存储带符号的16位整数。

  6. 长整数(DInt):用于存储带符号的32位整数。

  7. 浮点数(Real):用于存储单精度浮点数,通常用于表示实数。

  8. 字符串(String):用于存储文本数据,可以包含多个字符。

  9. 定时器(Timer):用于实现定时功能,可以设置计时、启动和停止定时器。

  10. 计数器(Counter):用于实现计数功能,可以设置计数数值、启动和停止计数器。

  11. 用户自定义类型(User-Defined Types):可以根据需求通过结构体或联合体等方式定义自己的数据类型。

这些数据类型在西门子PLC编程中被广泛应用,开发人员可以根据具体的应用需求选择适合的数据类型来存储和处理数据。每个数据类型都有其特定的用途和限制,了解这些数据类型的特点和用法对于正确使用PLC编程非常重要。

二、PLC程序组织块OB

2.1 什么是程序块OB

在PLC(可编程逻辑控制器)编程中,程序块(OB,Organization Block)是组织程序(Organization Program)的基本单元,用于编写和执行 PLC 的控制逻辑。

OB 是按照特定的规则和要求编写的一段程序代码

2.2 为什么需要程序块OB

程序块(OB,Organization Block)在PLC(可编程逻辑控制器)编程中起着重要的作用。

以下是一些程序块(OB)的作用和重要性:

  1. 分解复杂程序:PLC控制程序可能非常复杂,包含大量的逻辑和功能。使用程序块可以将整个程序分解成小块每个块负责特定的功能或任务。这样可以降低程序的复杂性,使其更易于编写、调试和维护。

  2. 模块化编程:每个程序块都可以看作一个独立的模块,它可以在程序中多次使用。这种模块化的设计能够提高代码的重用性,减少重复编写相似代码的工作量

  3. 易于调试和故障排除:当发生问题时,程序块使得定位故障变得更加容易。通过每个程序块的调试和测试,可以快速定位问题并进行故障排除,而不必检查整个程序。

  4. 提高程序可读性:使用程序块将程序逻辑划分为不同部分,可以提高程序的可读性。每个程序块都有特定的用途和功能,使得代码更易于理解。

  5. 灵活的程序控制:PLC通常需要根据不同的条件和事件来执行不同的操作。通过程序块的使用,可以灵活地控制程序的执行流程,根据需要调用或跳过特定的程序块

  6. 便于维护和修改:程序块的使用使得程序的维护和修改变得更加容易。当需要修改程序时,只需修改特定的程序块而无需修改整个程序。这样可以减少对其他部分的影响,并降低引入新错误的风险。

        总而言之,程序块(OB)在PLC编程中起到了组织程序、提高可读性、减少重复性工作、便于调试和故障排除等重要作用。

2.3 PLC有哪些程序块

PLC 中的程序块(OB)通常包括以下几种类型:

  1. 主程序块(OB1)-- 主程序:主程序块是 PLC 中最常用的程序块。它负责 PLC 的控制逻辑和功能,包括输入信号的读取、输出信号的控制、数据处理以及各种控制算法的执行等。

  2. 副程序块(SFB)-- 功能库:副程序块用于完成各种常用的功能模块化程序,如数学计算、通信协议处理、定时器/计数器等。这些功能模块可以在程序中多次被调用。

  3. 中断程序块(OBi)-- 中断处理程序:中断程序块是在特定事件发生时被触发执行的程序块,例如硬件中断、通信中断等。中断程序块通常用于实时响应特定的事件。

  4. 循环程序块(OBx)-- 定时中断程序:循环程序块是周期性执行的程序块,它可以在特定的时间间隔或者循环次数内被触发执行。

  5. 系统程序块(OBD)-- 系统程序:系统程序块是用于系统特定的功能和操作,例如 PLC 的启动和停止,系统错误处理等。

每个程序块(OB)在 PLC 编程中具有特定的执行顺序和规则,可以在 PLC 的编程软件中根据需要进行编写和配置。编写程序块时需要遵守特定的编程规范和语法,确保程序的正确性和可靠性。

通过合理使用不同类型的程序块(OB),可以将 PLC 的控制逻辑分解为不同模块,提高程序的可读性、可维护性和可重用性。这样,在编写 PLC 控制程序时可以更加灵活、高效地开发和调试控制逻辑。

2.4 如何使用程序块 - OB块的执行顺序和规则

在PLC(可编程逻辑控制器)编程中,使用程序块(OB,Organization Block)需要遵守特定的执行顺序和规则。以下是一般情况下使用程序块的执行顺序和一些常见的规则:

  1. 主程序块(OB1)的执行顺序:主程序块(OB1)是PLC程序中的入口点,因此它的执行顺序是最高优先级的。在PLC系统启动时,OB1会首先执行。主程序块可以包含整个PLC程序的核心逻辑和功能。

  2. 副程序块(SFB)的执行顺序:副程序块(SFB)是一种常用的功能模块,可以重复调用。SFB通常在主程序块(OB1)的执行过程中根据需要调用。副程序块在被调用时会执行相应的功能,然后返回到主程序块继续执行。

  3. 中断程序块(OBi)的执行顺序:中断程序块(OBi)是在特定事件发生时被触发执行的程序块。中断事件可以是硬件中断、通信中断等。当中断事件发生时,PLC会中断当前正在执行的程序,转而执行相应的中断程序块(OBi)。

  4. 循环程序块(OBx)的执行顺序:循环程序块(OBx)是周期性执行的程序块。OBx的执行时间间隔可以通过配置进行设置,比如基于时间触发或者基于循环次数触发。OBx会在设定的时间间隔或者循环次数达到时,被触发执行

  5. 系统程序块(OBD)的执行顺序:系统程序块(OBD)是用于系统特定的功能和操作,如PLC的启动和停止、系统错误处理等。系统程序块的执行顺序可能会有特定的要求和规则,需要根据具体的PLC和编程平台进行配置和使用。

在PLC编程中,程序块(OB)的执行顺序和规则可能因具体的PLC品牌、模型和编程软件而有所不同。因此,在进行PLC编程时,应仔细阅读和遵守相关的PLC文档和编程手册,了解特定PLC系统的程序块使用规则。

另外,值得一提的是,程序块的具体功能和执行顺序可以通过参数设置和编程软件中的配置进行调整和修改。这样可以根据程序的具体需求和逻辑来定制程序块的执行顺序,以满足特定的控制要求。

2.5 PLC用户程序主函数(主循环)

2.6 PLC初始化函数

2.7 PLC函数调用支持

FB:多个函数的程序块,拥有块内的全局变量,也称为背景数据区,背景数据区的数据供程序块内部的不同函数之间进行数据交互与通信。

FC:类似C语言函数,使用局部变量进行通信。

在PLC(可编程逻辑控制器)编程中,FB(Function Block)和FC(Function)都是可重用的程序段,但它们之间有一些区别:

  1. 输入输出方式不同:FC通常有输入和输出,它的输入和输出是由参数传递来实现的;而FB则具有内部的数据存储区域,可以通过数据存储区域进行内部数据交换,而不像FC需要通过参数进行传递。

  2. 编程方式不同:FC使用的是一种基于某种特定编程语言(如Ladder Diagram、Statement List等语言)的形式进行编程,它通常比较适合实现较为简单的算法和控制操作。而FB则通常使用图形化的可视化编程工具,如组态软件、PLCopen Editor等,它们提供了图形化的元件库,可以通过拖拽元件的方式来编写程序。

  3. 功能范围不同:FC通常用于针对一种简单的数据类型(如数字、布尔值、定时器等)进行操作和计算,它们通常处理数据对象的方法都很相似;而FB适合建模复杂的系统,可以通过组合一些元件和FB以及一些逻辑操作来实现更加复杂的算法。

  4. 内存使用不同:由于FC需要通过参数进行数据传递,因此它需要更多的内存来存储和传输数据,尤其是当数据量较大时;而FB则可以通过内部数据存储区域进行操作,因此可以更加节省内存资源。

  5. 场合不同:FC常见于数值计算、逻辑运算等仿真软件以及通用编译器中,并可以很方便地在程序中调用;而FB通常应用于控制系统的搭建、调试等场合,能够快速地实现PLC的控制逻辑。

综上所述,FB和FC在PLC编程中都是功能和模块的可重用部分,它们在输入输出方式、编程方式、功能范围、内存使用以及应用场合等方面存在一些不同。工程师们在选择FB和FC时,应该根据程序需求来合理选择。

2.8 PLC的多线程支持

备注:

循环中断:类似Linux操作系统中的定时中断程序。

硬件中断:类似Linux操作系统中的硬件中断服务器。

IO访问中断:类似Linux操作系统中的内核异常中断服务程序。

三、PLC 结构化逻辑编程

3.1 概述

PLC(可编程逻辑控制器)是一种用于自动化控制和工业生产的设备,编写PLC程序的目的是控制生产流程、实现工业自动化和提高生产效率。在PLC编程中,结构化逻辑编程是一种常见的编程方式,其特点是模块化、分层和可读性强,有助于PLC程序的编写和维护。

PLC结构化逻辑编程包括以下几个方面:

  1. 模块化编程:将整个PLC程序划分为多个逻辑上独立的模块,每个模块又可以进一步划分为多个子模块。每个模块和子模块的功能应该单一、清晰、明确。这种方式有利于程序的模块化管理和代码开发的重用。

  2. 分层编程:将PLC程序分为不同的层次结构(如控制层、运行层、监视层等),每层次结构的功能应该独立、清晰、明确。这种方式有利于程序的分层管理、调试和维护。

  3. 使用结构化方法:在PLC编程中,使用结构化方法可以显著提高程序的可读性和可维护性。使用结构化语言(如Ladder Diagram、Statement List、Structured Text等)进行编程,可以使用循环、条件等控制结构,使代码更加紧凑、易于理解、调试、修改。

  4. 使用函数块(FB):Facebook公司开发的PLCopen是一种广泛使用的PLC程序编程规范。PLCopen规范中的函数块(FB)是模块化编程的重要组成部分,它们可以提高程序的可读性和可重用性。编写好的函数块可以在多个程序中重复使用,并可以被其他编写PLC程序的工程师调用。

  5. 使用数据块(DB):数据块是用于存储控制参数、运行状态、输入和输出数据等的一种数据结构。在PLC程序中,使用数据块可以实现参数和数据的集中存储管理,也可以实现数据的重复使用。

综上所述,PLC结构化逻辑编程是一种模块化、分层和结构化的编程方式。使用这种方式可以提高程序的可读性和可维护性,并且使程序更易于开发、管理和维护。

3.2 程序段与程序块OB

程序块OB和程序段是PLC程序设计中的重要组成部分。

程序段是用于实现具体的功能和逻辑的代码段,

而程序块OB则是用于管理和执行程序段的特殊程序段。

通过合理使用程序段和程序块OB,可以实现PLC程序的模块化、结构化和灵活控制。

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

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

相关文章

2023.11.12使用flask对图片进行黑白处理(base64编码方式传输)

2023.11.12使用flask对图片进行黑白处理(base64编码方式传输) 由前端输入图片并预览,在后端处理图片后返回前端显示,可以作为图片处理的模板。 关键点在于对图片进行base64编码的转化。 使用Base64编码可以更方便地将图片数据嵌入…

sass 生成辅助色

背景 一个按钮往往有 4 个状态。 默认状态hover鼠标按下禁用状态 为了表示这 4 个状态&#xff0c;需要设置 4 个颜色来提示用户。 按钮类型一般有 5 个&#xff1a; 以 primary 类型按钮为例&#xff0c;设置它不同状态下的颜色&#xff1a; <button class"btn…

【Android】配置Gradle打包apk的环境

目录 生成jks签名文件 配置build.gradle&#xff08;app&#xff09; 打包 生成jks签名文件 Java 密钥库&#xff08;.jks 或 .keystore&#xff09;是用作证书和私钥存储库的二进制文件。用于为用户设备上安装的 APK 签名的密钥。 详细解释请看官方文档&#xff1a; 为应用…

OpenCV踩坑笔记使用笔记入门笔记整合SpringBoot笔记大全

springboot开启摄像头抓拍照片并上传实现&问题记录 NotAllowedErrot: 请求的媒体源不能使用&#xff0c;以下情况会返回该错误: 当前页面内容不安全&#xff0c;没有使用HTTPS没有通过用户授权NotFoundError: 没有找到指定的媒体通道NoReadableError: 访问硬件设备出错Ov…

Linux线程创建,退出,等待

目录​​​​​​​ 一 为什么使用线程 1.1概念 1.2使用线程的理由 二 线程的创建&#xff0c;退出&#xff0c;等待 2.1 线程创建 2.2 线程退出 2.3.线程等待 2.4. 线程ID获取及比较 一 为什么使用线程 1.1概念 概念&#xff1a;"进程——资源分配的最小单位&…

【算法训练-链表 零】链表高频算法题看这一篇就够了

一轮的算法训练完成后&#xff0c;对相关的题目有了一个初步理解了&#xff0c;接下来进行专题训练&#xff0c;以下这些题目就是汇总的高频题目 题目题干直接给出对应博客链接&#xff0c;这里只给出简单思路、代码实现、复杂度分析 反转链表 依据难度等级分别为反转链表、…

2023数字科技生态展,移远通信解锁新成就

11月10日&#xff0c;以“数字科技&#xff0c;焕新启航”为主题的中国电信2023数字科技生态大会暨2023数字科技生态展在广州盛大启幕。作为物联网行业的龙头标杆&#xff0c;同时更与中国电信连续多年维持稳定友好的合作关系&#xff0c;移远通信受邀参加本次展会。 在本次展会…

Docker - DockerFile

Docker - DockerFile DockerFile 描述 dockerfile 是用来构建docker镜像的文件&#xff01;命令参数脚本&#xff01; 构建步骤&#xff1a; 编写一个dockerfile 文件docker build 构建成为一个镜像docker run 运行脚本docker push 发布镜像&#xff08;dockerhub&#xff0…

你真的会使用 MySQL中EXPLAIN吗

EXPLAIN是MySQL数据库中一个强大的工具&#xff0c;用于查询性能分析和优化。通过EXPLAIN&#xff0c;你可以查看MySQL查询的执行计划&#xff0c;了解MySQL是如何执行你的查询语句的。这篇文章将详细介绍EXPLAIN的使用&#xff0c;帮助你更好地理解和优化MySQL查询。 为什么使…

卫星通信和800MHz双管齐下,中国电信对中国移动发起新挑战

依靠国内某科技企业的宣传&#xff0c;卫星通信大热&#xff0c;中国电信也由此成为受益者&#xff0c;日前中国电信又大举招标25万座800MHz 5G基站&#xff0c;显示出中国电信积极以技术优势挑战中国移动。 一、中国电信急起直追 自从4G时代以来&#xff0c;中国电信就在国内通…

web3 React dapp进行事件订阅

好啊&#xff0c;上文web3 React Dapp书写订单 买入/取消操作 我们已经写好了 填充和取消订单 这就已经是非常大的突破了 但是 留下了一个问题 那就是 我们执行完之后 订单的数据没有直接更新 每次都需要我们手动刷新 才能看到结果 那么 今天我们就来看解决这个问题的事件订阅 …

ISP图像处理Pipeline

参考&#xff1a;1. 键盘摄影(七)——深入理解图像信号处理器 ISP2. Understanding ISP Pipeline3. ISP图像处理流程介绍4. ISP系统综述5. ISP(图像信号处理)之——图像处理概述6. ISP 框架7. ISP(图像信号处理)算法概述、工作原理、架构、处理流程8. ISP全流程简介9. ISP流程介…

spring boot中使用Bean Validation做优雅的参数校验

一、Bean Validation简介 Bean Validation是Java定义的一套基于注解的数据校验规范&#xff0c;目前已经从JSR 303的1.0版本升级到JSR 349的1.1版本&#xff0c;再到JSR 380的2.0版本&#xff08;2.0完成于2017.08&#xff09;&#xff0c;目前最新稳定版2.0.2&#xff08;201…

互联网Java工程师面试题·微服务篇·第二弹

目录 18、什么是 Spring 引导的执行器&#xff1f; 19、什么是 Spring Cloud&#xff1f; 20、Spring Cloud 解决了哪些问题&#xff1f; 21、在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处&#xff1f; 22、你能否给出关于休息和微服务的要点&#xff1f; 23、…

正点原子嵌入式linux驱动开发——Linux DAC驱动

上一篇笔记中学习了ADC驱动&#xff0c;STM32MP157 也有DAC外设&#xff0c;DAC也使用的IIO驱动框架。本章就来学习一下如下在Linux下使用STM32MP157上的DAC。 DAC简介 ADC是模数转换器&#xff0c;负责将外界的模拟信号转换为数字信号。DAC刚好相反&#xff0c;是数模转换器…

mysql数据库可以执行定时任务

在一些业务需要中&#xff0c;经常需要一些定时任务。如Java的schedule&#xff0c;nodejs的node-schedule等。今天第一次接触了使用数据库的存储过程来执行定时任务。 本篇文章以MySQL数据库为例&#xff0c;介绍通过数据库设置定时任务的方法。本文中以介绍操作过程为主&…

注册并实名认证华为开发者账号流程

文 | Promise Sun 1. 打开华为开发者网址&#xff1a; https://www.harmonyos.com 2.注册华为开发者账号&#xff1a; 1&#xff09;注册时可以选择手机号或者邮箱两种方式注册&#xff0c;建议选择手机号注册。 2&#xff09;根据提示填写信息注册即可。 3.开发者实名认证&am…

P6入门:项目初始化7-项目详情之代码/分类码Code

前言 使用项目详细信息查看和编辑有关所选项目的详细信息&#xff0c;在项目创建完成后&#xff0c;初始化项目是一项非常重要的工作&#xff0c;涉及需要设置的内容包括项目名&#xff0c;ID,责任人&#xff0c;日历&#xff0c;预算&#xff0c;资金&#xff0c;分类码等等&…

lc307.区域和检索 - 数组可修改

暴力解法 创建方法&#xff0c;通过switch-case判断所需要调用的方法。 public class RegionsAndSertches {public static void main(String[] args) {String[] str new String[]{"NumArray", "sumRange", "update", "sumRange"};i…

算法笔记-第五章-分数的四则运算

分数的四则运算 分数约分分数加法分数减法分数乘法分数除法分数的输出 分数约分 #include <cstdio> #include <algorithm> using namespace std; struct Fraction {//用结构体表示分子和分母int up, down; }; int gcd(int a, int b) {//求出最大公约数if (b 0) {r…