当前位置: 首页 > news >正文

S7-1200 中 AT 覆盖参数的应用:灵活访问数据区域的实用指南

S7-1200 中 AT 覆盖参数的应用:灵活访问数据区域的实用指南

在 S7-1200 的编程过程中,经常需要对声明参数内的数据区域进行灵活访问。例如,有时需要将一个 Word 类型的参数按位进行操作,或者将一个 DWord 类型的参数拆分为多个不同的数据类型进行处理。通过附加声明(AT 覆盖)的方式,可以实现对已声明参数的不同数据类型寻址,极大地提升了数据操作的灵活性。本文将详细介绍 AT 覆盖参数的创建方法、顺序规则及注意事项,帮助工程师更好地掌握这一实用技巧。

一、AT 覆盖参数:数据类型灵活转换

AT 覆盖参数是 S7-1200 中一种特殊的参数声明方式,它允许为同一个数据区域赋予不同的数据类型,从而实现对该区域的多样化访问。例如,对于一个 int 类型的参数,可以通过 AT 覆盖将其声明为一个由 16 个 Bool 组成的数组,这样就能够直接对该 int 类型参数的每一位进行操作,无需进行复杂的位运算转换。

这种方法在工业控制场景中非常实用。比如,在处理一个 16 位的控制字时,既可以整体对这个控制字进行赋值或传递,又可以通过 Bool 数组单独控制每一位对应的设备状态,大大简化了程序编写。

二、创建 AT 覆盖参数的详细步骤

创建 AT 覆盖参数需要按照一定的流程进行操作,不同的块类型和设置会影响创建过程,下面详细介绍具体步骤。

步骤 1:创建非优化访问的块

首先,在 S7-1200 的项目中,新建一个 FB 块(功能块)或 FC 块(功能)。以 FB 块为例,右键点击 FB 块,进入该块的属性设置界面。在属性中,需要将 “优化的块访问” 选项取消勾选。这是因为优化的块访问会对数据存储进行优化,导致无法直接通过地址偏移进行参数覆盖,只有非优化的块访问才能支持 AT 覆盖参数的创建。

步骤 2:在块接口中添加参数并设置 AT 覆盖

双击进入 FB 块,展开 “块接口” 区域,如图所示。在 “Input”(输入)区域添加一个参数,例如命名为 “A”,数据类型设置为 int。接着,在参数 “A” 下面的一行,在 “数据类型” 这一列手动输入 “AT”。

此时,系统会自动生成一个新的参数 “Input_1”,其数据类型默认为 int。将 “Input_1” 的数据类型修改为 “Array [0..15] of Bool”,然后编译该 FB 块。编译完成后可以看到,参数 “A” 和 “Input_1” 的偏移量都是 0.0,这表明它们指向同一个数据地址,只是以不同的数据类型呈现。

按照同样的方法,可以在 “Output”(输出)区域创建参数 “B” 和对应的 AT 覆盖参数 “Output_1”,这样就能够对参数 “A” 和 “B” 进行位操作了。

步骤 3:处理优化的块访问情况

如果 FB 块需要保留 “优化的块访问”(即勾选该选项),则需要在 “保持性” 一列中选择 “在 IDB 中设置”,之后才能使用 AT 参数覆盖功能。

此外,对于标准访问的 FB 块输入参数,还可以使用结构体(Struct)进行覆盖。例如,一个 DWord 类型的参数可以被一个包含字、字节和布尔值的结构体覆盖,通过这种方式可以更灵活地对不同数据段进行操作。

步骤 4:调用 FB 块

在 OB1 中调用创建好的 FB 块时,FB 块的管脚不会显示 AT 覆盖生成的参数(如 Input_1 和 Output_1),如图 所示,这些参数仅在块内部用于数据访问。

三、AT 覆盖参数的顺序与对应关系

当使用 AT 覆盖参数后,需要明确参数之间的地址对应关系,以确保正确访问数据。例如,在 FB1 的接口区创建一个 DWord 类型的参数 var1,并创建一个 Array [0..31] of Bool 类型的 AT 覆盖参数 var2。在主程序 OB1 中调用 FB1,

并为 var1 赋值实参为 MD10(DWord 类型),此时 var2 与 var1(即 MD10)的对应关系如下:

var2[0]M10.0MB10
var2[7]M10.7
var2[8]M11.0MB11
var2[15]M11.7
var2[16]M12.0MB12
var2[23]M12.7
var2[24]M13.0MB13
var2[31]M13.7

