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

    Recommended Comments

    There are no comments to display.



    Create an account or sign in to comment

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

    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

Apply for friendship links:WhatsApp or E-mail: admin@plchmis.com
×
×
  • Create New...