第一部分 自动线控制部分PLC程序设计.

Slides:



Advertisements
Similar presentations
实验四 利用中规模芯片设计时序电路(二).
Advertisements

第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
Oracle数据库 Oracle 子程序.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
FC OB1 FB SFC 操作系统 SFB OBs 结构化编程 其它
Hadoop I/O By ShiChaojie.
结构化编程 FC OB1 FB SFC 操作系统 SFB OBs 其它
组织块 操作系统 OB1 FC FB FB FC SFC SFB OBs 其它 目录 页码
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
存储系统.
第六章 S7-300/400指令系统 6.1 S7-300/400的数据类型 S7-300/400中数的表示方法
走进编程 程序的顺序结构(二).
辅导课程六.
数据块中的数据存储 目录 页 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型
数据块中的数据存储 目录 页 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
功能和功能块 FC FB DB 目录 页码 目标 …………… 局部变量 临时变量 程序所占用的局部数据区的总长度 局部数据堆栈的大小 …
逆向工程-汇编语言
CPU结构和功能.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
SOA – Experiment 2: Query Classification Web Service
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
模块6 S7-200 PLC基本逻辑指令 项目 6.2 电动机Y-减压起动控制设计 项目 6.2 电动机Y-减压起动控制设计
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
数据块中的数据存储 目录 页 目标 …… 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型
VisComposer 2019/4/17.
VB与Access数据库的连接.
姚金宇 MIT SCHEME 使用说明 姚金宇
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
项目二:HTML语言基础.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
iSIGHT 基本培训 使用 Excel的栅栏问题
3.16 枚举算法及其程序实现 ——数组的作用.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
LOGIX500软件入门 西安华光信息技术有限公司 2008年7月11日.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
HSC高速输出例程 HORNER APG.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Python 环境搭建 基于Anaconda和VSCode.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 UNIX文件系统.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
RefWorks使用指南 归档、管理个人参考文献.
工业机器人入门使用教程 ESTUN机器人 主讲人:李老师
培训课件 AB 变频器的接线、操作及参数的备份 设备动力科.
第四章 基本指令 要求: 熟练掌握基本逻辑指令及应用。 掌握梯形图编程规则。.
测试功能 目录 页 程序的状态监视功能 ……………... 2 程序状态监视的模式 …………………………. 3
DSP技术与应用 电子与信息技术系.
多个Activity的使用 本讲大纲: 1、使用Bundle在Activity之间交换数据 2、调用另一个Activity并返回结果
学习目标 1、什么是列类型 2、列类型之数值类型.
Presentation transcript:

第一部分 自动线控制部分PLC程序设计

项目一:模块介绍及要求 项目二:气动技术在自动线中的使用 项目三:PLC程序设计及调试

【项目功能】 【知识点和技能点】 1、通过该项目掌握S7-300PLC结构化编程的系统知识 2、通过该项目熟练应用PLC,实现六个模块的功能

【项目内容】 1、结合六个模块自动运行过程,统计出一个模块的输入输出点,并记录。 2、分组进行编程,先选择一个模块进行编程。将选择出的模块结合FB或FC进行编程。 3、依次统计剩下的五个模块元件,并编写程序。要求每个模块都可以正常运行。

项目三:PLC程序设计及调试 【项目知识准备】 3.1 S7 CPU中的程序 3.2 数据块中的数据存储 3.2 数据块中的数据存储 3.3 逻辑块(FC和FB)的结构及编程 3.4 编辑并调用无参功能(FC)——分部程序设计 3.5 编辑并调用有参功能(FC)——结构化程序设计 3.6 编辑并调用无静态参数的功能块(FB) 3.7 编辑并调用有静态参数的功能块(FB) 3.8 使用多重背景——结构化程序设计 3.9 思考与练习

§3.1 S7 CPU中的程序 §3.1.1 用户程序中的块结构 §3.1.2 用户程序结构 §3.1.3 I/O过程映像 §3.1.4 程序循环执行

用户定义的块 块类型 特性 组织块 - 操作系统和用户程序的接口 (OB) - 各层次的优先级 (1 ~ 26) 块类型 特性 组织块 - 操作系统和用户程序的接口 (OB) - 各层次的优先级 (1 ~ 26) - 局部数据堆栈中的特殊启动信息 功能块 (FB) - 带参数 / 数据保持 - 不带参数 / 数据保持 - 不带参数 / 数据不保持 功能 (FC) - 只传递一个返回值 (调用时必须分配参数) - 数据不保持 - 可带参数 数据块 (DB) - 结构化,局部存储 (背景 DB) - 结构化,全局数据存储 (在整个程序中均有效) 组织块 OB块构成了S7 CPU 和用户程序的接口。可以把全部程序存在OB1中, 让它连续不断地循环处理。也可以把程序放在不同的块中,用OB1在需 要的时候调用这些程序块。除OB1外。操作系统根据不同的事件可以调 用其他的OB块, 例如: - 时间-日期中断 - 周期时间中断 - 诊断中断 - 硬件中断 - 故障处理中断 - 硬件启动 功能块(FB) 功能块是在逻辑操作块内的功能或功能组,在操作块内分配有存储器,并 存储有变量。FB 需要这个背景数据块形式的辅助存储器。通过背景数据 块传递参数,而且,一些局部参数也保存在此区。其他的临时变量存在局 部堆栈中。保存在背景数据块内的数据,当功能块关闭时数据仍保持。 而保存在局部堆栈中的数据不能保存。 功能(FC) 功能是类似于功能块的逻辑操作块,但是,其中不分配存储区。FC 不需 要背景数据块。临时变量保存在局部堆栈中,直到功能结束。当FC执行 结束时,使用的变量要丢失。 数据块 (DB) 数据块是一个永久分配的区域,其中保存其他功能的数据或信息。数据块 是可读/写区,并做为用户程序的一部分转入CPU。

系统块 块类型 特点 系统功能 - 存储在CPU的操作系统中 (SFC) - 用户可以调用此功能 (不需要存储器) 块类型 特点 系统功能 - 存储在CPU的操作系统中 (SFC) - 用户可以调用此功能 (不需要存储器) 系统功能块 - 存储在CPU的操作系统中 (SFB) - 用户可以调用此功能 (需要存储器) 系统数据块 - 用于组态数据和参数的数据块 (SDB) 系统功能块(SFC) 系统功能是集成在S7 CPU中的已经编程并调试过的功能。这些块 支持的一些任务是设置模块参数、数据通讯和拷贝功能等。用户程序 可以不用装载直接调用SFC。SFC不需要分配数据块。 系统功能块(SFB) 系统功能块是S7 CPU的集成功能。 由于SFB是操作系统的一部分,用 户程序可以不用装载直接调用SFB。 SFB需要分配背景数据块DB,数据块必须作为用户程序的一部分下装 到CPU。 系统数据块(SDB) 系统数据块是由不同STEP 7工具产生的程序存储区,其中存有操作控 制器的必要数据。SDB中存有一些信息,例如:组态数据、通讯连接 和参数。

§3.1.1 用户程序中的块结构

§3.1.2 用户程序结构 线性程序(线性编程) 分部式程序(分部编程、分块编程) 结构化程序(结构化编程或模块化编程)