var2 [0] 对应 M10.0,var2 [1] 对应 M10.1……var2 [7] 对应 M10.7;var2 [8] 对应 M11.0,以此类推,var2 [31] 对应 M13.7。这种对应关系是由数据的存储结构决定的,低位在前,高位在后。

四、AT 覆盖参数的注意事项和规则

在使用 AT 覆盖参数时,需要遵循一定的规则和注意事项,以避免出现错误。

  1. 适用范围:在 LAD、FBD 和 SCL 编程语言中都允许使用参数覆盖;可以在 FB、FC 块中使用,但 S7-1200 的 OB 块是优化块,不支持 AT 功能;无法覆盖库中声明为接口参数的块,也无法覆盖接口中声明为参数的结构化 PLC 参数。
  2. 数据宽度:覆盖参数的数据宽度必须小于等于被覆盖参数的数据宽度,否则会导致数据访问越界。
  3. 数据类型限制:不可以覆盖 VARIANT 数据类型的参数;多重实例声明不能覆盖;Bool、Byte、SINT、USInt 和 Char 不能使用 PLC 数据类型、数组、结构体的参数覆盖;如果被覆盖参数是字符串、字节数组、字符数组等,其长度应与偶数个字节数对应。
  4. FB 与 FC 的差异:对于 FC 块使用 AT 覆盖时,覆盖参数和被覆盖参数的数据长度必须相同;而 FB 块在不同接口(如 Input、Output、Temp 等)对数据类型的组合有不同规则,具体可参考表 2。
  5. 其他限制:无法通过片段访问对覆盖参数进行寻址。
覆盖参数被覆盖参数
基本数据类型结构化数据类型Any 指针DB_ANY
FBInput基本数据类型
结构化数据类型
Any 指针
Temp基本数据类型
结构化数据类型
Any 指针
Static、Output基本数据类型
结构化数据类型
Any 指针
InOut基本数据类型
结构化数据类型
Any 指针
FCTemp基本数据类型
结构化数据类型
Any 指针
Input、Output、InOut基本数据类型
结构化数据类型
Any 指针

如果在程序中无法实现 AT 覆盖的需求,可以考虑使用片段访问,或者使用 “SCATTER”(分散)和 “GATHER”(聚集)指令来处理数据。

通过 AT 覆盖参数的功能,S7-1200 能够灵活地对声明参数内的数据区域进行访问,实现了不同数据类型之间的便捷转换和操作,在工业控制程序编写中具有很高的实用价值。在实际应用中,需要严格遵循相关规则和注意事项,确保程序的正确性和稳定性。

http://www.lryc.cn/news/588302.html

相关文章:

  • STM32小实验1--点亮LED
  • 【HarmonyOS】元服务概念详解
  • 学习日志09 python
  • 若依(RuoYi)框架项目结构全解析
  • 注解@Autowired和@Resource的区别
  • USB读写自动化压力测试
  • 【React Native】ScrollView 和 FlatList 组件
  • C++中STL六大组件List的简单介绍
  • UI前端大数据处理新挑战:如何高效处理实时数据流?
  • AI创作系列第18篇:海狸IM移动端UI统一大升级 - 从混乱到规范的技术重构之路
  • 华为MateBook D 16 SE版 2024款 12代酷睿版i5集显(MCLF-XX,MCLF-16)原厂OEM预装Win11系统
  • 浏览器自动化领域的MCP
  • Spring Boot + Thymeleaf + RESTful API 前后端整合完整示例
  • 单片机(STM32-串口通信)
  • 延迟双删
  • 【ASP.NET Core】内存缓存(MemoryCache)原理、应用及常见问题解析
  • 位置编码类型彩色图解
  • 张艺兴探班RED女团一周年舞台,见证21岁的梦想落地生根
  • 代码随想录算法训练营第二十天
  • 一文读懂现代卷积神经网络—稠密连接网络(DenseNet)
  • Journal of Engineering Mechanics and Machinery,工程力学期刊,1-2天录用,7天出版,即将送检!
  • 自定义类型 - 联合体与枚举(百度笔试题算法优化)
  • 前端将传回的List数据组织成树形数据并展示
  • 用于监测线性基础设施的分布式声学传感:现状与趋势
  • 深度剖析:动态接口代理核心原理与高级应用
  • APP测试之Monkey压力测试
  • Relocations in generic ELF (EM: 40)
  • Qt小组件 - 2(布局)瀑布流布局,GridLayout,FlowLayout
  • 虚拟列表组件如果滑动速度过快导致渲染性能问题
  • UART寄存器介绍