Jump to content
  • Sign in to follow this  

    西门子 Tia Portal – 调用功能块的不同实例

       (0 reviews)

    leigehong

    在上一篇文章中,我们讨论了什么是功能块 FB、它在 PLC 程序中如何工作以及如何创建和使用功能块 FB。在本文中,我们将讨论西门子 Tia Portal 中不同功能块类型的数据块实例以及何时使用每种类型。

    内容:

    • 什么是功能块 FB?
    • 数据实例的不同选项。
    • 单实例。
    • 参数实例。
    • 多实例。

    什么是功能块?

    功能块或 FB 只是包含代码逻辑的块。您可以使用该 FB 通过编写在其中的代码片段来实现特定的功能。

    当在代码中调用功能块时,系统会要求您分配一个数据块(也称为数据实例)与该 FB 关联,以保存 FB 参数的值。并非 FB 内的所有参数都保存在数据实例中,但我们稍后会讨论这一点。

    调用功能块时,您有 3 个不同的选项用于将数据块实例与此函数调用相关联。这些不同的选项将取决于您调用 FB 的位置。

    所以,简而言之。功能块FB基本上是具有专用数据块 DB 的功能 FC,该数据块用于存储功能块参数的值。

    数据实例的不同选项

    对于功能块的数据实例,我们有 3 个不同的选项,这些选项是:

    • 单实例。
    • 参数实例。
    • 多实例。

    三个不同的调用数据实例来自 3 种不同的调用方法:

    • 您可以在主 OB1 内调用功能块 FB,这将为您提供以下选项:
    • 单实例。

     

    • 您可以在功能 FC 内调用功能块 FB,这将为您提供两种选择
    • 单实例
    • 参数实例

     

    • 您可以在另一个功能块内调用该功能块,这将为您提供创建数据实例的三个可用选项
    • 单实例
    • 参数实例
    • 多个实例

    单个数据实例

    首先,让我们从创建一个功能块 FB 开始,正如我们之前提到的,我们通过单击 “添加新块” 并选择我们想要的块类型来创建一个功能块。见图1。

    150-1.gif

    图 1 – 创建功能块 FB

    现在,我们将在主 OB1 中创建的 ReusableFB 称为 ReusableFB。见图2。

    150-2.gif

    图 2 – 调用主 OB1 内的 FB

    正如您从上图中看到的,在主 OB1 内调用 FB 时,系统会要求您分配一个与该 FB 调用关联的数据实例。在这种情况下,只有一个选项,那就是单一实例。

    选择单实例选项后,将创建一个数据块并与 FB 调用关联。见图3。

    150-3.gif

    图 3 – 创建的单个实例

    创建的单个实例将用于存储一些 FB 参数的值。如输入、输出、In Out 和静态参数。

    FB 的其他参数将不会被存储,例如温度和常量。见图4和图5。

    150-4.gif

    图 4 – 数据保存在数据实例内部

    150-5.gif

    图 5 – 从 FB 保存到数据实例的数据。

    现在,让我们在 FB 中创建一个简单的逻辑,以帮助我们更好地理解数据实例。该逻辑会将常量值 15 添加到静态变量,然后将结果移至输出。见图6。

    150-6.gif

    图 6 – 创建一个简单的逻辑

    现在,返回主 OB1 并注意 FB 调用现在的情况。见图7。

    150-7.gif

    图 7 – 每次更改后更新 FB 调用

    您对 FB 内部逻辑所做的任何更改都将导致需要更新功能块调用,以便可以应用您所做的更改。

    您可以通过右键单击 FB 调用并按更新块调用选项或重新编译 PLC 代码来更新块调用。见图8。

    150-8.gif

    图 8 – 更新 FB 调用

    更新块调用后,您在 FB 代码中所做的更改将在块调用中应用和使用。如图 9 所示。

    FB 现在期望提供 bool 类型的输入信号,并且 FB 将给出 int 类型的输出。

    150-9.gif

    图 9 – 输入和输出现在与 FB 调用关联

    让我们模拟我们的代码,看看 PLC 将如何运行。请参阅下一个动画,该动画显示了迄今为止 PLC 逻辑的简单模拟。

    spacer.png

    从动画中可以看出,每当启动信号为 TRUE 时,该函数就会被执行,并且输出不断变化。一旦启动信号不再可用,输出将保持在最后记录的值。

    这里数据实例的用途是静态变量和输出变量的值保存在单个实例内,因此当启动信号再次返回时,函数将从最后记录的值继续。

    非常重要的注意事项

    切勿对 FB 的两次不同调用使用相同的单个实例。请看下一个动画。

    spacer.png

    正如您从动画中看到的,我们有两个不同的 FB 调用,但两个调用都与同一个实例关联,这就是为什么即使 start2 信号为 FALSE,Output2 值也会随 Output1 变化。

    正如您所期望的,第一次调用的数据实例的更改也会在第二次调用中受到影响,因为它们具有相同的内存块。见图10。

    150-12.gif

    图 10 – 切勿在不同的 FB 调用中使用相同的数据实例

    如果您对不同的 FB 调用使用相同的数据实例,则您的功能块将不再可重用。即使每个不同的 FB 调用的输入/输出参数都不同。正如您从上一个视频(动画)中看到的那样,即使第二个调用甚至没有启用输入信号,两个调用也具有相同的结果。

    另一个非常重要的注意事项

    我们之前说过,如果您从更高级别的 FC 调用您的 FB,则关联的数据实例将有两个选项;这些选项是单个实例参数实例。见图11。

    150-13.gif

    图 11 – 使用带有从 FC 调用的 FB 的单个实例

    如果发生这种情况,并且您将在 FC 内调用 FB则您永远不应该为 FB 使用单个实例。要知道这是为什么。见图12

    150-14.gif

    图 12 – 多次呼叫上级 FC

    从图 12 中可以看出,当您在逻辑中多次调用更高级别的 FC 时,不会要求您分配数据块,因为 FC 不需要数据块。

    但是你知道 FC 内部有一个叫做 FB 的,这个FB有一个与之关联的单个实例。因此,现在 3 个 FC 调用对于 FB 调用具有相同的数据实例。因此,您的函数 FC 不再可重用。

    该怎么办?当您需要在 FC 内调用 FB 时,最佳选择是使用参数实例。

    参数实例

    正如我们之前所说,如果您在 FC 内调用 FB,则不应选择单个实例,而参数实例更适合您的可重用性目的。

    参数实例将保存调用到 FC 块接口的 In Out 区域的 FB 的数据实例。允许您为每个 FC 调用输入新的数据实例。见图 13 和 14。

    150-15.gif

    图 13 – 在 FC 内调用 FB 时分配参数实例

    150-16.gif

    图 14 – 每个 FC 调用都需要一个新的数据实例

    从上图中可以看出,每当您在程序中调用 FC 时,它都会为 FC 内的可重用 FB 请求数据实例。

    但是,使用这种方式您将必须自己创建数据实例。见图15。

    150-17.gif

    图 15 – 创建一个新的数据实例

    要创建新的数据实例,您可以执行与创建 FC 或 FB 相同的操作,但这次您选择 DB 选项。并确保选择的 DB 类型与调用的 FB 相同。

    现在,您的 FC 可以根据您的需要多次重复使用,您只需为每次调用创建一个实例即可。见图16。

    150-18.gif

    图 16 – 将 DB 分配给 FC 调用

    多实例数据库

    多实例 DB 简单来说就是被调用 FB 的 DB 将存储在更高级别调用 FB 的 DB 中。仅当您从另一个 FB 调用一个 FB 时,此选项才可用。

    让我们创建另一个 FB 将其用作更高级别的 FB。

    创建此 HigherLevelFB 后,从主 OB1 调用它,当然唯一的调用选项将是单个实例,如前所示。见图17。

    150-19.gif

    图 17 – 从主 OB1 调用 UpperLevelFB

    现在,从 HigherLevelFB 调用 ReusableFB。并选择多实例选项。见图18。

    150-20.gif

    图 18 – 分配多实例 DB

    当您选择多实例选项时,创建的 DB 将存储在调用 FB 的静态参数内。见图19。

    150-21.gif

    图 19 – 实例保存在静态参数内

    您可以多次调用 ReusableFB,每次调用它时,多实例都会存储在静态参数中。见图20。

    150-22.gif

    图 20 – 多次调用 ReusableFB

    正如您所看到的,下级 FB 的数据实例将保存在上级 FB 的数据实例内。最好有更好的程序结构和易于阅读的逻辑。

    结论

    在代码中创建功能块需要将数据块与您在逻辑中进行的每个 FB 调用相关联。该数据块或也称为数据实例具有不同的选项,具体取决于调用 FB 的块的类型。

    选择数据实例类型时要小心,因为某些选项可能不适合您的情况,如我们之前所示。有时这可能会导致您的逻辑出现问题,并且您的函数无法再重用。

    使用多实例可以帮助更好地组织程序结构,因为所有被调用的 FB 都会将其 DB 存储在主调用 FB 中。

    Sign in to follow this  


    User Feedback

    Create an account or sign in to leave a review

    You need to be a member in order to leave a review

    Create an account

    Sign up for a new account in our community. It's easy!

    Register a new account

    Sign in

    Already have an account? Sign in here.

    Sign In Now

    There are no reviews to display.


×
×
  • Create New...