1. 线性程序(线性编程) 所谓线性程序结构,就是将整个用户程序连续放置在一个循环程序块(OB1)中,块中的程序按顺序执行,CPU通过反复执行OB1来实现自动化控制任务。这种结构和PLC所代替的硬接线继电器控制类似,CPU逐条地处理指令。事实上所有的程序都可以用线性结构实现,不过,线性结构 一般适用于相对简单的程序编写。

2.分部式程序(分部编程、分块编程) 所谓分部程序,就是将整个程序按任务分成若干个部分,并分别放置在不同的功能(FC)、功能块(FB)及组织块中,在一个块中可以进一步分解成段。在组织块OB1中 包含按顺序调用其他块的指令,并控制程序执行。 在分部程序中,既无数据交换,也不存在重复利用的程序代码。功能(FC)和功能块(FB)不传递也不接收参数,分部程序结构的编程效率比线性程序有所提高,程序测试也较方便,对程序员的要求也不太高。对不太复杂的 控制程序可考虑采用这种程序结构。

3. 结构化程序(结构化编程或模块化编程) 所谓结构化程序,就是处理复杂自动化控制任务的过程中,为了使任务更易于控制,常把过程要求类似或相关的功能进行分类,分割为可用于几个任务的通用解决方案的小任务,这些小任务以相应的程序段表示,称为块(FC或FB)。OB1通过调用这些程序块来完成整个自动化控制任 务。 结构化程序的特点是每个块(FC或FB)在OB1中可能会被多次调用,以完成具有相同过程工艺要求的不同控制对象。这种结构可简化程序设计过程、减小代码长度、提高 编程效率,比较适合于较复杂自动化控制任务的设计。

§3.1.3 I/O过程映像 PLC的基本结构

§3.1.3 I/O过程映像 回本节

PLC的扫描过程

§3.1.4 程序循环执行

§3.2 数据块中的数据存储 §3.2.1 数据存储区 §3.2.2 数据块 §3.2.3 数据块的数据结构 §3.2.4 建立数据块 §3.2 数据块中的数据存储 §3.2.1 数据存储区 §3.2.2 数据块 §3.2.3 数据块的数据结构 §3.2.4 建立数据块 §3.2.5 访问数据块

S7-CPU 的寄存器和存储器区域 S7-CPU 寄存器 S7-CPU 存储器区域 累加器 装载存储器 工作存储器 L, A, O,... ACCU4 32 位 仅适用于 S7-400 装载存储器 - 逻辑块 - 数据块 ACCU3 32位 ACCU2 32位 ACCU1 32位 工作存储器 - 逻辑块 - 数据块 L, A, O,... 地址寄存器 AR1 32位 I/O 区域 T, S, =,... AR2 32位 数据块寄存器 系统存储器 - 过程映像输入表 - 过程映像输出表 - 位存储器 - 定时器 - 计数器 - 逻辑数据堆栈 - 中断堆栈 - 块堆栈 CPU寄存器 CPU的寄存器用于寻址或处理数据。在相关命令(L, T,...)的配合下,可以在CPU存储器区和寄存器之间进行数据交换。 •累加器:2个(S7-300)或者4个(S7-400)累加器用于算术、比较指令或者 用于其他字节、字及双字指令。 •地址寄存器:2个地址寄存器作为指针用于寄存器间接寻址。 •数据块寄存器:数据块寄存器里包含打开的(活动的)数据块的号码。因此 可能有2个DB同时打开,其中一个DB使用DB 寄存器,另一个作为背景DB 使用DI寄存器。 打开DB时,其长度(以字节为单位)自动装载到相应的DB长度寄存器中。 •状态字:状态字包含各个不同的状态位,这些状态位反应程序执行过程中各个指令的执行结果或状态。 存储器区域 S7-CPU 存储器可以分为4个区域: •装载存储器用于存储用户程序,不包括符号地址赋值或注释。装载存储器可以是RAM或者是FLASH EPROM存储器。 •工作存储器用于存储与执行程序相关的那部分S7程序。程序只能在工作存储区内执行。 •I/O存储区允许对所连接信号模块的输入和输出进行直接存取。 •系统存储区(RAM)包括过程映像输入和输出表、位存储器、定时器和计数器等区域,此外还包括局部数据堆栈、块堆栈和中断堆栈。 打开的 DB DB 长度 打开的 DI DI 长度 16位 16位 状态字 状态位 16位 S7-CPU 寄存器 S7-CPU 存储器区域

S7-300 的存储器概念 装载存储器: 块: • 逻辑块 (OB,FC,FB) • 数据块 (DB) 附加信息 注释 符号 工作存储器: RAM 块: • 逻辑块 (OB,FC,FB) • 数据块 (DB) 附加信息 装载存储器: Flash- EPROM PG中的Flash EPROM 存储器卡 (随后插入CPU) 块: • 逻辑块 (OB,FC,FB) • 数据块 (DB) 附加信息 注释 工作存储器: • OB,FC,FB • DB n. reten. reten. 符号 块: • 逻辑块 (OB,FC,FB) • 数据块 (DB) 当系统有 电时,不 用电池做 后备 系统存储器: • PII, PIQ • M, T, C • 保持的 M, T, C • 保持的数据块 保持存储器: 当系统断 电时,不 用电池做 后备 n. reten. reten. 装载存储器 装载存储器是一个可编程模块,它包括建立在编程设备上的装载对象 (逻辑块、数据块和其它信息)。 装载存储器可以是存储器卡或内部集成的RAM。 工作存储器 工作存储器仅包含和运行时间使用的程序和数据。 RAM 工作存储器集成在CPU中,通过后备电池保持。 系统存储器 系统存储器包含下面的存储器区域: • 过程映象输入和输出表 (PII, PIQ) • 位存储器 (M) • 定时器 (T) • 计数器 (C) • 局部堆栈 (L). 保持存储器 保持存储器是非挥发的RAM,即使没有安装后备电池也用来保存位存储器、定时器、计数器和数据块。设置CPU参数时指定要保持的区域。 插入存储器卡 当插入存储器卡时,操作系统申请一个存储器复位(STOP LED 慢速闪烁)。把模式选择器打到“MRES”位置执行一次存储器复位。可执行的程序就从存储器卡(具有装载存储器功能)传递到工作存储器。 当程序执行时存储器卡必须插在CPU模块上。

Flash EPROM存储器卡中块的读出和写入 插入存储器 卡后: 申请存储器 复位并拷贝 到工作存储 器 内部装载存储器 RAM “装入” “装到 PG” 可执行 的部分 简介 当采用FEPROM 卡时,CPU可以脱离后备电池运行。程序保存在FEPROM中,出现断电也不会丢失。在硬件组态中定义保持区。 在S7-300中,保持区 (定时器、计数器、位存储器和数据区) 都存放在CPU的可保持存储器区。 插入/取下 当取下或插入存储器卡时,CPU 要求存储器复位。当插入RAM 卡时,用户程序必须从编程器装入,当插入FEPROM 卡时,它的内容拷贝到工作存储器。 失电 不带电池断电后,程序块从存储器卡拷贝到工作存储器,对于S7-300,由可保持存储器区提供保持的数据。 数据块的数据如果定义成保持 (仅对S7-300),就保持断电前的状态。用存储器卡中的值设定非保持数据区。 修改程序 当修改程序块时,被修改的块存放在工作存储器。当把程序块上载到编程器时,就从工作存储器传到编程器。 当失电(不配备电池)时,工作存储器(RAM)被清除。要保持修改的程序块,就 需要: 1. 当不带EPROM存储器卡时,保存到硬盘上; 2. 当带EPROM存储器卡时,保存到硬盘上或存储器卡上。 装入存储器卡 通过SIMATIC管理器把块传到存储器卡上 (插到编程器上),或利用菜单 PLC -> Download to EPROM Memory Card on CPU 直接写到CPU上的存储器卡上。存储器卡必须事先擦除。个别的块可以重新装入,但是不能删除或覆盖。 工作存储器 RAM

