当前位置: 首页 > 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.dtcms.com/a/278274.html

相关文章:

  • 借助DeepSeek编写输出漂亮表格的chdb客户端
  • 电流驱动和电压驱动的区别
  • Rust语言实战:LeetCode算法精解
  • iOS高级开发工程师面试——RunLoop
  • FRP Ubuntu 服务端 + MacOS 客户端配置
  • 安装llama-factory报错 error: subprocess-exited-with-error
  • Kubernetes的微服务
  • c语言内存函数以及数据在内存中的存储
  • linux 文件搜索与文件内容查看
  • 嵌入式硬件篇---单稳态多谐施密特电路
  • CISSP通过回顾
  • Java Integer包装类缓存机制详解
  • uni-app 选择国家区号
  • AI与基础设施
  • 微服务引擎 MSE 及云原生 API 网关 2025 年 3 月产品动态
  • 基于光栅传感器+FPGA+ARM的测量控制解决方案
  • Quasar组件库
  • 2025最新android面试指南
  • vue3+arcgisAPI4示例:自定义多个气泡窗口展示(附源码下载)
  • [源力觉醒 创作者计划]_文心大模型4.5开源部署指南:从技术架构到实战落地
  • 知天命的感悟
  • 深入了解linux系统—— 进程信号的保存
  • 1688商品详情接口逆向分析与多语言SDK封装实践
  • Datawhale AI夏令营-基于带货视频评论的用户洞察挑战赛
  • 大数据领域开山鼻祖组件Hadoop核心架构设计
  • 某ctv视频下载逆向思路
  • 【Linux操作系统】简学深悟启示录:Linux权限
  • 算法第三十四天--动态规划part02(第九章)
  • fpga调试经验
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 45(题目+回答)