1. OB、FB、FC功能

OB(组织块):用于执行特定的任务(CPU启动、循环扫描、时间中断、硬件中断等),每个OB块均有一个特定的功能和优先级(特定事件发生时被触发)。

FB(功能块):具有内部存储器,可保留状态数据,适用于多频次调用需要保持数据状态的场合(PID控制器、计数器等)。

FC(功能):不保存任何内部状态数据,用于执行特定的功能,每次调用数据不保留(简单计算、逻辑操作)

调用规则:

调用是指在一个块中使用另一个程序块的功能,可以将一个任务拆分成更小、更易管理的部分,递归地使用其他程序块,每个部分由一个独立的FB或FC来处理。(嵌套深度为8层)

  • OB为最高层次的程序块,内部可编写逻辑,调用其他FB、FC块;
  • FB块可调用FB、FC,可利用其他功能块或功能完成复杂逻辑(临时变量并不存储在背景数据块中,只用于一个循环);
  • FC块可调用FB、FC,它自己不保存任何数据,(必须给所有形参分配实参)。

说明:

  • 嵌套调用从循环OB开始,最多嵌套16层FB或FC;中断OB最多嵌套6层;安全程序嵌套只有4层
  • 结构 (STRUCT) 和 PLC 数据类型 (UDT) 的嵌套深度为 8 级。具体嵌套深度取决于所使用的 CPU。

OB的事件与优先级:

OB的执行先后与其优先级有关,优先级高的OB会中断低级的OB。当CPU在执行主循环程序时,如有有一个高优先级的中断OB被触发时,CPU会暂停主程序,先执行中断OB,当其执行完成后继续主程序。

2. 背景数据块是什么

函数块(FB)的调用称为实例。实例使用的数据存储在背景数据块中(实例寻址)。

  • 要对来自当前块接口的变量进行寻址: #<变量名称>
  • 访问多重背景块的数据:#<多重实例名称>.<变量名称>

3. 优化与标准访问的区别

STEP 7 提供具有不同访问选项的数据块:

  • 可优化访问的数据块 (S7-1200/S7-1500)
  • 可标准访问的数据块 (S7-300 / S7-400 / S7-1200 / S7-1500)

可优化访问的数据块(符号寻址)

  • 可优化访问的数据块没有固定的定义结构。在声明中,仅为数据元素分配一个符号名称,而不分配在块中的固定地址。
  • 对于符号寻址,可以使用数据块的名称和变量名,并用圆点分隔。数据块的名称用引号括起来。

可标准访问的数据块(绝对寻址)

  • 可标准访问的数据块具有固定的结构。数据元素在声明中分配了一个符号名,并且在块中有固定地址。
  • 对于绝对寻址,可以使用数据块的编号和数据块变量的绝对地址,并用圆点分隔。地址标识符 % 被自动设置为绝对地址的前缀

4. 编程中的操作数

  • PLC 变量
  • 常量
  • 背景数据块中的变量
  • 全局数据块中的变量

5. 片段寻址

可以选择包含所声明变量的特定地址区域,访问宽为 1 位、8 位、16 位或 32 位的区域。

6. 间接寻址

在运行之前不计算地址的操作数,采用间接寻址方式时,单循环中各程序段可多次执行,而且每次运行时使用的操作数不同。

间接寻址选项:

  • 通过指针间接寻址
  • ARRAY 元素的间接索引
  • 通过 DB_ANY 数据类型间接寻址数据块。

间接寻址示例1:

  • 使用下标访问来自不同的三个变量。
下标 变量
1 Input_WORD_0——Word
2 Temperature——DInt
3 Output_WORD_4——Word

根据在 Index 参数中指定的编号(1、2 或 3),执行“FC_AccessGroupInt”指令的第一、第二或第三种情况。

ARRAY 间接寻址示例2:

  • 使用下标访问将ARRAY三维数组的元素复制到 "MyTarget" 变量中。

7. AT覆盖变量(访问变量内部的片段)

附加“AT”关键字声明来覆盖已经定义了的变量;例如:对WORD中内部的Byte进行寻址;

使用注意事项:

  • 在标准访问块内(去掉“优化的块访问”)
  • 可小于等于被覆盖变量的宽度


8. 写程序时必备的OB块

程序必备块(开发常用的OB块)

  • 主程序循环块OB1‌:这是用户程序的核心,负责协调整个程序的运行。OB1在CPU启动后循环执行,用户可以在其中调用其他用户块(如FB、SFB、FC、SFC等)‌

  • ‌初始化程序块OB100‌:在CPU上电时调用一次,通常用于初始化设置‌

  • 循环中断块OB30:用于处理需要定期执行的任务,如通讯处理等‌

‌错误处理块‌(添加后可直接下载空程序):

  • ‌时间错误块OB80‌:防止CPU扫描时间超过最大值‌
  • ‌‌电源故障块OB81‌:防止后备电源失效导致CPU停机‌
  • ‌诊断中断块OB82‌:通讯时需要下载‌
  • ‌CPU硬件故障块OB84‌:处理CPU硬件故障导致的停机‌
  • ‌通信错误块OB87‌:处理通信错误‌‌
  • ‌编程错误块OB121‌:处理编程错误‌
  • ‌‌I/O错误块OB122‌:处理I/O错误‌
  • ‌冗余错误块OB72‌:处理冗余系统错误‌‌(冗余系统时使用)

  • ‌日期中断块OB10~OB17‌:根据设定的日期和时间触发执行,适用于需要按日期执行的任务‌
  • ‌时间延迟中断块OB20~OB23‌:按设定的延迟时间触发执行,适用于需要延迟执行的任务‌
  • ‌硬件中断块OB40~OB47‌:由外部设备触发,适用于处理硬件相关的事件‌(硬件中断模块HF使用)