§3.2.1 数据存储区 数据以用户程序变量的形式存储,且具有唯一性。数据可以存储在输入过程映像存储器(PII)、输出过程映像存储器(PIQ)、位存储器(M)、局部数据堆栈(L堆栈)及数据块(DB)中。可以采用基本数据类型、复杂数据类 型或参数类型。 根据访问方式的不同,这些数据可以在全局符号表或共享数据块中声明,称为全局变量;也可以在OB、FC和FB的变量声明表中声明,称为局部变量。当块被执行时,变量将固定地存储在过程映像区(PII或PIQ)、位存储器区 (M)、数据块(DB)或局部堆栈(L)中。

§3.2.2 数据块 数据块定义在S7 CPU的存储器中,用户可在存储器中建立一个或多个数据块。每个数据块可大可小,但CPU对数据块数量及数据总量有限制。 数据块(DB)可用来存储用户程序中逻辑块的变量数据(如:数值)。与临时数据不同,当逻辑块执行结束或 数据块关闭时,数据块中的数据保持不变。 用户程序可以位、字节、字或双字操作访问数据块中 的数据,可以使用符号或绝对地址。

1.数据块的分类 共享数据块又称全局数据块。用于存储全局数据,所有逻辑块(OB、FC、FB)都可以访问共享数据块存储的 信。 背景数据块用作“私有存储器区”,即用作功能块(FB)的“存储器”。FB的参数和静态变量安排在它的背景数据块中。背景数据块不是由用户编辑的,而是由编辑器 生成的。 用户定义数据块(DB of Type)是以UDT为模板所生成的数据块。创建用户定义数据块(DB of Type)之前,必须先创建一个用户定义数据类型,如UDT1,并在 LAD/STL/FBD S7程序编辑器内定义。

2.数据块寄存器 CPU有两个数据块寄存器:DB和DI寄存器。这样,可以 同时打开两个数据块。

§3.2.3 数据块的数据结构 在STEP 7中数据块的数据类型可以采用基本数据类 型、复杂数据类型或用户定义数据类型(UDT)。 §3.2.3 数据块的数据结构 在STEP 7中数据块的数据类型可以采用基本数据类 型、复杂数据类型或用户定义数据类型(UDT)。 基本数据类型 复杂数据类型 用户定义数据类型

基本数据类型 根据IEC1131-3定义,长度不超过32位,可利用STEP 7基本指令处理,能完全装入S7处理器的累加器中。基本数 据类型包括: 位数据类型:BOOL、BYTE、WORD、DWORD、CHAR 数字数据类型:INT、DINT、REAL 定时器类型:S5TIME、TIME、DATE、TIME_OF_DAY

复杂数据类型 复杂数据类型只能结合共享数据块的变量声明使用。复杂数据类型可大于32位,用装入指令不能把复杂数据类型完全装入累加器,一般利用库中的标准块(“IEC”S7程序)处理复杂数据类型。复杂数据类型包括: 时间(DATE_AND_TIME)类型 矩阵(ARRAY)类型 结构(STRUCT)类型 字符串(STRING)类型

用户定义数据类型(UDT) STEP 7允许利用数据块编辑器,将基本数据类型和复杂数据类型组合成长度大于32位用户定义数据类型(UDT:User-Defined dataType)。用户定义数据类型不能存储在PLC中,只能存放在硬盘上的UDT块中。可以用用户定义数据类型作“模板”建立数据块,以节省录入时间。可用于建立结构化数据块、建立包含几个相同单元的 矩阵、在带有给定结构的FC和FB中建立局部变量。

【3-2-1】 创建用户定义数据类型:UDT1。 创建一个名称为UDT1的用户定义数据类型,数据结构如下,则可按以下几个步骤完成。

【3-2-1】 创建 用户定义数据类型

【3-2-1】 编辑UDT1

§3.2.4 建立数据块 在STEP 7中,为了避免出现系统错误,在使用数据块之前,必须先建立数据块,并在块中定义变量(包括变量符号名、数据类型以及初始值等)。数据块中变量的顺序及类型决定了数据块的数据结构,变量的数量决定了数据块的大小。数据块建立后,还必须同程序块一起下载到CPU中,才能被程序块访问。 建立数据块 定义变量并下载数据块

方法1:用SIMATIC Manager创建数据块。

方法2:用LAD/STL/FBD S7程序编辑器创建数据块。

新DB类型选择窗口

编辑数据块(变量定义) 变量定义完成后,应单击保存按钮保存并编译(测试)。如果没有错误则需要单击下载按钮,像逻辑块一样,将数据块下载 到CPU。

§3.2.5 访问数据块 在用户程序中可能存在多个数据块,而每个数据块的数据结构并不完全相同,因此在访问数据块时,必须指明数据块的编号、数据类型与位置。如果访问不存在的数据单元或数据块,而且没有编写错误处理OB块,CPU将进入STOP模式。 寻址数据块 访问数据块 直接访问数据块

寻址数据块

访问数据块 在STEP 7中可以采用传统访问方式,即先打开后访问;也可以采用完全表示的直接访问方式。 【例3-2-2】 打开并访问共享数据块。

访问数据块 用指令“OPN DB...”打开共享数据块(自动关闭之前打开的共享数据块),如果DB已经打开,则可用装入(L)或 传送(T)指令访问数据块。 【例3-2-3】 打开并访问背景数据块。

直接访问数据块 所谓直接访问数据块,就是在指令中同时给出数据块的编号和数据在数据块中的地址。可以用绝对地址,也可以用符号地址直接访问数据块。 用绝对地址直接访问数据块,如: 用符号地址直接访问数据块 ,如:

§3.3 逻辑块(FC和FB)的结构及编程 功能(FC)、功能块(FB)和组织块(OB)统称为逻辑块(或程序块)。功能块(FB)有一个数据结构与该功能块的参数完全相同的数据块,称为背景数据块,背景数据块依附于功能块,它随着功能块的调用而打开,随着功能块的结束而关闭。存放在背景数据块中的数据在功能块结束时继续保持。而功能(FC)则不需要背景数据块,功能调用结束后数据不能保持。组织块(OB)是由操作系统直接调用的逻辑 块。 §3.3.1 逻辑块(FC和FB)的结构 §3.3.1 逻辑块(FC和FB)的编程

§3.3.1 逻辑块(FC和FB)的结构 逻辑块(OB、FB、FC)由变量声明表、代码段及其属性等几部分组成。 局部变量声明表(局部数据) 逻辑块局部变量的数据类型 逻辑块的调用过程及内存分配

1. 局部变量声明表 每个逻辑块前部都有一个变量声明表,称为局部变量声明表。 局部数据分为参数和局部变量两大类,局部变量又包括静态变量和临时变量(暂态变量)两种。

