Download presentation
Presentation is loading. Please wait.
Published byBrita Erlandsen Modified 5年之前
1
数据块中的数据存储 目录 页 目标 …… 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型 建立新数据块 输入、保存、下载和监视数据块 寻址数据单元 … 访问数据单元 练习: 计数传送的零件(FC 18, DB 18) …… 练习: 计数传送的零件(FC 18),答案提示 …… 复杂数据类型 ……… … 矩阵举例 结构举例 练习(选作): 数据块和数据格式
2
目标 学习了本章之后,你将 ... ... 懂得全局数据块的用途 ... 熟悉基本和复杂数据类型
... 懂得全局数据块的用途 ... 熟悉基本和复杂数据类型 ... 能够对带有单元变量的数据块编辑、存储和下装到CPU ... 熟悉并能够应用编址数据块变量
3
. 数据存储区 位存储器 DBz PIQ DBy PII DBx I/O 区 L 堆栈 数据块
概述 除逻辑块外,用户程序还包括数据,这些数据存储过程状态和信号的信息,所存储的数据在用户程序中进行处理。 数据以用户程序的变量形式存储,它们是唯一的: • 存储位置 (地址:P,PII,PIQ,位存储器,L 堆栈,DB) • 数据类型 (基本或复杂数据类型,参数类型) 根据访问方式,它们的区别是: • 全局变量:在全局符号表或全局数据块中声明。 • 局部变量:在OB、FC和FB的变量声明表中声明。 当块被执行时,变量永久地存储在过程映象区、位存储器区或数据块,或者它们动态地建立在局部堆栈中。 局部数据堆栈 局部数据堆栈 (L 堆栈) 用来存储: • 逻辑块的暂时变量,包括OB 的起始信息 • 调用功能时要传递的实际参数 • 梯形图程序中的中间逻辑结果 这个内容在“功能和功能块”一章中讨论。 数据块 数据块用来存储用户程序的逻辑块的值。与暂时数据不同,当逻辑块执行结束时或数据块关闭时,数据块中的数据不被覆盖。
4
数据块 (DB) 所有块可以访问 功能 FC10 OB1 全局数据 DB20 功能 FC20 FB1的背景DB 功能块 背景数据 FB1
概述 数据块用来保存用户数据。和逻辑块一样,数据块占用用户存储器的空间。数据块包含用户程序中使用的变量数据(如:数值) 。 用户程序以位、字节、字或双字操作访问数据块中的数据,可以使用符号或绝对地址。 用法 有不同方法使用数据块,数据块的区别是: • 全局数据块:在用户程序的所有逻辑块(包括OB1)都可以访问它包含的信息。 • 背景数据块: 它们总是分配给特定的FB,仅在所分配的FB中使用背景数据块 在“功能和功能块”一章中详细讨论背景数据块。 建立DB 利用程序编辑器或用已经生成的“用户定义数据类型”(UDT) 建立全局数据块。 当调用FB时,产生背景数据块。 寄存器 CPU有两个数据块寄存器:DB 和 DI 寄存器。这样,可以同时打开两个数据块。在高级编程课程中可以得到更多的信息。
5
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 位)
6
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 数据类型的变量,格式是S5T# ,接着是时间,可以用小时、分钟、秒或毫秒指定。 带下划线(1h_4m) 或不带下划线(1h4m)输入时间值。 库中的功能FC 33 把S5TIME 转换成TIME 格式,FC40把TIME 转换成S5TIME 格式。 INT, DINT, REAL 这些数据类型变量表示可以用于算术操作中的数。 TIME TIME数据类型的变量占用一个双字,该变量用于指定IEC定时器功能的时间值。变量内容用毫秒为单位的双整数表示,它可以是正数或负数 (例如:T#1s=L#1 000, T#24d20h31m23s647ms = L# ). DATE DATE数据类型的变量以无符号整数的形式占用一个字。变量内容表示从 开始的天数(例如:D# = W#16#FF62). TIME_OF_DAY TIME_OF_DAY数据类型的变量占用一个双字,它包含用无符号整数的形式表示的从每天开始 (0:00 时钟) 的毫秒数 (例如:TOD#23:59: = DW#16#05265B77)。
7
建立新数据块 建立 DB 你可以插入一个新数据块 - 如图所示 - 在 SIMATIC® Manager 中通过选择S7程序的块文件夹及接下来的所示选项菜单。 可以在LAD/STL/FBD 编辑器用下列选项菜单建立一个新数据块: File -> New ->选择Project和Project Name ->选择S7 program的Blocks folder -> Object Name: DB 99 Shared DB 共享数据块用于存储全局数据。于是所有逻辑块(OB 、 FC 、 FB)都可以访问所存储的信息。 用户只能自己编辑全局数据块。通过在数据块中声明必需的变量以存储数据。 Instance DB 背景数据块用做“私有存储器区”既用做功能块(FB) 的“存储器” 。 FB的参数和静态变量安排在它的背景数据块中。 背景数据块不是由用户编辑的,而是由编辑器生成的(见功能和功能块一章) 。 DB of Type 数据块也可以由编辑器根据用户定义的数据类型(UDT)生成。 UDT ,用户必须象编辑数据块一样编辑它,它用做模板。 UDT用做模板以生成另一个数据块,和/或用做声明变量和块参数。
8
输入、保存、下载和监视数据块 Declaration View Data View
(输入变量) 在表中生成的变量, 以行和列安排。 列 列的含义如下: • Address - 当由程序编辑器输入 是变量占用的第一个字节地址 • Name - 变量的符号名 • Type - 数据类型(INT, REAL, .....,用鼠标右键选择) • Initial value - 为变量设定一个缺省值,当数据块第一次生成或编辑时。 如果不输入,就自动以0为初始值 • Comment - 变量的说明 (可选) 保存 利用“磁盘”图标可以把数据块保存到编程器的硬盘上。 下载 象逻辑块一样,也需要把数据块下载到CPU。 Data View 可以在线监视数据块中的变量当前值(CPU中的变量的值) 。 要做的话,首先要 (监视DB) 到“View”菜单中切换到“数据显示” 。也可以利用工具条中的“眼镜”图标监视数据块 。 Initialize DB 当初始化数据块时所有变量当前值都被初始值覆盖。当修改了初始值后要把它作为实际值时需要它。 View -> Data View -> Edit -> Initialize Data Block Data View
9
寻址数据单元 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字节。 注 如果访问不存在的数据单元或数据块,出现区长度错误(Area Length error )系统故障 。如果没有编写错误处理OB块,CPU 进入停止模式。
10
访问数据单元 完全表示访问 DB 99 "Values" 传统访问方法 绝对寻址 符号寻址 4.0 Weight[1] REAL
Add. Name Type 绝对寻址 符号寻址 OPN "Values" A DBX 0.0 0.0 Status BOOL 或 A DB99.DBX0.0 或 A "Values".Status OPN DB 99 L DBB 1 1.0 States BYTE OPN "Values" T DBW 2 2.0 Number INT 或 L DB99.DBB1 或 L "Values".States 4.0 Weight[1] REAL OPN DB 99 L DBD 8 或 T DB99.DBW2 或 T "Values".Number 或 L DB99.DBD8 或 L "Values".Weight[2] 8.0 Weight[2] REAL 传统访问 传统的(S5领域典型的)数据块访问,实际访问之前先要打开数据块。可以用绝对地址OPN DB 99或符号OPN “Values”打开数据块。如果另一个数据块被打开,前一个数据块就自动关闭。然后不用每次指定数据块就可以一位一位地(DBX...)、一个字节一个字节地(DBB...)、一个字一个字地(DBW...) 或一个双字一个双字地(DBD...)访问各数据单元。 缺点: • 当访问数据单元时,必需确定正确的数据块已经打开。 • 只能绝对访问。程序员必需确定“到达”数据块正确的值。例如,如果装 载DBW3 ,结果装载的既不是Number的值也不是Weight[1]的值,而是无 效的值。 • 绝对访问阻碍了修改的可能性并使程序难读。 全址访问 全址访问(fully-qualified access)打开数据块并关闭以前打开的任何数据块。全址访问可以用绝对和符号。 绝对 绝对访问是数据块的打开和数据单元的访问组合的指令。缺点和传统的访问相 同。 符号 只有数据块和它的单元都用符号才能用符号访问数据块中的变量。编辑时允许“混合”使用绝对和符号地址,然而 ,输入确认后转换为完全的符号。
11
ACTUAL-number of parts SETPOINT-number of parts
练习: 计数传送的零件 (FC 18, DB 18): 模拟器 CPU 程序: DB 18, FC 18 ACTUAL-number of parts QW 6 SETPOINT-number of parts IW 2 到现在的FC 18 • 在自动模式传送的零件一旦它们到达传送带终端既穿过光栅要被计数( 用 S5计数器C 18 )。 • 传送的零件(ACTUAL number of parts)显示在BCD数字显示。 • 当系统断开时计数器被复位(Q 4.1 = ´0´) 。 任务 • 不再用S5计数器C 18计数传送的零件, 而是用变量 “DB_Parts”.ACTUAL_number_of_parts (DB 18.DBW 0)通过加法。用变 量"DB_Parts".Edge_Aux (DB18.DBX2.0) 作为必要的边沿检测的辅助标志。 • 多少零件要被传送的设定值可以通过BCD拨轮按钮设定。当给出的零件的 设定值达到时,在传送带终端的红色的LED (Q 8.4)上显示。 • 通过传送带终端的暂态开关可以应答该信息。应答复位实际零件数 “DB_Parts”.ACTUAL_number_of_parts (DB18.DBW0)为0,就像断开系统 的作用。 • 只要零件数达到设定值的信息(红色的LED )存在,不可能启动下一传送 功能( 在FC 16、 FC 17中封锁) 。 做什么 1. 生成带有所述变量的 DB 18 (见上图) 2. 在全局符号表,, 给 DB 18 符号名 "DB_Parts" 3. 插入OB 121组织块到你的程序中并下装到CPU。 在OB 121中不需要程 序。在设定零件的设定值时, 来自BCD拨轮按钮引起的“抖动”,下装这个 “空的”OB 121 ,避免CPU 进入STOP 状态 。 4. 修改 FC 18 的程序 传送带模型 - LED ACTUAL=SETPOINT Q 8.4
12
练习: 计数传送的零件(FC 18), 答案提示 NW 1: Set "counter" to 0 MOVE 复位的条件 EN OUT
"DB_Parts".ACT_Number_of_parts IN ENO NW 2: Counting using memory word, ACTUAL number of parts ADD_I 计数事件的上升沿 EN ENO "DB_Parts".ACT_Number_of_parts IN1 OUT "DB_Parts".ACT_Number_of_parts 1 IN2 NW 3: Display ACTUAL number of parts on BCD digital display 零件的实际值("DB_Parts".ACT_Number_of_parts)从整数到BCD转换 ->结果在 BCD 数字显示 ( QW 6) NW 4: Readin SETPOINT number of parts and convert from BCD to Integer 来自数码拨轮 ( IW 2)的值从 BCD 转换到整数 -> 把零件的给定值 (Integer)存储在 MW 200 用加法计数 通过使用变量和加法计数传送的零件替代用S5计数器计数,你会得到以下的 优点: 当你用S5计数器时,你只可以从0到999计数; 当你用整数加法计数时,你只可以从-32768到 计数。 FC 18的部分功能 如图所示,可以把FC 18的全部功能分为以下几个功能部分∶ • 第1段:置“计数器”为0 意义,用0覆盖用作计数器的变量“DB_Parts”.ACT_Number_of_parts的内 容。因为 – – 当复位条件满足时 –– 根据任务可以每个周期都发生,不需要边沿检测。 • 第2段:用标志字计数 意义,每次计数出现时,变量“DB_Parts”.ACT_Number_of_parts的内容加1 (不是自己激活计数!)。计数的出现必须通过边沿检测。 在计数时,只要计数时就执行加法,结果标志字的内容会循环增加。 • 第3段:零件的实际值显示在BCD数字显示 因为在变量“DB_Parts”.ACT_Number_of_parts中以整数存储零件实际值加 法的结果,在信息传送到BCD数字显示之前要执行从整数到BCD的格式转 换。 例如, MW 200可以临时用来存储转换结果。 • 第4段:读入零件的设定值并从BCD转换为整数 …需要能够用来比较,从BCD拨轮按钮读入的并转换的零件的设定值 (MW 200),和第5段的零件实际值(“DB_Parts”.ACT_Number_of_parts, Integer) 。 比较功能仅能在整数数据格式时正确工作。 NW 5: ACTUAL-SETPOINT comparison, LED (red LED Q8.4) 比较实际值 (“DB_Parts”.ACT_Number_of_parts)和给定值(MW 200),比较的结果送到红色的LED
13
复杂数据类型 关键字 长度 (位) 举例 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 用户定义 Measured values : ARRAY[1..20] (相同数据类型的元素组) INT STRUCT 用户定义 Motor: STRUCT (不同数据类型的元素组) Speed : INT Current: REAL END_STRUCT UDT UDT 作为块 UDT作为array 元素 (用户定义数据类型 = 用户定义 基本或复杂数据类型 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)。创建一个全局数据块并定义一个变量(例 如:“”Tank_Farm”),它的类型是ARRAY [1..10] ,在下一行使用预先定义的UDT 。 这样,在一个数据块中就建立了10个数据区域,每个数据区域有UDT1所定义的结构。
14
矩阵举例 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]。第一个元素的地址是 [0];最后一个元素的地址是[9]。 初始值 输入单个值仅提供第一个单元的值。数值 ,由逗号分隔 ,顺序提供数值。表达式 x (初始值)顺序插入初始值 x 次 。 数据显示 选择菜单 View -> Data View 切换到另一种显示方式,查看每个单元中所存放的数值。在“Data View”中,在“Actual Value”列可以找到存储的实际值。
15
结构举例 Motor_data Speed, data type Integer Rated_current, data type Real
(不同数据类型的几个元素) Starting_current, data type Real Direction, data type Bool 程序编辑器中的显示 (数据块 DB 1): 结构 幻灯片给出了一个名为“Motor_data”的结构,该结构包含几个不同的数据类 型。结构的元素可以是简单的或复杂的数据类型。 访问结构的元素需要包含结构的名称,这使程序更易读。 为了用符号访问结构中的元素,需要给数据块分配一个符号名,例如:“Drive_1” 例如:用装载“L”指令访问结构中的元素 L "Drive_1".Motor_data.rated_current L "Drive_1".Motor_data. speed 格式为:块符号名,点,结构名,点,元素名 注意符号名(“Drive_1”)被套在引号中,提示该名来自全局符号编辑器。结构名和元素名没被套在引号中,因为它们是数据块中定义的符号没被列入全局符号编辑器。 在DB中定义结构 结构的关键字是“STRUCT”,结构的结束用“END_STRUCT”表示。为结构起一个名称(例中:“Motor_data”)。
16
练习(选作): 数据块和数据格式 BIN IB1 DB10. DBW2 DB11. DBW8 + = QW6 BCD
I0.7=“0” : BEC MW2 MW4 BCD IB2 BIN + MW6 MW8 BCD IB3 BIN = 练习步骤 (1) 建立一个新块FC7,并按下列要求编写程序。 (2) 把IB1与数据块DB10中的DBW2相加,其和存储到DB11中的DBW8里。 (3) 将IB2和IB3的数值相加,结果存在DB11的DBW10中。 (4) I0.7=0时,在QW6上显示(2)的计算结果。 I0.7=1时,在QW6上显示(3)的计算结果。 提示 IB2和IB3输入的是BCD码十进制数,在运算之前必须转换为二进制数。在转换之前必须把两位组成的BCD数(IB2)扩展为四位BCD数。 BIN DB11. DBW10 QW6 BCD : BE
Similar presentations