Presentation is loading. Please wait.

Presentation is loading. Please wait.

数据块中的数据存储 目录 页 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型

Similar presentations


Presentation on theme: "数据块中的数据存储 目录 页 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型"— Presentation transcript:

1 数据块中的数据存储 目录 页 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型 复杂数据类型 ……… 结构举例 矩阵举例 建立新数据块 输入、保存、下载和监视数据块 寻址数据单元 … 访问数据单元 打开数据块的合法性 …… 用户定义数据类型 (UDT) … 输入 UDT 块 根据数据类型建立数据块 举例:UDT中矩阵 举例:瓶装线编程 - 数据存储 ……

2 . 数据存储区 位存储器 DBz PIQ DBy PII DBx I/O 区 L 堆栈 数据块
概述 除逻辑块外,用户程序还包括数据,这些数据存储过程状态和信号的信息,所存储的数据在用户程序中进行处理。 数据以用户程序的变量形式存储,它们是唯一的: • 存储位置 (地址:P,PII,PIQ,位存储器,L 堆栈,DB) • 数据类型 (基本或复杂数据类型,参数类型) 根据访问方式,它们的区别是: • 全局变量:在全局符号表或全局数据块中声明。 • 局部变量:在OB、FC和FB的变量声明表中声明。 当块被执行时,变量永久地存储在过程映象区、位存储器区或数据块,或者它们动态地建立在局部堆栈中。 局部数据堆栈 局部数据堆栈 (L 堆栈) 用来存储: • 逻辑块的暂时变量,包括OB 的起始信息 • 调用功能时要传递的实际参数 • 梯形图程序中的中间逻辑结果 这个内容在“功能和功能块”一章中讨论。 数据块 数据块用来存储用户程序的逻辑块的值。与暂时数据不同,当逻辑块执行结束时或数据块关闭时,数据块中的数据不被覆盖。

3 数据块 (DB) 所有块可以访问 功能 FC10 OB1 全局数据 DB20 功能 FC20 FB1的背景DB 功能块 背景数据 FB1
概述 数据块用来保存用户数据。和逻辑块一样,数据块占用用户存储器的空间。数据块包含用户程序中使用的变量数据(如:数值) 。 用户程序以位、字节、字或双字操作访问数据块中的数据,可以使用符号或绝对地址。 用法 有不同方法使用数据块,数据块的区别是: • 全局数据块:在用户程序的所有逻辑块都可以使用全局数据块。 • 背景数据块: 它们总是分配给特定的FB,仅在所分配的FB中使用背景数据块 在“功能和功能块”一章中讨论背景数据块。 建立DB 利用程序编辑器或用已经生成的“用户定义数据类型UDT”建立全局数据块。 当调用FB时,产生背景数据块。 寄存器 CPU有两个数据块寄存器:DB 和 DI 寄存器。这样,可以同时打开两个数据块。在高级编程课程中可以得到更多的信息。

4 STEP 7数据类型概述 • 位数据类型 (BOOL, BYTE, WORD, DWORD, CHAR) 基本数据
• 数学数据类型 (INT, DINT, REAL) • 定时器类型 (S5TIME, TIME, DATE, TIME_OF_DAY) 基本数据 类型 (到32 位) • 时间 (DATE_AND_TIME) • 矩阵 (ARRAY) • 结构 (STRUCT) • 字符串 (STRING) 复杂数据 类型 (长于32位) 概述 数据类型决定数据的属性,例如:要表示元素的相关地址和值的允许范围。 数据类型也决定了采用的操作数。 基本数据类型 基本数据类型根据IEC1131-3来定义,数据类型决定了需要的存储器空间。如: 字型数据类型在用户存储器中占用16位。 基本数据类型不超过32 位,可以装入S7处理器的累加器中,利用STEP 7基本指令处理。 复杂数据类型 复杂数据类型只能结合全局数据块的变量声明使用。用装入指令不能把复杂数据类型完全装入累加器。利用库中的标准块(“IEC” S7 程序) 处理复杂数据类型。 用户定义数据类型 用户定义数据类型用于数据块或在变量声明表中作为数据类型使用。 利用数据块编辑器建立UDT。 UDT的结构包括基本和/或复杂数据类型。 数据类型 UDT (用户定义数据类型) 用户定义数据类型 (长于 32 位)

