[AB] AB PLC | RSLogix 5000 PLC 编程中的数据结构和 UDT

[复制链接]
查看11058 | 回复0 | 2024-3-16 09:42:49 | 显示全部楼层 |阅读模式


前言:
PLC 编程中的一个关键概念是数据结构。它们控制输入如何捕获数据、如何由 PLC 处理以及如何将数据发送到输出和现场设备。熟练的 PLC 程序员可以轻松地使用我们将在本文中介绍的所有数据结构。除了基本结构之外,供应商还创建了可用于特殊应用程序的供应商定义的数据类型。示例包括计时器、计数器、运动等。最后,我们将深入研究用户定义的数据类型或 UDT;PLC 程序员创建自己的数据结构定义的一种方式。我们将回答为什么、如何以及何时使用 UDT?


一、基本数据结构

在本节中,我们将从 RSLogix 500 的角度介绍基本数据结构。在每一节中,我们将对比每个 PLC 程序员应该知道的 RSLogix 500 与 RSLogix 和 Studio 5000 的一些功能。

1、二进制或布尔 (BOOL) 数据类型

一个二进制值可以有两个值:0 或 1。二进制值用于数字输入状态。此类设备的示例包括接近传感器、门开关、继电器状  态、接触器状态等。
2、在 RSLogix 500 中创建二进制标记数组

    步骤 1 - 右键单击“数据文件”并选择“新建...”



RSLogix 500 中的数据结构 - 新文件
第 2 步 - 指定“类型”、“名称”、“元素”和“范围”

“文件”字段应默认为 PLC 上的下一个“未使用”位置。

“类型”字段应设置为“二进制”。

名称字段是必需的。

“描述”字段是可选的。

“元素”字段指定要创建的二进制数组的数量。



3、探索 RSLogix 500 中的二进制标签

一旦数组被初始化,用户就可以打开文件并检查其中的位的状态。

在 RSLogix 500 中,上面指定的“元素”字段将指示创建的整数(16 位)数组的数量。

除了位的状态之外,“数据文件”还允许 PLC 程序员为每个位添加描述。请注意,在此字段中指定描述与上面的“描述”不同。在这种情况下,系统将提示您以单个位为基础指定描述。



4、在 RSLogix 500 中使用二进制标签

二进制标签用于广泛的指令。最常见于 XIC(关闭时检查)、XIO(打开时检查)和 OTE(输出通电)。

为了寻址二进制地址,您需要指定数组和位地址。

示例:在上面的“数据文件B12”中,您可以通过调用地址“B12:0/0”来选择使用第一位



5、在 RSLogix 5000 / Studio 5000 中创建布尔标签

RSLogix 5000 和 Studio 5000 中二进制标签的名称是“Boolean”或“BOOL”。此外,标签是在个人基础上创建的。换句话说,可以创建单个位标签。

步骤 1 - 打开“控制器标签”或“程序标签”

第 2 步 - 打开“编辑标签”选项卡

第 3 步 - 通过指定“名称”和“数据类型”创建一个新标签

将“数据类型”设置为 BOOL。



6、在 RSLogix 5000 和 Studio 5000 中使用二进制标签

在 RSLogix 的最新版本中,布尔值的使用与 RSLogix 500 中略有不同。在 RSLogix 5000 和 Studio 5000 中,可以直接使用 BOOL 标签,而无需指定寄存器地址。



7、整数数据类型

一个整数包含 16 位(或布尔值)。整数用于存储限制、设定点、传感器值等。

Integer 的 16 位性质意味着一个有限的范围。在大多数情况下,值使用 15 位,而最后一位表示符号(+ 或 -)。在实际意义上,知道一个 16 位整数可以容纳从 -32768 到 32767 的值是很好的。如果整数

溢出 - 当整数增加或减少到低于上述指定的边界时发生的故障。

请务必注意,如果处理不当,溢出将导致意外行为。在 RSLogix 500 中,默认情况下,溢出将导致系统关闭并需要手动重置。在 RSLogix 5000 中,抛出一个小故障;该数字将循环回 0。