经验1:FC函数中的置复位指令无法执行?

  • FC函数中置复位使用需要将其变量属性安排到IN_OUT内。使用Input、output、Temp变量无法保持!


待续

PLC编程—基本知识的更多相关文章

  1. PLC编程算法

    PLC编程算法(一) 01 开关量也称逻辑量,指仅有两个取值,0或1.ON或OFF.它是最常用的控制,对它进行控制是PLC的优势,也是PLC最基本的应用. 开关量控制的目的是,根据开关量的当前输入组合 ...

  2. C#网络编程基础知识

    C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...

  3. [转] - Linux网络编程 -- 网络知识介绍

    (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...

  4. Python 编程核心知识体系(REF)

    Python 编程核心知识体系: https://woaielf.github.io/2017/06/13/python3-all/ https://woaielf.github.io/page2/

  5. IEC的PLC编程语言标准 IEC61131-3

    IEC的PLC编程语言标准(IEC61131–3) 中有5种编程语言:1)顺序功能图(Sequential function chart) :2)梯形图(Ladder diagram):3)功能块图( ...

  6. PLC编程逻辑思路

    PLC编程逻辑思路 在整个执行过程的流程中,都是在不断地找启动条件,停止条件以及输出结果.当条件不够时,就得想办法如果添加标志位,根据已有条件去构造条件:当结果开发耦合时,就制造中间继电器去除耦合. ...

  7. TCP与UDP比较 以及并发编程基础知识

    一.tcp比udp真正可靠地原因 1.为什么tcp比udp传输可靠地原因: 我们知道在传输数据的时候,数据是先存在操作系统的缓存中,然后发送给客户端,在客户端也是要经过客户端的操作系统的,因为这个过程 ...

  8. 16第一章 ASP.Net编程基础知识

    第一章        ASP.Net编程基础知识 第一章        ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...

  9. Java并发编程核心知识体系精讲

    第1章 开宗明义[不看错过一个亿]本章一连串设问:为什么学并发编程?学并发编程痛点?谁适合学习本课?本课程包含内容和亮点?首先4大个理由告诉你为什么要学,其实源于JD岗位要求就不得不服了.其次5个痛点 ...

  10. SHELL脚本编程基础知识

    SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...

随机推荐

  1. Azure – Azure Active Directory

    前言 虽然它好像是快过时了, 但目前还得用到. 先不研究新的先. Azure 的 service 如果要通过 API 调用的话, 就需要 Azure Active Directory (Azure A ...

  2. 树形结构数据 数组对象 按照 sort 字段排序

    export function sortTreeData (data, flag) { let arr = [] if (flag === 1) { arr = data[0].children } ...

  3. ADO.NET组成

    SqlConnection(数据库连接器) SqlCommand(数据库命名对象) SqlCommandBuilder(生存SQL命令) SqlDataReader(数据读取器) SqlDataAda ...

  4. CF1187E 题解

    Title translation 给定一棵 \(n\) 个点的树,初始全是白点. 要做 \(n\) 步操作,每一次选定一个与一个黑点相隔一条边的白点,将它染成黑点,然后获得该白点被染色前所在的白色联 ...

  5. HTB打靶记录-Infiltrator

    nmap scan nmap -A 10.10.11.31 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-15 13:18 CST Nma ...

  6. manim边做边学--复数平面

    所谓复数平面,就是一种二维坐标系统,用于几何表示复数的场景,其中横轴代表实部,纵轴代表虚部. 每个点对应一个唯一的复数,反之亦然,这种表示方法使得复数的加法.乘法等运算可以通过直观的图形变换来理解. ...

  7. 《JVM第6课》本地方法栈

    1 什么是本地方法 首先要知道什么是本地方法,本地方法并不是 JVM 自己的方法,也不是 jre 里面的方法,而是指那些操作系统自己的方法(如C/C++方法),它们在操作系统目录里.可以这么理解,本地 ...

  8. C++之OpenCV入门到提高003:矩阵的掩膜(Mask)处理

    一.介绍 今天是这个系列<C++之 Opencv 入门到提高>得第三篇文章.今天这篇文章也不难,主要介绍如何使用 Opencv 对图像进行掩膜处理,提高图像的对比度.在这个过程中,我们可以 ...

  9. 第八届御网杯线下赛Pwn方向题解

    由于最近比赛有点多,而且赶上招新,导致原本应该及时总结的比赛搁置了,总结来说还是得多练,因为时间很短像这种线下赛,一般只有几个小时,所以思路一定要清晰,我还是经验太少了,导致比赛力不从心,先鸽了~ S ...

  10. Java常见面试真题之中级进阶(List篇)

    前言 本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!获取一个类Class对象的方式有哪些?ArrayList 和 LinkedList 的区别有哪些?用过 ArrayList 吗?说一下它有 ...