如何在TwinCAT 3 HMI Engineering中访问REFERENCE-TO-X的成员
TwinCAT 3 HMI(v1.12.760.48)访问PLC REFERENCE TO/POINTER TO类型变量的问题解答
1. 是否有设置可开启REFERENCE-TO-X/POINTER-TO-X的成员访问?
目前没有官方公开的全局设置可以直接开启这类类型的隐式成员访问。你手动删除schema中allowImplicitAccess=false的操作属于临时 workaround,但会因为PLC符号重新映射被覆盖,还会触发HMI工程警告,不适合长期使用。
2. 更优解决方案
这里提供几个稳定可行的方案:
- 改用接口指针(
IMyFB):这是当前版本官方明确支持的方式,只要接口定义了需要访问的成员,HMI可以直接通过接口指针访问,无兼容性问题,是最稳妥的选择。 - PLC层封装访问接口:编写辅助FB或函数,把引用/指针指向的实例成员通过普通变量暴露给HMI。示例代码:
之后HMI直接绑定这个辅助FB的输出变量即可,避开引用/指针的访问限制。FUNCTION_BLOCK FB_ReferenceWrapper VAR_INPUT refMyFB : REFERENCE TO MyFB; END_VAR VAR_OUTPUT ExposedMember1 : INT; // 对应MyFB的目标成员 ExposedMember2 : BOOL; END_VAR // 把引用指向的成员赋值给输出变量 ExposedMember1 := refMyFB.Member1; ExposedMember2 := refMyFB.Member2; - 升级TwinCAT版本:后续版本(如v1.13及以后)可能修复了该限制,可以尝试升级到最新稳定版测试,升级前务必做好工程备份。
3. 默认禁用是否为bug?
这更像是官方的设计限制而非bug。尽管文档宣称v1.12.748.0起支持引用和指针解析,但实际仅开放了接口指针的访问。推测是因为REFERENCE TO/POINTER TO直接指向具体FB实例,存在类型安全、内存访问权限的考量,官方暂时通过限制隐式访问来保证稳定性,仅保留接口指针这种更可控的访问方式。
补充说明:你设置的{attribute 'monitoring' := 'call'}和全开的符号权限,已经满足了基础访问条件,但无法绕过当前版本对非接口类型引用/指针的限制。
内容的提问来源于stack exchange,提问作者Cédric Moers
相关产品推荐
相关产品推荐