对于功能块(FB),操作系统为参数及静态变量分配的存储空间是背景数据块。这样参数变量在背景数据块中留有运行结果备份。在调用FB时,若没有提供实参,则功能块使用背景数据块中的数值。操作系统在L堆栈中给FB的临时变量分配存储空间。 对于功能(FC),操作系统在L堆栈中给FC的临时变量分配存储空间。由于没有背景数据块,因而FC不能使用静态变量。输入、输出、I/O参数以指向实参的指针形式存储在操作系统为参数传递而保留的额外空间中。 对于组织块(OB)来说,其调用是由操作系统管理的,用户不能参与。因此,OB只有定义在L堆栈中的临时变量。

2.逻辑块局部变量的数据类型 局部变量可以是基本数据类型或复式数据类型,也可以是专门用于参数传递的所谓的“参数类型”。参数类型包括定时器、计数器、块的地址或指针等。

3.逻辑块的调用过程及内存分配 CPU提供块堆栈(B堆栈)来存储与处理被中断块的有关信息。

用户程序使用的堆栈 局部数据堆栈简称L堆栈,是CPU中单独的存储器区,可用来存储逻辑块的局部变量(包括OB的起始信息)、调用功能(FC)时要传递的实际参数、梯形图程序中的中间逻辑结果等。可以按位、字节、字和双字来存取。 块堆栈简称B堆栈,是CPU系统内存中的一部分,用来存储被中断的块的类型、编号、优先级和返回地址;中断时打开的共享数据块和背景数据块的编号;临时变量的指针(被中断块的L堆栈地址)。 中断堆栈简称I堆栈,用来存储当前累加器和地址寄存器的内容、数据块寄存器DB和DI的内容、局域数据的指针、状态字、MCR(主控继电器)寄存器和B堆栈的指针。

调用功能块(FB)时的堆栈操作 当调用功能块(FB)时,会有以下事件发生: ①调用块的地址和返回位置存储在块堆栈中,调用块的临时变量压入L堆栈;②数据块DB寄存器内容与DI寄存器内容交换;③新的数据块地址装入DI寄存器;④被调用块的实参装入DB和L堆栈上部;⑤当功能块FB结束时,先前块的现场信息从块堆栈中弹 出,临时变量弹出L堆栈;⑥DB和DI寄存器内容交换。 当调用功能块(FB)时,STEP 7并不一定要求给FB形参赋予实参,除非参数是复式数据类型的I/O形参或参数类型形参。如果没有给FB的形参赋予实参,则功能块(FB)就调用背景数据块内的数值,该数值是在功能块(FB)的变量声明表或背景数据块内 为形参所设置初始数值。

调用功能(FC)时的堆栈操作 当调用功能(FC)时会有以下事件发生: 功能(FC)实参的指针存到调用块的L堆栈;调用块的地址和返回位置存储在块堆栈,调用块的局部数据压入L堆栈;功能(FC)存储临时变量的L堆栈区被推入L堆栈上部;当被调用功能(FC)结束时,先前块的信息存储在块堆栈 中,临时变量弹出L堆栈。 因为功能(FC)不用背景数据块,不能分配初始数值给 功能(FC)的局部数据,所以必须给功能(FC)提供实参。

调用功能(FC)时的堆栈操作 以功能(FC)调用为例,L堆栈操 作示意如图所示。

§3.3.2 逻辑块(FC和FB)的编程 对逻辑块编程时必须编辑下列三个部分: 变量声明:分别定义形参、静态变量和临时变量(FC块中不包括静态变量);确定各变量的声明类型(Decl.)、变量名(Name)和数据类型(Data Type),还要为变量设置初始值(Initial Value)。如果需要还可为变量注释(Comment)。在增量编程模式下,STEP 7将自动产生局部 变量地址(Address)。 代码段:对将要由PLC进行处理的块代码进行编程。 块属性:块属性包含了其它附加的信息,例如由系统输入的时间标志或路径。此外,也可输入相关详细资料。

1.临时变量的定义和使用

2.查看局部数据堆栈的占用

3.查看块所需字节数

4.定义形式参数

5.编写控制程序 编写逻辑块(FC和FB)程序时,可以用以下两种方式使用局部变量: ①使用变量名,此时变量名前加前缀“#”,以区别于在符号表中定义的符号地址。增量方式下,前缀会自动产生。 ②直接使用局部变量的地址,这种方式只对背景数据块和L堆栈有效。 在调用FB块时,要说明其背景数据块。背景数据块应在调用前生成,其顺序格式与变量声明表必须保持一致。

§3.4 编辑并调用无参功能(FC) ——分部程序设计 所谓无参功能(FC),是指在编辑功能(FC)时,在局部变量声明表不进行形式参数的定义,在功能(FC)中直接使用绝对地址完成控制程序的编程。这种方式一般应用于分部式结构的程序编写,每个功能(FC)实现整个控制任务的一部分,不重复调用。 §3.4.1 编辑无参功能(FC) §3.4.2 在OB1中调用无参功能(FC)

【例3-4-1】 搅拌控制系统程序设计——使用开关量。

控制说明 如图所示为一搅拌控制系统,由3个开关量液位传感器,分别检测液位的高、中和低。现要求对A、B两种液体原 料按等比例混合,请编写控制程序。 要求:按起动按钮后系统自动运行,首先打开进料泵1,开始加入液料A→中液位传感器动作后,则关闭进料泵1,打开进料泵2,开始加入液料B→高液位传感器动作后,关闭进料泵2,起动搅拌器→搅拌10s后,关闭搅拌器,开启放料泵→当低液位传感器动作后,延时5s后关闭放料泵。按 停止按钮,系统应立即停止运行。

§3.4.1 编辑无参功能(FC) 1.创建S7项目 按照第3章所介绍的方法,创建S7项目,并命名为“无参FC”,项目包含组织块OB1和OB100。 2.硬件配置 在 “无参FC”项目内打开“SIMATIC 300 Station”文件夹,打开硬件配置窗口,并完成硬件配置。

3.编辑符号表

4.规划程序结构

5.编辑功能(FC ) 在“无参FC”项目内选择“Blocks”文件夹,然后反复执行菜单命令【Insert】→【S7 Block】→【Function】,分别创建4个功能(FC):FC1、FC2、FC3和FC4。由于在符号表内已经为FC1~FC4定义了符号名,因此在创建FC的属性对话 框内系统会自动添加符号名。 FC1控制程序 FC2控制程序 FC3控制程序 FC4控制程序 OB100控制程序

FC1的控制程序 FC2的控制程序

FC3的控制程序

FC4的控制程序

OB100的控制程序

§3.4.2 在OB1中调用无参功能(FC)

OB1的控制程序

§3.5 编辑并调用有参功能(FC) ——结构化程序设计 所谓有参功能(FC),是指编辑功能(FC)时,在局部变量声明表内定义了形式参数,在功能(FC)中使用了虚拟的符号地址完成控制程序的编程,以便在其他块中能重复调 用有参功能(FC)。这种方式一般应用于结构化程序编写。 §3.5.1 编辑有参功能(FC) §3.5.2 在OB1中调用有参功能(FC)

【例3-5-1】 多级分频器控制程序设计。 本例拟在功能FC1中编写二分频器控制程序,然后在OB1中通过调用FC1实现多级分频器的功能。多级分频器的时序关系如图所示。其中I0.0为多级分频器的脉冲输入端;Q4.0~Q4.3分别为2、4、8、16分频的脉冲输出端;Q4.4~ Q4.7分别为2、4、8、16分频指示灯驱动输出端。