5 STEP 7基本数据类型 关键字 长度 (位) 该类型的常数举例 BOOL 1 True 或 False (1 或0)
BYTE 8 B#16#A9 WORD 16 W#16#12AF DWORD 32 DW#16#ADAC1EF5 CHAR 8 ' w ' S5TIME 16 S5T#5s_200ms INT DINT 32 L#65539 REAL 或 34.5E-12 TIME 32 T#2D_1H_3M_45S_12MS DATE 16 D# TIME_OF_DAY 32 TOD#12:23:45.12 BOOL, BYTE, WORD BOOL型变量的数据类型包含一个位,BYTE、WORD、DWORD型变量分别包 DWORD, CHAR 含 8、16 和 32 位。在这些数据类型中不按位方式来处理。 这些数据类型的特殊形式是BCD 数,它们是计数功能中的计数值。CHAR数据类型代表ASCII码的字符。 S5TIME 在定时器功能中,定时器值要求是 S5TIME 数据类型的变量, 可以用小时、分钟、秒或毫秒指定。 带下划线(1h_4m) 或不带下划线(1h4m)输入时间值。 库中的功能FC 33 把S5TIME 转换成TIME 格式,FC40把TIME 转换成S5TIME 格式。 INT, DINT, REAL 这些数据类型变量表示算术操作中的数。 TIME TIME数据类型的变量占用一个双字,该变量用于指定IEC定时器功能的时间值。变量内容用毫秒为单位的双整数表示,它可以是正数或负数 (例如:T#1s=L#1 000, T#24d20h31m23s647msw = L# ). DATE DATE数据类型的变量以无符号整数的形式占用一个字。变量内容表示从 开始的天数(例如:D# = W#16#FF62). TIME_OF_DAY TIME_OF_DAY数据类型的变量占用一个双字,它包含用无符号整数的形式表示的从每天开始 (0:00 时钟) 的毫秒数 (例如:TOD#23:59: = DW#16#05265B77)。

6 复杂数据类型 关键字 长度 (位) 举例 DATE_AND_TIME 64 DT#97-09-24-12:14:55.0
关键字 长度 (位) 举例 DATE_AND_TIME 64 DT# :14:55.0 STRING 8 * (字符个数+2 ) ´This is a string´ (最多254个字符的字符串) ´SIEMENS´ ARRAY 用户定义 测量值: ARRAY[1..20] (相同数据类型的元素组) INT STRUCT 用户定义 Motor: STRUCT (不同数据类型的元素组) Speed : INT Current: REAL END_STRUCT UDT UDT as block UDT as array element (用户定义数据类型 = 用户定义 基本或复杂数据类型组成的 STRUCT Drive: ARRAY[1..4] 模板) Speed : INT UDT Current: REAL END_STRUCT 复杂数据类型 复杂数据类型 (矩阵和结构) 包含基本数据类型或复杂数据类型。 这样可以为你的问题建立特定的数据类型,利用它可以结构化大量的数据并且可以用符号进行处理。 STEP 7的指令不能一次处理复杂的数据类型(大于32位),但是一次可以处理一个元素。 复杂数据类型要预定义。数据类型DATE_AND_TIME 有64 位长。矩阵、结构和字符串的数据类型长度由用户确定。 复杂数据类型的变量只能在全局数据块中声明,可以作为参数或逻辑块的局部变量。 用户定义数据类型 用户定义数据类型表示自定义的结构,存放在UDT 块中(UDT1 ... UDT65535), 在另一个数据类型中作为一个数据类型“模板”。 当输入数据块时,如果需要输入几个相同的结构,利用UDT可以节省输入时间。 例如:需要在一个数据块中输入10个相同的结构。首先,定义一个结构并把它存为一个UDT,例如:UDT 1。 在数据块中,定义一个变量“Addresses”,它有10个元素,数据类型是UDT1: Addresses array[1..10] UDT 1 这样,就建立了UDT1所定义结构的10个数据区域,而不需要分别输入。

7 结构举例 Motor_data Operating Speed, data type Integer
Rated Current, data type Real 带有名字“Motor_data” 的结构 (不同数据类型的几个元素) Startup Current, data type Real Turning Direction, data type Bool 程序编辑器中的显示 (数据块 DB 1): 结构 幻灯片给出了一个名为“Motor_data”的结构,该结构包含几个不同的数据类型。结构的元素可以是简单的或复杂的数据类型。 访问结构的元素需要包含结构的名称,这使程序更易读。 为了用符号访问结构中的元素,需要给数据块分配一个符号名,例如:“Drive_1” 访问结构中的各个元素: L “Drive_1”.Motor_data.rated_current 或 L “Drive_1”.Motor_data.operating_speed “Drive_1”是数据块的符号名,该数据块包含结构,结构的名称(用点分割)在数据块符号名后面。结构的元素名(用点分割)跟在结构名的后面。 在DB中定义结构 结构的关键字是“STRUCT”,结构的结束用“END_STRUCT”表示。为结构起一个名称(例中:“Motor_data”)。

