部分:代理
这部分 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
代理模块的变量类型必须与模块参数使用的变量类型匹配。仅允许原始类型和枚举在相应应用程序的初始化阶段,代理参数一次性设置为模块实例中配置的值。当应用程序运行时,这些变量不会镜像到代理中
功能块的名称可以用命名空间路径限定。
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