§3.5.1 编辑有参功能(FC) 创建多级分频器的S7项目 硬件配置 编写符号表 规划程序结构 创建有参功能FC1

1.创建多级分频器的S7项目 使用菜单【File】→【“New Project”Wizard】创建多 级分频器的S7项目,并命名为“有参FC”。 2.硬件配置 打开“SIMATIC 300 Station”文件夹,双击硬件配置图 标打开硬件配置窗口,并按图所示完成硬件配置。

3. 编写符号表

4. 规划程序结构

5. 创建有参FC1 选择“有参FC”项目的“Blocks”文件夹,然后执行菜单命令【Insert】→【S7 Block】→【Function】,在块文件夹 内创建一个功能,并命名为“FC1”。 编辑FC1的变量声明表 在FC1的变量声明表内,声明4个参数,见下表。

编辑FC1的控制程序 二分频器的时序如图所示。分析二分频器的时序图可以看到,输入信号每出现一个上升沿,输出便改变一次状 态,据此可采用上跳沿检测指令实现。 如果输入信号S_IN出现上升沿,则对S_OUT取反,然后将S_OUT的信号状态送LED显示;否则,程序直接跳转到LP1,将S_OUT的信号状态送LED显示。

FC1的控制程序

§3.5.2 在OB1中调用有参功能(FC) 使用符号地址 使用绝对地址

§3.6 编辑无静参的功能块(FB ) 功能块(FB)在程序的体系结构中位于组织块之下。它包含程序的一部分,这部分程序在OB1中可以多次调用。功能块的所有形参和静态数据都存储在一个单独的、被指定给该功能块的数据块(DB)中,该数据块被称为背景数据块。当调用FB时,该背景数据块会自动打开,实际参数的值被存储在背景数据块中;当块退出时,背景数据块中的数据仍然 保持。 §3.6.1 编辑无静态参数的功能块(FB) §3.6.2 在OB1中调用无静态参数的功能块(FB)

【例3-6-1】 水箱水位控制系统程序设计。

【例3-6-1】 系统有3个贮水箱,每个水箱有2个液位传感器,UH1,UH2,UH3为高液位传感器,“1”有效;UL1,UL2,UL3为低液位传感器,“0”有效。Y1、Y3、Y5分别为3个贮水水箱进水电磁阀;Y2、Y4、Y6分别为3个贮水水箱放水电磁阀。SB1、SB3、SB5分别为3个贮水水箱放水电磁阀手动开启按钮;SB2、SB4、SB6分别为3个贮水箱放水电磁阀手动关闭按钮。 控制要求:SB1、SB3、SB5在PLC外部操作设定,通过人为的方式,按随机的顺序将水箱放空。只要检测到水箱“空”的信号,系统就自动地向水箱注水,直到检测到水箱“满”信号为止。水箱注水的顺序要与水箱放空的顺序相同,每次只 能对一个水箱进行注水操作。

§3.6.1 编辑无静态参数的功能块(FB) 创建S7项目 硬件配置 编写符号表 规划程序结构 编辑功能块(FB) 建立背景数据块(DI) 编辑启动组织块OB100

1.创建S7项目 使用菜单【File】→【“New Project”Wizard】创建水箱水位控制系统的S7项目,并命名为“无静参FB”。项目包含 组织块OB1和OB100。 2.硬件配置 在“无静参FB”项目内打开“SIMATIC 300 Station”文件夹,打开硬件配置窗口,并按图所示完成硬件配置。

3.编写符号表

4.规划程序结构

5.编辑功能(FB1) 在“无静参FB”项目内选择“Blocks”文件夹,执行菜单命令【Insert】→【S7 Block】→【Function Block】,创建功能块FB1。由于在符号表内已经为FB1定义了符号名,因此 在FB1的属性对话框内系统会自动添加符号名“水箱控制”。 定义局部变量声明表 编写程序代码

定义局部变量声明表 与功能(FC)不同,在功能块(FB)参数表内还有扩展地址(Exclusion address)和结束地址(Termination address)选项。

编写程序代码

6.建立背景数据块DB1、DB2、DB3

7.编辑启动组织块OB100

§3.6.2 在OB1中调用无静态参数的功能块(FB)

OB1控制程序

【例3-6-2】 搅拌控制系统程序设计——使用模拟量。

上图所示为一搅拌控制系统,由一个模拟量液位传感器-变送器来检测液位的高低,并进行液位显示。现要求对A、B两种液体原料按等比例混合,请编写控制程序,控制要求如下: 按起动按钮后系统自动运行,首先打开进料泵1,开始加入液料A→当液位达到50%后,则关闭进料泵1,打开进料泵2,开始加入液料B→当液位达到100%后,则关闭进料泵2,起动搅拌器→搅拌10s后,关闭搅拌器,开启放料泵→当液料放空后,延时5s后关闭放料泵。按停止按钮,系统应立即停止运行。

1.创建S7项目 使用菜单【File】→【“New Project”Wizard】创建搅 拌控制系统的S7项目,并命名为“FC与FB”。 2.硬件配置 在“FC与FB”项目内打开“SIMATIC 300 Station”文件 夹,打开硬件配置窗口,并按图下完成硬件配置。

修改模块的模拟量输入通道和输出通道的起始地址均为256。

3.编辑符号表

4.规划程序结构 OB1为主循环组织块;OB100为启动组织块;FC1实现搅拌控制;FC2实现放料控制;FB1通过调用DB1和DB2实现液料A和液料B的进料控制;DB1和DB2为液料A和液料B进料控制的背景数据块,在调用FB1时为FB1提供实际参数,并保存过程结 果。

5.创建无参功能(FC1、FC2)(1/2) FC1控制程序

5.创建无参功能(FC1、FC2)(2/2) FC2控制程序

6.创建无静态参数的功能块(FB1 ) 定义FB1的局部变量声明表 编写FB1控制程序

7.建立背景数据块(DB1、DB2) 在“FC与FB”项目内选择“Blocks”文件夹,执行菜单命令【Insert】→【S7 Block】→【Data Block】,创建与FB1相关联的背景数据块DB1和DB2。STEP 7自动为DB1和DB2构建 了与FB1完全相同的数据结构,如下图所示。

8.在OB1中调用FC1、FC2和FB1 OB1的控制程序

OB1的控制程序

OB1的控制程序

9.编写启动组织块OB100的控制程序

§3.7 编辑并调用有静态参数的功能块 在编辑功能块(FB)时,如果程序中需要特定数据的参数,可以考虑将该特定数据定义为静态参数,并在FB的声明表内STAT处声明。 下面以交通信号灯控制系统的设计为例,介绍如何编辑和调用有静态参数的功能块。 §3.7.1 编辑有静态参数的功能块(FB) §3.7.2 在OB1中调用有静态参数的功能块(FB)

【例3-7-1】 交通信号灯控制系统程序设计。

上图所示为双干道交通信号灯设置示意图。信号灯的动作受开关总体控制,按一下起动按钮,信号灯系统开始工作,并周而复始地循环动作;按一下停止按钮,所有信号灯都熄灭。信号灯控制的具体要求见下表,试编写信号灯控制程序。

根据十字路口交通信号灯的控制要求,可画出信号灯的控制时序图。

§3.7.1 编辑有静态参数的功能块(FB) 创建S7项目 硬件配置 编写符号表 规划程序结构 编辑功能块(FB) 建立背景数据块(DI) 编辑启动组织块OB100