8 矩阵举例 Measuring_point 1. Measuring_point, data type Real
(相同数据类型的几个元素) 程序编辑器中的显示 (数据块 DB 2): 矩阵 矩阵由相同数据类型的几个单元组成,在上面的幻灯片中,可以看到有10个实型元素的矩阵“Measuring_point” 。后面在该矩阵中存储不同的数值。 数据块中定义矩阵 矩阵的关键字是“ARRAY[n..m]”。第一个(n)和最后一个(m)元素在方括号中指明。例如:[1..10] 表示有10 个元素,第一个元素的地址是[1];最后一个元素的地址是[10]。除采用 [1..10] 外,也可以采用 [0..9]。它只影响元素的访问。 注 建立一个空数据块,用所需要的数据类型定义一个矩阵。 数据查看 选择菜单 View -> Data View 切换到另一种显示方式,查看每个单元中所存放的数值。在“Data View”中,在“Actual Value”列可以找到存储的实际值。

9 建立新数据块 程序编辑器 用LAD/STL/FBD 编辑器可以打开存在的数据块或建立一个新数据块。
“New”对话窗 当点击“New”图标时,会弹出一个“New”对话窗。选择项目和用户程序,然后在“Object name”框(数据块或所有可选的对象类型)中输入一个对象,例如: DB4。 用“OK”确认,就会出现“New Data Block”对话窗。 “New Data Block” 在该对话窗中,选择要建立的数据块的类型: 对话窗 • Data Block (全局数据块) • Data Block Referencing a User-Defined Data Type (建立和UDT块结构相同 的数据块) • Data Block Referencing a Function Block (建立FB的背景数据块)。该项在 “功能和功能块”一章中详细讨论。

10 输入、保存、下载和监视数据块 输入数据 在表中输入数据单元,首先在“Name”列的第一行输入单元名称,用Tab键可以跳到其它的列。
列 列的含义如下: • 地址 - 当存盘时由程序编辑器输入 数据块中变量占用的第一个字节地址 • 名称 - 单元的符号名 • 类型 - 数据类型 (用鼠标右键选择) • 初始值 - 为数据单元设定一个缺省值。如果不输入,就以0为初始值 • 注释 - 数据单元的说明 (可选) 保存 利用“磁盘”图标可以把数据块保存到编程器的硬盘上。 下载 象逻辑块一样,也需要把数据块下载到CPU。 监视 要监视数据块中的当前值,首先要切换到“Data View” 。也可以利用工具条中的“眼镜”图标监视数据块 (CPU中数据块实际值的永久显示).

11 寻址数据单元 8 位 7 数据字节 0 DBB 0 数据字节 1 DBW 0 数据字节 2 DBD 0 数据字节 3 DBX 4.1
数据字节 0 DBB 0 数据字节 1 DBW 0 数据字节 2 DBD 0 数据字节 3 DBX 4.1 数据字节 8191 DBD 8188 DBW 8190 DBB 8191 概述 正如位存储器,数据块中的数据单元按字节进行寻址。 可以装载数据字节、数据字或数据双字。当使用数据字时,需要指定第一个字节地址 (如:L DBW 2) ,按该地址装入两个字节。使用双字时,按该地址装入四个字节。 数目和长度 数据块的数目依赖于CPU的型号。S7-300的最大块长度是 8K字节, S7-400的最大块长度是64K字节。 注 如果访问不存在的数据单元或数据块,而且没有编写错误处理OB块,CPU 进入停止模式。

12 访问数据单元 完全表示访问 传统访问方法 DB 19 (符号名: Values) 绝对寻址 符号寻址 OPN DB19 A DBX 0.0
1) A DB19.DBX0.0 A “Values”.Start 1 2 3 4 5 6 7 8 9 OPN DB19 L DBW2 Number L DB19.DBW2 L “Values”.Number OPN DB19 L DBB5 Loop L DB19.DBB5 L “Values”.Loop 打开 DB 指令“OPN DB...” 打开全局数据块。如果一个全局数据块已经打开,它就自动关闭。如果为数据块起一个名称(例如:“Values”),可以使用指令 OPN “Values” 打开数据块。 访问 DB 对数据块的读(装入)或写(传递)在幻灯片中给出了。 如果DB 已经打开,使用装入或传递指令就可以了。 合成指令,例如:L DB19.DBW2 包括使用的数据块,该指令包括数据块的打开。 符号访问 只有满足下面的要求才能用符号访问数据块: 1. 在符号表中为 DB 分配一个符号名 2. 数据块中的数据单元用LAD/STL/FBD分配符号名 例如:指令 L “Values”.Number 打开名为“Values”的数据块并装入名为 “Number”的数据单元。 注 使用符号访问数据块有如下的优点: • 程序易读, • 确保访问正确的数据块, • 以后易于修改数据块的结构 使用绝对地址访问数据块,必须手动定位程序中的数据块单元。采用符号就可以很容易用源程序调整。 在高级编程课中讲解源程序的使用。 带有元素名字 “Start” 的 数据位 0.0 1)

