前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >S7-1500调用一个功能块时,应该使用整个结构代替大量的单个元素来传递参数

S7-1500调用一个功能块时,应该使用整个结构代替大量的单个元素来传递参数

作者头像
科控物联
发布2022-03-29 19:47:30
发布2022-03-29 19:47:30
1.3K0
举报
文章被收录于专栏:科控自动化科控自动化

描述 本条目将阐述如何处理“传送整个元素来代替大量的单个元素”,及其在 STEP 7 V5.x 和 STEP 7 (TIA 博途) V12 中不同的处理步骤。

用户可以创建程序以便将所有的数据记录(设备数据,配方等)能够在不同的块中调用,每个块处理一部分数据。使用数据记录使得数据传输简 单化,可保证上述数据处理过程同步进行。

在 STEP 7 V5.x 中的步骤 在 STEP 7 V5.x 中的数据块中的结构声明大部分是没有变量名的。数据块本身以这种方式被写入数值:结构体的值作为实际参数传递,计算结果被传送回结构中。也可以传送 DB 块号和块中的绝对地址。这里必须注意参数的数量通常是非常大的。实际数据被存储于 DB 块中,并且运算后的值再一次被传送到其它块中。在传送数据块的变量时,符号名不再可用。

在 STEP 7 TIA 博途中的步骤 在 STEP 7 (TIA 博途) 中也可以传送结构体参数。如果一个块的输入接口中声明了一个结构体类型的形参,则必须传送一个具有相同结构的实参。这意味着所有结构体里元素的名称和数据 类型必须是一致的。如果结构中的某个元素的数据类型与形参相互匹配,那么也可以传送结构中的这个元素作为实参。推荐使用结构变量作为 PLC 数据类型,由于其可以反复使用及统一修改。这样使编程更加简单。

  1. 用结构型 PLC 数据类型创建一个数据记录并给其一个变量名,例如 "Machine data"。
  2. 使用这个数据类型来声明一个数据块或者 DB 块中的变量。
  3. 在块的接口中定义 VAR_IN_OUT 类型的形参。
  4. 对于块调用可以参数化整个数据记录(DB 或者 DB 中的变量)作为一个参数。
  5. 可以在数据记录中直接读取结果。

优势

  • 通过减少了大量的参数从而简化了调用接口
  • 由于数据处理直接在数据记录中进行而节省了存储空间
  • 没有额外的大量拷贝,提高系统性能
  • 同时优化了数据块的访问

图 01 显示了如何使用两个 DB 块的变量调用和参数化功能块。DB 块变量 (Array[1..10] of Bool) 的数据类型和 PLC 数据类型 (用户自定义数据类型) 与 FB1 的参数的数据类型是一致的。

S7-1500 中结构的最大数量

在 S7-1500 的一个数据块中,最多可以定义 252 个结构,与每个结构中数据类型无关。

补充知识:

S7-1500中,将某一个字中的单一地址定义为PLC数据类型会造成整个字被覆盖

描述

在STEP 7 (TIA 博途)中为使程序结构更加清晰,您可以把多个输入输出地址定义在一组更高一级的PLC变量中。那么,可能会发生这种情况,即使您只是访问了定义为PLC数据类型的单个位地址,但整个输出Word都会被覆盖。

在下面的例子中,在一个S7-1500cpu中定义了2个输出字节Q0和Q1,用户程序中定义了PLC数据类型 "TypeMotor",包括4个元素,即"powerOn", "powerOff", "speedMin" and "speedMax"(都是Bool数据类型)。

图1 数据块"DB" 的"setFalse"变量和OB 主程序的Network 1 。

  • 输入变量 "init" 将输出字节 "QB1" 初始化为255。
  • DB变量 "DB.setFalse" 被声明为 PLC 数据类型 "TypeMotor" 并预设值为"False"。
  • 输出变量 "set" [Q0.0] 也被声明为 PLC 数据类型 "TypeMotor"。
  • 用"MOVE" 指令将DB变量 "DB.setFalse" 覆盖输出变量 "set" [Q0.0]。
  • 这样输出点 Q0.0 到 Q0.3将为"False"。

情形1:数据块 "DB" 没有设置优化访问

PLC 数据类型以Word 结束。拷贝数据结构时, 在系统中填充位会被插入到数据传输中,因为UDT在系统中总是以16位存在。这会导致当您在程序中使用非优化访问的块时整个输出字将会被覆盖。输入和输出区域没有被优化。 在情形1中 ,输出字节"QB1" 也被写入了 "0"。

情形2:数据块 "DB" 设置了优化访问

输出字节 "QB1" 没有被覆盖为 "0" 并且先前初始化的值被保留 。

注意 如果您用PLC数据类型定义了输出字节QB0, 如例子中所示,但没有在设备组态中定义输出字节QB1或者说QB1不存在的话,那么就会有上面的错误提示信息。

补救措施 如果您只是访问数据结构中的单个数据元素,那么如上所描述的填充比特位对数据传输没有影响。如果您传送如图1所示的整个数据结构,那么您应该使用优化的块访问

S7-1200/S7-1500 新生成的DB块会默认设置为优化访问。S7-300/S7-400 数据块为“标准“的块访问属性 ,如果您将这些块用于 S7-1200/S7-1500,建议您更改为优化访问以确保更好的性能。 为此,您打开块的属性,并在“属性”选项卡中启用“优化的块访问”功能。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科控物联 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档