1.创建S7项目 使用菜单【File】→【“New Project”Wizard】创建交通信号灯控制系统的S7项目,并命名为“有静参FB”。项目包 含组织块OB1和OB100。 2.硬件配置 在“有静参FB”项目内打开“SIMATIC 300 Station”文件夹,打开硬件配置窗口,并按下图所示完成硬件配置。

3.编写符号表

4.规划程序结构 OB1为主循环组织块、OB100初始化程序、FB1为单向红绿灯控制程序、DB1为东西数据块、DB2为南北数据块。

5.编辑功能块(FB) 定义局部变量声明表

编写程序代码

6. 建立背景数据块(DI) 由于在创建DB1和DB2之前,已经完成了FB1的变量声明,建立了相应的数据结构,所以在创建与FB1相关联的DB1和DB2时,STEP 7自动完成了数据块的数据结构。

7.编辑启动组织块OB100

§3.7.2 在OB1中调用有静态参数的功能块(FB)

§3.8 使用多重背景——结构化程序设计 使用多重背景可以有效地减少数据块的数量,其编程思想是创建一个比FB1级别更高的功能块,如FB10,将未作任何修改的FB1作为一个“局部背景”,在FB10中调用。对于FB1 的每一个调用,都将数据存储在FB10的背景数据块DB10中。 §3.8.1 创建多重背景的S7项目 §3.8.2 编辑功能(FC) §3.8.3 编辑共享数据块 §3.8.4 编辑功能块(FB) §3.8.5 生成多重背景数据块DB10 §3.8.6 在OB1中调用功能(FC)及上层功能块(FB)

§3.8.1 创建多重背景的S7项目 【例3-8-1】 发动机组控制系统设计——使用多重背景。 【例3-8-1】 发动机组控制系统设计——使用多重背景。 设某发动机组由1台汽油发动机和1台柴油发动机组成,现要求用PLC控制发动机组,使各台发动机的转速稳定在设定的速度上,并控制散热风扇的起动和延时关闭。每台发动 机均设置一个起动按钮和一个停止按钮。 创建S7项目 硬件配置 编写符号表 规划程序结构

1. 创建S7项目 使用菜单【File】→【“New Project”Wizard】创建发动机组控制系统的S7项目,并命名为“多重背景”。CPU选择CPU 315-2DP,项目包含组织块OB1。 2. 硬件配置 在“多重背景”项目内打开“SIMATIC 300 Station”文件夹,打开硬件配置窗口,并按下图所示完成硬件配置。

3.编辑符号表

4.规划程序结构 FB10为上层功能块,它把FB1作为其“局部实例”,通过二次调用本地实例,分别实现对汽油机和柴油机的控制。这种调用不占用数据块DB1和DB2,它将每次调用(对于每个调用实例)的数据存储到体系的上层功能块FB10的背景数据块DB10 中。

§3.8.2 编辑功能(FC) 1.定义局部变量声明表 FC1用来实现发动机(汽油机或柴油机)的风扇控制,按照控制要求,当发动机起动时,风扇应立即起动;当发动机停机后,风扇应延时关闭。因此FC1需要一个发动机起动 信号、一个风扇控制信号和一个延时定时器。

2.编辑FC1的控制程序 FC1所实现的控制要求:发动机起动时风扇起动,当发动机再次关闭后,风扇继续运行4s,然后停止。定时器采用 断电延时定时器,控制程序如下图所示。

§3.8.3 编辑共享数据块 共享数据块DB3可为FB10保存发动机(汽油机和柴油机)的实际转速,当发动机转速都达到预设速度时,还可以 §3.8.3 编辑共享数据块 共享数据块DB3可为FB10保存发动机(汽油机和柴油机)的实际转速,当发动机转速都达到预设速度时,还可以 保存该状态的标志数据。

§3.8.4 编辑功能块(FB) 在该系统的程序结构内,有2个功能块:FB1和FB10。FB1为底层功能块,所以应首先创建并编辑;FB10为上层功 能块,可以调用FB1。 编辑底层功能块FB1 编辑上层功能块FB10

1.编辑底层功能块FB1 在“多重背景”项目内创建FB1,符号名“Engine”。 定义功能块FB1的变量声明表

编写功能块FB1的控制程序 FB1主要实现发动机的起停控制及速度监视功能,其控制程序如下图所示。

2. 编辑上层功能块FB10 在“多重背景”项目内创建FB10,符号名“Engines”。在FB10的属性对话框内激活“Multi-instance capable”选项。

定义功能块FB10的变量声明表 要将FB1作为FB10的一个“局部背景”调用,需要在FB10的变量声明表中为FB1的调用声明不同名称的静态变量,数据类型为FB1(或使用符号名“Engine”)。

编写功能块FB10的控制程序 在变量声明表内完成FB1类型的局部实例:“Petrol_Engine”和“Diesel_Engine”的声明以后,在程序元素目录的“Multiple Instances”目录中就会出现所声明的多重实例,如图所示。接 下来可在FB10的代码区,调用FB1的“局部 实例”。