13 ! 打开数据块的合法性 OB 1 FC 1 DB 4 CALL FC 1 T DBW 4 OPN DB 4 L DBW2 DB 4
OPN DB 5 L DBB6 DB 6 OPN DB 6 L DBB6 T DBW 2 DB 4 DB 5 L DBW 0 DB 2 T DB2.DBB 0 DB 2 L DBW 4 FB 1 CALL FB1, DB1 ??? ! 介绍 打开的数据块一直保持到一个新的数据块打开或通过一个合成指令 (如:L DB4.DBW6) 访问另一个数据块。 FC 块调用 由于另一个 FC 被调用,一个 OB 或一个 FC 块退出, 那末当前的数据块保持有效。当返回到调用的 FC 时,退出时有效的数据块被再次打开。 FB块调用 功能块调用不同,FB总是带着背景数据块DB (更多信息“功能和功能块”)。调用功能块,自动打开数据块。 当返回调用块时,先前打开的全局数据块不再有效。 这意味着FB调用后,必须重新打开需要的全局数据块。 注 使用相关指令OPN DB,可打开数据块。通过把参数传递到参数块,也可以打开数据块。 这样, 可以使用 “DB 4.DBW6” 作为实际参数。 在本例中,打开 DB 4。 推荐:如果可能,对数据块使用完整表示形式。 L DBW 10 DB ??

14 用户定义数据类型 (UDT) UDT 块作为模板 全局 DB (例如) Flour Milk Eggs Yeast Sugar 配方 1
类型的元素 配方 2 Flour Milk Eggs Yeast Sugar Flour Milk Eggs Yeast Sugar 根据UDT建立的 DB 配方 3 Flour Milk Eggs Yeast Sugar 用法 用户定义数据类型用于: • 建立结构化数据块, • 建立包含几个相同单元的矩阵, • 在带有给定结构的FC和FB中建立局部变量(见“功能和功能块”一章)。 用户定义数据类型是存放在硬盘上的 UDT 块。 当建立数据块时, 它可以用作 “模板”节省录入时间。 用户定义数据类型 用户定义数据类型由基本数据类型和其他用户定义数据类型组成。 (UDT) 这些数据类型不能存储在PLC中。 例如:存储配方数据(见下页)。

15 输入UDT块 输入数据类型 通过选择菜单 File - > New 和对象名UDT.. .,在LAD/STL/FBD编辑器中选择UDT。 输入需要的数据类型。 必须填写“Name”和“Type”列,但是,可以空着“Initial Value”和 “Comment”这两列。 保存数据类型 最后,保存数据结构 (鼠标在“Save”图标上单击)。

16 根据数据类型建立数据块 建立 DB 定义一个数据类型并把它存为一个UDT 块,就可以用相同的数据结构建立几个数据块。
操作 1. 在程序编辑器中选择菜单 File - > New 。 2. 选择项目、程序和DB。 3. 激活选项“Data block referencing a user-defined data type”。 4. 在“Reference”中选择UDT 块。 5. 保存数据块。

17 举例:UDT中矩阵 声明查看 数据查看 举例 如果在一个数据块中存放几个相同的结构,就可以用UDT作为矩阵数据类型。
如果在符号表中为数据块DB11 分配了符号名“Cake”,用户程序就可以使用符号,如下: L "Cake".Recipe[2].Eggs 从数据块“Cake”的第2个配方中装入“鸡蛋数”。 注 要修改成分的数量就需要切换到 “Data View” ,在“Actual Value”列用所需要的值覆盖初始值。 若后来修改了UDT 块的结构,就需要重新建立包含UDT的数据块。同样,所有对该数据块的访问都要刷新,最简单的方法就是使用源程序。 可以给 UDT 块起符号名。

18 练习:瓶装线编程- 数据存储 数据块 DB5 空瓶 (MW 100) 变量: empty 满瓶 (MW102) 变量: full
变量: broken 目的 在前例中,在存储器字中存储了产量数据 (总数,空瓶数和碎瓶数)。 这些存储器字都不是可保持的,如果执行全启动,产量数据就会丢失。为了防止发生这样的事情,应该把数据存放在数据块中。 操作 1. 在S7程序“FILL”中建立一个数据块 DB 5,其中包含指定变量,数据类型是 INT。 2. 修改 FC 18,把产量数据(总数,空瓶数和碎瓶数)存放在DB 5中。 3. 下载这些块并在培训单元上测试编写的程序。 结果 应正常工作。


Download ppt "数据块中的数据存储 目录 页 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型"

Similar presentations


Ads by Google