8、探索 RSLogix 500 中的整数标签

要创建一个新的整数文件,请按照与上述相同的步骤操作,但将“类型”指定为整数。

创建后,我们可以看到基于元素数量的数组出现在“数据文件”下。整数由“N”前缀指定,其显示方式与我们之前看到的二进制元素相同。

“Under the Hood”,程序员可以查看一个整数的每一位的状态。此外,他们可以选择在需要二进制或布尔标签的指令中使用整数的元素。



请注意,上面的示例说明了在 XIC 指令的上下文中文件 13 中整数 4 的第 11 位的使用。在 RSLogix 和 Studio 5000 PLC 编程中也可以完成相同的操作。

在 RSLogix 500 中,用户可以选择以二进制或十进制形式查看整数。这很重要,因为在许多情况下,程序员可能需要查看任何一种情况。



在上面的视图中,当选择十进制的“基数”时,程序员将以十进制形式显示每个整数的值。



上面的视图以二进制形式显示完全相同的整数。在这里,用户将获得整数的每一位的地址,并能够在基于位的命令中使用它们,如前所述。
二、浮点数或实数数据类型

Float 数据类型用于模拟数据。数据将包含整数和小数的值作为浮点数的一部分。

注意:在精度不是问题的某些模拟数据情况下,您可以使用整数。换句话说,您可以将模拟传感器的值存储在整数中。但是,整数不提供小数。(例如:100.45 浮点数 -> 100 整数)

1、探索 RSLogix 500 中的浮点标记

要在 RSLogix 500 中创建浮点数,您将遵循上述步骤。在“类型”字段中,选择“浮动”并按“创建”。



请务必注意,在某些情况下,您可能会使用浮点数而不是整数。但是,在执行某些操作时可能会丢失数据。我们始终建议您坚持使用相同类型的数据和寄存器,除非您绝对必须从一种转换到另一种。还建议尽可能在浮点数上使用整数。例如,您可能需要为模拟信号创建软件限制。可以将限制创建为整数。

2、中间数据结构

既然我们已经涵盖了三种基本结构,布尔型、整数型和浮点型,我们可以转到中间结构。我们不会涵盖每个寄存器的所有可能变体,而是专注于程序员绝对应该熟悉的内容。我们鼓励您自行探索各种预定义标签。

3、指令特定数据类型

指令特定的数据类型用于捕获关键数据并促进开发。最基本的示例是 Counter 和 Timer 数据类型。在 RSLogix 500、RSLogix 5000 和 Studio 5000 中,PLC 程序员需要初始化这些数据类型,以便使用上述指令。



由于在 RSLogix 500 中创建了 10x 计时器数据结构,我们可以看到上面的视图。在这里,您会注意到一个计时器在一个中包含多个基本结构。EN、TT 和 DN 数据是二进制的;它们可以是 0 或 1。BASE 结构是一个选择器;一个下拉菜单。PRE 和 ACC 结构是整数。这些整数存储计时器设置时的值以及计时器增量的当前值。

需要注意的是,在 PLC 编程中可以以多种方式使用 Timer 结构。最明显的方式是 TON 或 TOF 指令。在这些情况下,必须使用计时器构造。但是,PLC 程序员可以在其各自的能力范围内访问 EN、TT、DN、PRE 和 ACC 寄存器。用户可以使用适合特定数据类型的任何其他指令。例如:XIC 和 XIO 用于 DN 位检查定时器是否完成。

三、Studio 5000 定时器和计数器数据结构

在 RSLogix 和 Studio 5000 中,定时器结构包含与 RSLogix 500 中相同的元素。



上面的计时器表示将数据结构细分为子元素:DN、TT、EN、ACC 和 PRE 基本结构可供用户使用。需要注意的是,我们还没有介绍用于 PRE 和 ACC 寄存器的 DINT 结构。DINT 是一个双整数寄存器,它包含整数的双 (32) 位。

计数器具有相似的结构,但具有不同的数据类型。这是 Studio 5000 的屏幕截图。