编写功能块FB10的控制程序 调用FB1局部实例时,不再使用独立的背景数据块,FB1的实例数据位于FB10的实例数据块DB10中。发动机的实际转速可直接从共享数据块中得到,如DB3.DBW2 (符号地址为, S_Data".PE_Actual_Speed)。

§3.8.5 生成多重背景数据块DB10 在“多重背景”项目内创建一个与FB10相关联的多重背 景数据块DB10,符号名“Engine_Data”。

§3.8.6 在OB1中调用功能(FC)及上层功能块(FB)

练习1.1: 使用临时变量 替换为临时变量 目的 了解如何使用临时变量。 QW6 目的 了解如何使用临时变量。 要求 在S7 程序“Fill”的FC 19块中,用临时变量代替标志字来暂存数据。 在上图LAD或 FBD形式的程序中, 标志字被用来连接除法器的输出和数制转换器的输入。 如果你用STL来写程序则不需要标志字,直接插入临时变量来存储中间结果。 步骤 • 打开S7 程序“FILL”中的FC 19 。 • 在变量声明表中定义一个临时变量 “Packages”,其类型为“Integer”。 • 在程序里将包装的数量保存在临时变量“packages”中。 • 将修改后的程序下装并调试。

示例:故障信息指示 Disturbance Acknowledge Report Memory LED 要求 Edge Mem. Bit Disturb. Input Acknowl. Flash Freq. Display RS & = >=1 Q S R P Report Memory 解决方案 控制要求 故障信号disturbance 出现时,在操作面板上用一个LED来指示。 故障出现后(I1.3=1) ,LED (Q4.3)以2Hz的频率闪烁。用应答输入I 1.2来检测故障,如果故障已排除,则 LED停止闪烁;如果故障仍然存在,则 LED转换为常亮状态直到故障被排除。 程序说明 即使故障信号出现的时间很短也应该记录,所以采用置位指令来将该信号锁存在故障标志位M40.0 中。 在置位指令之前,对故障信号做RLO边沿检测处理,这样在故障应答信号输入后可立即复位故障标志位。 如果故障标志被置位(且该信息未被应答),则利用上面的AND逻辑指令使LED闪烁。 AND逻辑指令的一个输入端为时钟信号标志位M10.3, 另一输入端为故障标志位,用来决定时钟信号是否输出。 下面的AND逻辑指令的作用是,当应答过后故障仍然存在时,令LED常亮。

练习1.2: 生成一个分配了参数的FC块 A #Acknowledge R #Report_memory A #Disturb... : 无参数的块 分配了参数的块 FC 20 A I 1.2 R M 40.0 A I 1.3 FP M 40.1 S M 40.0 A M 40.0 A M 10.3 O AN M 40.0 = Q 5.3 A #Acknowledge R #Report_memory A #Disturb... : 2. 要求 将故障显示程序用分配了参数的块来编写。变量声明表和程序的开头部分已在幻灯片中给出。 步骤 • 在S7 程序“My Program”中插入FC 20 • 在FC 20 中编写程序 • 保存FC 20

练习1.3: 调用一个分配了参数的FC块 FC 20 I 1.3 Disturb_input I 1.2 Acknowledge Display Q 5.3 第一次调用FC20时 的参数分配 M 10.3 Flash_freq M 40.0 Edge_mem_bit M 40.1 Report_memory FC 20 I 1.4 Disturb_input 要求 在OB 1中用不同的参数两次调用FC 20,并测试该程序。 步骤 • 在S7程序“My Program”的OB 1中插入两个程序段 • 按幻灯片所示,两次调用FC 20 • 下装FC20和OB 1 • 调试程序 说明: 在硬件组态时,将MB10定义为时钟存储字节。然后下装硬件组态,使M10.3 闪烁。 I 1.2 第二次调用FC20时 的参数分配 Acknowledge Display Q 5.4 M 10.3 Flash_freq M 40.2 Edge_mem_bit M 40.3 Report_memory

练习1.4: 编写一个FB块 A #Acknowledge R #Report memory A #Disturb. ... : 1. 步骤 • 在S7程序“My Program”中插入 FB 20 • 在 FB 20 中编写程序 • 保存 FB 20 FB 20 中的部分程序 A #Acknowledge R #Report memory A #Disturb. ... : 2.

练习1.5: 调用FB并调试 步骤 在S7程序“My Program”中: • 删除所有调用FC20的指令。 •下装 FB20, DB20, DB21和OB1 •调试程序 FC -> FB 在本练习中,尽管FB20与前面完成的FC20具有相同的内容,但由于程序比较简单,我们仍然重新编写FB20。 如果一个包含复杂程序的 FC 块要转化为FB块,采取如下方法更为简便: 第一种方法: • 插入一个新的 FB • 将原FC块中的声明表拷入FB中并做修正 • 将程序段从FC拷入FB • 保存FB 第二种方法: • 从FC块生成源程序 • 在源程序中做适当修改 • 从源程序生成FB块(见第二章)

小节 FC OB1 FB SFC 操作系统 SFB OBs 其它 目录 页码 IEC 1131 标准........................................................................................................................................ 2-3 SIMATIC 管理器下的项目结构................................................................................................................. 4 STEP7的块 .............................................................................................................................................. 5 块的组成部分............................................................................................................................................ 6 块的结构 .............................................................................................................................................. 7 结构化编程 .............................................................................................................................................. 8 利用局部数据进行控制............................................................................................................................. 9 局部变量 .............................................................................................................................................. 10 临时变量 .............................................................................................................................................. 11 局部数据堆栈的大小 .............…............................................................................................................. 12 块所需要的局部数据区的长度 ............................................................................................................ 13 程序所占用的局部数据区的总长度 ................................................................................................... 14 练习1.1: 使用临时变量.................................………….......................................................................... 15 示例:故障信息指示.............................................................................................................................. 16 可以分配参数的块 ................................................................................................................................. 17 定义形式参数 ......................................................................................................................................... 18 编辑一个可分配参数的块 ...................................................................................................................... 19 调用一个分配了参数的块 .................................................................................................................... 20 在块调用时使用EN/ENO参数 .....................................……….............................................................. 21 练习1.2-3: FC块................................................................................................................................. 22-23 FB块................................................... ................................................................................................... 24 用FB实现的故障信息显示 ............................…….................................................................................. 25 生成背景数据块 ......................................…............................................................................................ 26 多重背景模型 ........................................................................................................................................ 27 练习1.4-5: FB块............................................................................................................................... 28-29 插入/删除块的参数可能遇到的问题 ........................……………............................................................ 30 调用被修改过的块时应做的更正 ..............................……...................................................................... 31 练习1.6-7:风扇监控功能的扩展........................................................................................................ 32-33 练习1.8: 识别变量的类型..................................................................................................................…34 总结: 块的调用 .............................…………………................................................................................ 35

SIMATIC 管理器下的项目结构 项目 硬件站 S7-300 可编程的 CPU S7/M7 程序(分配给硬件的) STL 用户程序源文件 用 S7 块组成的用户程序, OBs, FBs, FCs, DBs, 等 用户程序 STL 源文件 项目 项目的图标位于最上层。 站 能够建立S7-300和S7-400的站。通过硬件组态工具可以对硬 件进行模块配置和参数设定。 S7/M7程序 相反, S7/M7程序(S7/M7目标)包含着适于各种应用和编程方法 的其它目标程序。 网络 网络图标包含着显示网络的具体信息。 S7 程序 S7/M7 程序(未分配给硬件的) 用户程序 源文件 图 符号表 S7块 OBs, FBs, FCs, 等. STL, SCL, GRAPH, HiGraph, 源文件 CFC 图 SFC 图

STEP7的块 块 块是用户程序中真正有用的部分。它们在功能,使用方法和结 构上各不相同。块表示了程序的执行代码。 块 块是用户程序中真正有用的部分。它们在功能,使用方法和结 构上各不相同。块表示了程序的执行代码。 STEP 7环境支持下列的代码: 逻辑块: OB - 组织块 FC - 功能 FB - 功能块 SFC - 系统功能 SFB - 系统功能块 数据块: DB - 数据块 SDB - 系统数据块 用户自定义的数据类型: UDT VAT VAT(用于监视/修改变量的变量表)不是块,但是存储在用户程 序中。

块的组成部分 变量声明表 代码部分 在你打开一个块进行编辑或查看时,程序编辑器中将出现两个窗口。一个是属于块的变量声明表,在另一个窗口的则为生成实际程序的指令部分。 变量声明表 这个表是用来说明块的局部变量的名字和大小。这些变量是与由系统预定的或由其它模块传递来的值有关的变量。经声明后的变量分配局部内存给逻辑块。同时也为你指定给功能块的每一个背景数据块提供数据结构。 局部数据 局部符号在块的声明部分中定义。你可以在不同的块中重复使用同一个符号,因为它们在每一个块中仅有效一次。局部符号能被定义为参数,块变量和跳转标志。且不需要符号表。 指令部分 在指令部分,你可以建立你的逻辑序列。为做到这一点,利用梯形图和语句表,你可以形成网络或回路。在你输入一条指令并指定一个地址后,程序编译器进行一次语法校验并将不正确的输入用红色的斜体显示出来。

块的结构 块的首部 (36字节) 块体 变量声明部分 和 程序部分 或 数据 压缩的接口描述 块的首部 一个块的首部包含下列数据: 块的首部 一个块的首部包含下列数据: - 同步采样 - 属性(用户功能块或标准功能块) - 生成语言/块类型 - 块的标号 - 用字节表示的总的块长度 - 口令(预留) - 保护级别(预留) - 时间标记(产生的时刻和上一次修改的时间) - 局部数据的数量和写保护 - 当前版本号等 块体 块体由声明部分和代码块中的程序部分构成,或由数据块中的数据构成。 调用接口和所有的块变量都在声明部分中定义。程序部分包含真正的程序代码。(MC7指令) 压缩接口说明 压缩接口说明包括在说明部分中定义的参数:输入参数,输出参数,输入/输出参数,局部块参数以及临时块参数。对于数据块,接口声明包括数据类型和格式 ( 例如,整型,实型等)。这就使得在任何时候都能正确地以所要求的数据类型进行显示。 压缩的接口描述

局部变量 局部变量 / 数据 (只在一个块中有效) 全局变量/数据 (在全部程序中有效) • PII / PIQ • I/ O • M / T / C • DB areas 临时变量 • 当相关块执行完毕后被清除 • 临时存储在 L stack中 • 可在下列块中使用 OBs / FCs / FBs 静态变量 •当相关块执行完毕后仍然 保留 • 永久存储在DBs中 • 只能在FBs中使用 绝对地址 访问方式 符号地址 概述 到目前为止, 我们使用实际参数来访问瓶子灌装生产线的输入和输出,块不能被分配参数,这样你编辑的程序只能用于特定的设备。 但是,在很多情况下一个大的程序要多次调用某一个功能,这时应建立通用的可分配参数的块(FC, FB)。这些块的输入输出使用形式参数,当调用时赋给实际参数。 上述两种块的区别在于块调用时的是否有参数的传递,其内部功能没有变化。 局部变量 到目前为止,我们使用全局变量(标志位和数据块)来存储数据,例如生产数据。在这章中我们将学习如何利用局部变量来存储数据。 临时变量 临时变量是一种在块执行时,用来暂时存储数据的变量。他们可以被用于所有的块中。 静态变量 如果有一些变量在块调用结束后还需保持原值,他们必须被存储为静态变量,静态变量只能被用于FB块中。

定义形式参数 形式参数 参数类型 定义 使用方法 图形显示 FC 20 的变量声明表 输入参数 in 只能读 在块的左侧 输出参数 out 只能写 在块的右侧 输入/输出 参数 In_out 可读/可写 在块的左侧 FC 20 的变量声明表 形式参数 对于可传递参数的块,在编写程序之前,必须在变量声明表中定义形式参数。 参数的类型 在上面的表中,列举了三种类型的参数及定义方法。 注意,当需对某个参数做读、写访问时,必须将它定义为in/out 型参数。 以 FC20为例 幻灯片下面的表为该块的变量声明表。因为对故障信息标志位既要读(扫描)又要写 (set/reset),所以它被定义为in/out型参数。 说明 在最初的声明表中,每一种参数只占一行。如果需要定义多个参数,可以用“Return”键来增加新的参数定义行。另一种方法是:选中一个定义行后,用菜单功能 Insert -> Declaration Row -> Before Selection / After Selection 来插入一个新的参数定义行。 注意! 当块已被调用后,再插入或删除定义行,必须重新编写调用指令。

符号名 如果在编程一个块时使用符号名,编辑器将在该块的变量声明表查找该符号名。 如果该符号名存在,编辑器将把它当作局部变量,并在符号名前加“#”号。 如果它不属于局部变量,则编辑器将在全局符号表中搜索。如果找到该符号名,编辑器将把它当作全局变量,并在符号名上加引号。 如果在全局变量表和变量声明表中使用了相同的符号名,编辑器将始终把它当作局部变量。然而,如果输入该符号名时加了引号,则可成为全局变量。 说明   形式参数名称用大、小写字母没有区别。编程器可自动地在其前“#”号,以表示该参数为局部变量,是在块的变量声明表中定义当采用LAD / FBD 语言编写程序时,参数的名称在一行中可能显示不全。这取决于程序编辑器的习惯设置 (Options -> Customize -> "LAD/FBD" tab -> Width of address field)。

调用一个分配了参数的块 绝对的 寻址方式 符号的 符号 Network 3: First Call .... Disturb_input Acknowledge Flash_freq Report_memory Edge_mem_bit Display ENO EN FC20 “End left” “Position error” 绝对的 “Acknow.button” M10.3 M40.0 寻址方式 M40.1 Network 4: Second Call Q4.1 EN 符号的 FC20 “End right” Disturb_input Display Q5.4 符号表 全局符号 “Acknow.button” Acknowledge 调用 在 LAD/FBD方式下, 可以从“Program Elements” 浏览器中选择要调用的块。块的参数端上显示为问号 (??.?) ,应在此处输入实际参数。 说明 调用分配了参数的 FC 块时,必须输入所有的参数 ( EN和ENO除外)。 M10.3 Flash_freq M40.2 Edge_mem_bit ENO M40.3 Report_memory 符号 局部符号 -->形式参数

在块调用时使用EN/ENO参数 LAD/FBD STL FC 1 无条件调用 ?? . ? EN ENO CALL FC 1 NOP 0 A I 0.1 JNB _001 CALL FC 1 _001: A BR = Q 5.0 FC 1 EN ENO I 0.1 = Q 5.0 条件调用 标准FC 标准FC 执行时将遵循下列规则: • 如果EN=0, 块不被执行且ENO=0。 • 如果EN=1, 块被执行,执行过程中如果不出现错误则ENO=1,如果出现错误 ENO=0。 用户FC 当用LAD/FBD调用块时,EN和ENO参数也被加在块上,这样可根据RLO来调用该块。 在STL 中,没有EN/ENO参数。可以用跳转指令来仿效它们。 无论采用何种语言,必须编写程序来检查错误。 互相连接 在LAD/FBD中,几个功能方框可通过EN / ENO参数串联在一起使用 例子 ?? . ? FC 1 EN ENO FC 2 FC 3 =

总结: 块的调用 ( CALL ) FC FB • CALL FC2 Par1: ... Par2: ... Par3: ... 语言 有参数 • CALL FC2 Par1: ... Par2: ... Par3: ... FC2 EN ENO Par3 Par1 Par2 有参数,有背景数据块 • CALL FB2, DB3 Par1: ... Par2: ... Par3: ... FB2 EN ENO Par3 Par1 Par2 DB3 无参数 无参数,无背景数据块 • CALL FC1 • UC FC1 • CC FC1 • UC FB1 • CC FB1 STL FC1 ( CALL ) FC1 EN ENO LAD 调用 “CALL”指令用于调用程序块(FC, FB, SFC, SFB), 而与RLO或其他条件无关。 如果用“CALL”来调用FB或SFB,则必须指定背景数据块。 可以使用块的绝对或符号名,例如:“CALL FB2, DB2”或“CALL valve, level”。“CALL”操作保存返回地址,解除对MCR的依赖,并生成块调用所需的局部数据区。 UC “UC”为无参数分配的无条件块调用指令(针对FC或FB),其它与“CALL” 一致。 CC “CC”指令在RLO=1.时调用 FC或FB,其它与“CALL”一致。 参数 在声明表中列出的为“形式参数”,在调用时分配给块的地址或数值为“实际参数”。 静态和临时变量不出现在调用指令中。 FC1 CALL FC1 EN ENO FBD

【项目实施】 项目实施计划表 确定模块的输入输出点 编写程序 仿真程序 将程序下载到模块中调试系统 问题及解决方案 完成项目自评表 制作PPT准备答辩