写入功能块内的 VAR_INPUT 与 VAR_IN_OUT 具有相同的行为

问题描述 投票:0回答:1

我附上这张图片,您可以看到输入变量被写入函数块内,编译器不会发出任何警告,但变量的值也会传播到调用者。这对我来说似乎是非常奇怪的行为 see image

我使用 twincat3 4024.22 和 4024.47 测试了这个示例,但行为是相同的,我希望编译器发出警告或错误,并且该值不会传播给调用者。

twincat codesys st
1个回答
0
投票

就我而言,感谢上帝,TwinCAT 并没有过于严格地采用那种奇怪的、受梯子启发的 IN/OUT 方法。一旦您不再只考虑 I/O 设备和电路图,“输入”和“输出”的概念很快就会崩溃。

VAR、VAR_INPUT、VAR_OUTPUT,它们都只是成员变量(在面向对象的意义上),一旦涉及指针或引用,就很容易绕过约束。如果你这样想的话,那么你所看到的就不奇怪了。

你可以说“VAR_INPUT”基本上是一个可以从其功能块外部读取和写入的VAR。将其视为“WRITABLE_PUBLIC_VAR”。这就是我使用它们的方式。

© www.soinside.com 2019 - 2024. All rights reserved.