- {{item.name}}
在S7-1500中,为什么将某一个字中的单一地址定义为PLC数据类型会造成整个字被覆盖?
- 0
- 252
- 1
在您给输入输出区定义PLC数据类型时,编译后可能会出现如下信息:“所使用的输入输出不在硬件配置中”。
描述
在STEP 7 (TIA 博途)中为使程序结构更加清晰,您可以把多个输入输出地址定义在一组更高一级的PLC变量中。 那么,可能会发生这种情况,即使您只是访问了定义为PLC数据类型的单个位地址,但整个输出Word都会被覆盖。
在下面的例子中,在一个S7-1500cpu中定义了2个输出字节Q0和Q1,用户程序中定义了PLC数据类型 "TypeMotor",包括4个元素,即"powerOn", "powerOff", "speedMin" and "speedMax"(都是Bool数据类型)。
图1
图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" 没有设置优化访问
图2
PLC 数据类型以Word 结束。拷贝数据结构时, 在系统中填充位会被插入到数据传输中,因为UDT在系统中总是以16位存在。这会导致当您在程序中使用非优化访问的块时整个输出字将会被覆盖。输入和输出区域没有被优化。 在情形1中 ,输出字节"QB1" 也被写入了 "0"。
情形2: 数据块 "DB" 设置了优化访问
图3
输出字节 "QB1" 没有被覆盖为 "0" 并且先前初始化的值被保留 。
注意
如果您用PLC数据类型定义了输出字节QB0, 如例子中所示,但没有在设备组态中定义输出字节QB1或者说QB1不存在的话,那么就会有上面的错误提示信息。
补救措施
如果您只是访问数据结构中的单个数据元素,那么如上所描述的填充比特位对数据传输没有影响。如果您传送如图1所示的整个数据结构,那么您应该使用优化的块访问。
S7-1200/S7-1500 新生成的DB块会默认设置为优化访问。 S7-300/S7-400 数据块为“标准“的块访问属性 ,如果您将这些块用于 S7-1200/S7-1500,建议您更改为优化访问以确保更好的性能。 为此,您打开块的属性,并在“属性”选项卡中启用“优化的块访问”功能。
更多信息
更多信息参考手册Use PLC Data Types (UDT).
软件环境
该FAQ所用的截图是在 STEP 7 (TIA Portal) V13+SP1 环境下创建。
https://support.industry.siemens.com/cs/cn/zh/view/109736941
剩余80%未阅读,请登录后下载/查看文档
- 评论
-
分享
扫码分享
- 收藏 收藏
- 点赞 点赞
- 纠错 纠错
- MM4/G120:控制字中预留位的自定义使用
- 在PROFIBUS中,主站在读取和写入从站连续数据时(大于4个字节)需要使用SFC14和SFC15。那么在PROFINET中控制器读取或写入IO设备连续数据时又需要怎么处理?
- 为什么当 1Step 模块 6ES7138-4DC01-0AB0 替代 1Step 模块 6ES7138-4DC00-0AB0后核对接口的第六个字节的值不等于0?
- TIA 博图数据块中数据类型的定义
- 如何使用预定义数据类型UDT1“FILE_DB_HEADER”进行S7-300和S7-400的FTP通信?
- 在 STEP 7 (TIA Portal) 中,如何对S7-1200/S7-1500 进行数据类型转换?
- SIMATIC S7-1200 / S7-1500 的 OPC UA 服务器中 SIMATIC 数据类型的类型描述在哪个节点 ID 下?
- 在Step 7(TIA 博途)中,如何配置诸如"GetStationInfo"等指令中的结构化数据类型(如"IF_CONF_MAC"或者"IF_CONF_V4")?
- STEP 7 中哪些操作会覆盖累加器或寄存器的内容?
- STEP 7 (TIA 博途) 中怎样通过关键字 "AT" 实现变量覆盖?
{{item.nickName}}