需要注意的是,标签与 Timer 的标签不同。但是,该结构仍然分解为 DINT 和 BOOL。

1、特定的数据结构

RSLogix 和 Studio 5000 具有供应商提供的大量“预定义”数据类型库。定时器和计数器结构属于这一类。所有其他数据类型的定义可在如下所示的 IO 树中的定义下找到。



上面的数据结构特定于它们所服务的用例。如图所示,许多数据类型都以“AXIS”为前缀。这些数据类型用于伺服运动控制。

2、高级数据结构 - 用户定义的数据类型

上面的例子都是为用户预先创建的。通过在 RSLogix 500 或 RSLogix 5000 中创建一组新标签,可以创建上述任何结构的实例。但是,RSLogix 5000 和 Studio 5000 引入了添加用户定义数据类型或 UDT 的可能性。它们只不过是上面讨论的一组自定义数据。

四、为什么 UDT 有用?

创建一组标签的传统方法是通过数据数组。换句话说,PLC 程序员可以为应用程序分配一组 BOOL、DINT、定时器和其他标签。当使用这种方法时,阵列内的标签之间没有内聚性。可以基于设备分配标签,但这种方法不能扩展。让我们看一个例子。



在上面的简单示例中,程序员创建了具有 4 个不同 BOOL 标记的逻辑梯级。当他决定创建第二个电机启动器梯级时,他必须创建一个新梯级、4 个新标签,并且很可能将它们标记为“Start_PB2”、“Stop_PB2”等。很明显,以这种方式进行开发是乏味。此外,排除故障并将 PLC 外部的适当资源分配给这些数据会变得混乱。

如上所述,解决单个标签限制的一种方法是预先分配数组。下面是这种做法的一个例子。



在上面的梯级中,不同之处在于标签是在数组中指定的。标签是“BTCH_BOOL[0]”、“BTCH_BOOL[1]”等。这里的挑战有两个:

    程序员将需要添加注释以描述标签的用例是什么。这就是我们在标签上方看到的:“批量开始”、“批量停止”等。

    通过创建这样的结构,程序员被迫为应用程序所需的标签数量分配过多或过少的内存。


上面提到的问题的解决方案是用户定义的数据类型。
五、在 RSLogix 和 Studio 5000 中创建 UDT

在 Controller Organizer 下,右键单击“User-Defined”标签并选择“New Data Type...”



上面的屏幕显示了 Motor 结构的基本实现。请务必注意以下几点:

    UDT 由前面讨论的基本结构组成:BOOL、DINT、Timer。

    UDT 包含一个数组 (BOOL[32])。UDT 中的数组没有限制。

    UDT 结构允许在内部嵌套其他 UDT(注意:这并不意味着您应该过多地嵌套结构。)。
六、在 RSLogix 和 Studio 5000 中创建 UDT 实例

一旦 UDT 就位,就可以像其他方式一样创建该数据类型的标记。下面是一个已创建的类型为“UDT_Motor”的标签示例,如上文所定义。



一旦添加到梯形逻辑中,梯级中的标签将如下所示:



请注意:在这种情况下,标签属于哪个电机以及它们执行什么,无需附加注释就很清楚了。

七、PLC 数据类型和 UDT 的结论

PLC 程序员必须熟悉数据类型、它们在设备上占用多少内存以及如何在编程中使用它们。我们涵盖了从基本到高级的数据类型,包括允许用户创建自定义数据结构并增强其编程的用户定义数据类型。

如果您对 数据类型或用户创建自定义数据结构有任何疑问,请在微信公众号中或者加微信留言,下面。我们会阅读每条留言之后并尽量在 24 小时内回复!如果您的问题具有代表性,我们将单独写一篇文章详细说明。

有朋友、客户或同事可以使用这些信息吗?您可以分享这篇文章给他们。

扩展阅读:

西门子PLC  |  PLC硬件配置

AB PLC |  Studio 5000 定时器编程

西门子S7-1200全面取代S7-300?先看数据!



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则