OOP 的一个重要部分是使用访问说明符使成员方法和变量无法从对象外部访问。
当声明一个功能块方法时很容易控制访问说明符,但是我还没有找到一种方法来控制对成员变量的访问。
有可能吗?如果可以,怎么做?
您在功能块的 VAR 部分下声明的每个变量都被视为私有变量。
IEC 61131-3 中没有变量的 public 或 private 关键字
如果您绝对想使用公共/私有关键字,您可以做的另一件事是定义属性。
通常,通常的约定是在功能块的 VAR_OUTPUT 部分中具有只读变量,在功能块的 VAR_INPUT 部分中具有可写变量。同样,VAR 部分被视为私有部分,即使您可以使用 fbName.var 表示法读取此变量或通过它们的地址写入它们(但这是一种非常糟糕的编程风格)。
Twincat2 还允许使用 fbName.var 表示法写入 VAR 部分中的变量,但这在 Twincat3 中进行了更改,以实现更好的封装。
要了解有关 IEC 61131-3 世界中编程约定的更多信息,我建议您阅读 PLCOpen 组织的编程指南:
您实际上仍然可以在代码中直接访问对象的内部变量(无指针),但它们是只读的。虽然代码完成不会显示内部变量,但是在您完成输入名称结构后,您将看不到编译错误 -test := fb1.internalVariable
实际上将是一个有效的读取操作,而fb1.internalVariable := 5;
最终会给您一个错误,说变量不是输入到功能块(或任何其他对象)。
您还可以使用hide
oder hide_all_locals
pragma 来禁止在自动完成和交叉引用列表中找到局部变量(请参阅https://infosys.beckhoff.com/content/1033/tc3_plc_intro/2529654667.html?id=5927203996458905204)