我正在使用 Beckhoff PLC,我正在尝试制作几个除了 IO 之外完全相同的 POU。我正在寻找一种方法,因此我必须只编写代码,但能够运行它而不是具有不同 IO 的代码。例如像在构造函数中声明 IO 的类。不同的 POU 也必须同时运行。我已经对具有继承的顺序功能图和功能块进行了一些研究,但这似乎并没有按照我想要的方式工作。我什至不确定我想要什么是可能的。
任何帮助表示赞赏。
缺口
我正在使用 Beckhoff PLC,我正在尝试制作几个除了 IO 之外完全相同的 POU。我正在寻找一种方法,因此我必须只编写代码,但能够运行它而不是具有不同 IO 的代码。例如像在构造函数中声明 IO 的类。不同的 POU 也必须同时运行。我已经对具有继承的顺序功能图和功能块进行了一些研究,但这似乎并没有按照我想要的方式工作。我什至不确定我想要什么是可能的。
任何帮助表示赞赏。
缺口
查看以下链接(尤其是底部的链接)以了解如何以面向对象的方式使用功能块: https://infosys.beckhoff.com/english.php?content=.. /content/1033/tc3_plc_intro/63050399827943947.html&id=
当您在功能块内使用 %I 和 %Q 时,您将获得该块的每个实例的可链接变量。将 FB 用作 TC3 中的对象或仅将 FB 用作 TC2 中的功能块时都会出现这种情况。(FB 将包含 IO)
另一种解决方案是制作一个符合您要求的 IO 对象,然后将其接口指针传递给处理它的功能块。(FB 将在与其并行声明的 IO 上工作,例如在 MAIN 中)
您的任务的解决方案实际上是基于您正在使用的 IDE。某些 IDE 不支持方法或在功能块中扩展某些支持。因此,实现的 OOP 级别取决于 IDE。
但是,是的,通常您可以将功能块用作类对象。但是您必须考虑到您不能动态更改输入或输出变量的数量或它们的类型。换句话说,是的,您可以将 FB 视为一个类,但事实并非如此。
我认为如果你从类似 C/C++ 的语言过渡到 ST,你需要改变你的思维方式。ST不同。你最好想得更像程序方法。我用来创建PLC独立程序或通用程序的原理,最常用的是指针。但同样,在不了解您的任务和 IDE 的情况下,很难提出建议。
像这样的问题,你已经决定用什么来解决你的任务,你问如何使用它,当你不得不问如何解决这样的任务以及使用什么并解释任务本身时。因为您的任务有可能使用与 PLC 世界中的 OOP 完全不同的工具经典地解决。
Function blocks are the closest thing you'll get to the equivalent in classes. The closest thing to a constructor in the Beckhoff world is FB_Init (https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/63050399827943947.html&id=).
How more specifically do you want things to work?