我是PLC编程的新手,我们需要为项目创建一个库。我们需要在运行时动态创建功能块实例。codesys主页上描述了一个概念:https://help.codesys.com/webapp/fb_factory;product=LibDevSummary;版本=3.5.15.0
我们试图实施这个例子,但没有成功。不幸的是,codesys主页上没有关于这个概念的进一步信息。有人建议过如何在plc运行时动态创建fb实例吗?
当您想要动态创建FB的实例时,首先需要将以下属性放在FB声明之上:
{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);
如果__NEW返回后指针=0,则表示__NEW无法分配内存。
我做了一个简单的经典OOP人员、教师、学生示例,这里有一个项目文件或PLCOpenXML文件。基本上,在PLC_PRG
内更改numberOfTeachers
的值将导致数组people
的重新初始化,其中第一个numberOfTeachers
条目是Teachers,其余条目是Students。您可以查看设备日志,我在其中编写创建/销毁教师/学生的消息。
PS。我自己仍在探索CODESYS中工厂设计的可能性,所以如果我犯了任何错误,请原谅!
更新23-03-16:纳入ohraaa 的建议变更