Skip to main content

部分:代理

这部分 Proxies 定义一个实现代理的功能块。

代理服务器用于不同应用模块之间的数据交换。代理 FB 的实例代表远程应用程序中的模块实例。

SEC Proxies                                    //optional: yes, modifier: [UPDATE]
    SEC Proxy : <identifier>                   //optional: yes, modifier [UPDATE]
            FB := <FB name>;                       //optional: no, type: QID
            SEC MirrorVar : <identifier>           //optional: yes, modifier [UPDATE])
                    Variable := <variable name>;       //optional: no, type: VarPath
            END_SEC
            SEC ProxyParameter : <target>          // optional: yes, modifier [UPDATE]
                    Variable := <InstancePath>;        // optional: no, type: VarPath
            END_SEC
    END_SEC
END_SEC

有关定义类型语法的详细信息,请参阅 部分 模块声明

. 规格:
  • 功能块必须派生自 IBaseInstance

  • 功能块必须有一个方法 SetProxyIdentification 具有以下签名,该签名不包含在接口中 IBaseInstance:

    SetProxyIdentification(pbyName : POINTER TO BYTE, udiComAddr : UDINT, udiLocalComAddr : UDINT, pEnvironment : MEnv)

    传递的实例名称和设置的地址必须从属性中返回 InstanceName, ComAddress, 和 LocalComAddress

  • 功能块不得派生自 IModule

  • 这部分 MirrorVar 允许将模块实例的变量镜像到其代理实例。为此,必须在定义中声明变量的实例路径 Variable,必须以相对(相对于模块实例 FB)路径的形式进行说明。以下规则适用于模块实例 FB 的指定变量:

    • 该变量必须是模块实例 FB 的变量、输入或输出的一部分。

    • 它必须在模块 FB 以及代理 FB 中定义

    • 两个 FB 中的类型必须相同

    • 它必须有一个原始类型;因此,不允许将指针、接口或结构作为一个整体进行镜像,而只允许简单类型(数字、字符串、时间等)

    如果指定的变量满足这些条件,它们将作为 RMP 的一部分自动传输,用户无需再担心传输问题。

  • 这部分 ProxyParameter 允许定义代理参数。应考虑以下几点:

    • 的目标 ProxyParameter 必须对应模块的参数目标

    • variable 代理模块的变量类型必须与模块参数使用的变量类型匹配。仅允许原始类型和枚举

    • 在相应应用程序的初始化阶段,代理参数一次性设置为模块实例中配置的值。当应用程序运行时,这些变量不会镜像到代理中

  • 功能块的名称可以用命名空间路径限定。

25. 例子
SEC Proxies
        SEC Proxy ProxyFB1
                FB := ProxyModule1;
                SEC MirrorVar : diInput
                        Variable := diInput;
                END_SEC
                SEC ProxyParameter : InParam1
                        Variable := TL.Input1_Name;
                END_SEC
        END_SEC
END_SEC