如何在运行时在 plc 上动态创建 fb 实例?

How to dynamically create fb instances during runtime on a plc?

我是 PLC 编程的新手,我们需要为项目创建一个库。我们需要在运行时动态创建功能块实例。 codesys主页上描述了一个概念: https://help.codesys.com/webapp/fb_factory;product=LibDevSummary;version=3.5.15.0

我们尝试实现示例但没有成功。不幸的是,在 codesys 主页上没有关于这个概念的更多信息。 有人对如何在 plc 运行时动态创建 fb 实例有什么建议吗?

当你想动态创建一个 FB 的实例时,你需要首先将以下属性放在 FB-Declaration 之上:

{attribute 'enable_dynamic_creation'}

然后你必须确保你没有循环调用__NEW(FB_NAME)。

然后你将__NEW(FB_NAME)的结果赋给一个指针:

//Put this is the declaration section   
pfbName : POINTER TO FB_NAME;
//Your call to create a dynamic instance
pfbName := __NEW(FB_NAME);

如果你的指针在__NEWreturns之后=0,说明__NEW分配内存失败

我做了一个简单的经典 OOP Person, Teacher, Student 例子 here。 基本上,更改 PLC_PRGnumberOfTeachers 的值将导致数组 people 重新初始化,第一个 numberOfTeachers 条目是教师,其余条目是学生。您可以查看设备日志,其中我为 Teacher/Studemt 的 creation/destruction 写了消息。

PS。我自己还在探索CODESYS中Factory Design的可能性,如有错误请见谅!