如何在运行时在 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_PRG
内 numberOfTeachers
的值将导致数组 people
重新初始化,第一个 numberOfTeachers
条目是教师,其余条目是学生。您可以查看设备日志,其中我为 Teacher/Studemt 的 creation/destruction 写了消息。
PS。我自己还在探索CODESYS中Factory Design的可能性,如有错误请见谅!
我是 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_PRG
内 numberOfTeachers
的值将导致数组 people
重新初始化,第一个 numberOfTeachers
条目是教师,其余条目是学生。您可以查看设备日志,其中我为 Teacher/Studemt 的 creation/destruction 写了消息。
PS。我自己还在探索CODESYS中Factory Design的可能性,如有错误请见谅!