如何在结构化文本的功能块中对成员变量使用访问说明符? (倍福,TwinCAT)

How can I use access specifiers on member variables in a function block in structured text? (Beckhoff, TwinCAT)

OOP 的一个重要部分是使用访问说明符使成员方法和变量无法从对象外部访问。
声明功能块方法时很容易控制访问说明符,但我还没有找到控制成员变量访问的方法。

是否可能,如果可能,如何实现?

您在函数块的 VAR 部分下声明的每个变量都被视为私有变量。

IEC 61131-3

中没有变量的 public 或私有关键字

如果您绝对想使用 public/private 关键字,您可以做的另一件事是定义属性。

一般来说,正常的约定是在Function Block的VAR_OUTPUT段有只读变量,在Function Block的VAR_INPUT段有可写变量。同样,VAR 部分被认为是私有部分,即使您可以使用 fbName.var 符号读取此变量或通过它们的地址写入它们(但这是一种非常糟糕的编程风格)。

Twincat2 还允许使用 fbName.var 符号写入 VAR 部分中的变量,但这在 Twincat3 中进行了更改以实现更好的封装。

要了解更多关于 IEC 61131-3 世界中的编程约定,我建议您阅读 PLCOpen 组织的编程指南:

https://plcopen.org/guidelines/guidelines

您实际上仍然可以在代码中直接访问对象的内部变量(没有指针),但它们是只读的。虽然代码完成不会显示内部变量,但是在您完成名称结构的输入后,您将看不到任何编译错误 - test := fb1.internalVariable 实际上是一个有效的读取操作,而 fb1.internalVariable := 5; 最终会给你一个错误,表示该变量不是功能块(或与此相关的任何其他对象)的输入。

您还可以使用 hidehide_all_locals 编译指示来抑制在自动完成和交叉引用列表中找到的局部变量(参见 https://infosys.beckhoff.com/content/1033/tc3_plc_intro/2529654667.html?id=5927203996458905204