示例:AC模块教学
产品: CODESYS Application Composer
此示例展示了如何通过简单的照明控制来创建和使用可学习模块。
描述
这 CODESYS Application Composer 提供应用程序的模块化配置的能力。当该结构在模块树中定义一次时,就会从中生成一个静态 IEC 应用程序。发生这种情况时,模块直接与其子模块连接,并且无法在运行时更改。
此示例演示如何在运行时从一组单独的模块创建动态配置。
此外,该配置会被持久存储,以便每次重新启动应用程序时都可以下载最后设置的配置。
您可以使用包含的库,无需任何修改。该项目只是展示了该库的可能用例。所有需要的修改都已通过关键字注释的方式标记在代码中 AC_ModuleTeaching
。
附加信息
建筑学
可学习模块的理念基于学生-科目-教师原则。
学生可以学习老师教给他们的科目。学生是否可以学习特定科目由学生决定。因此,一个功能模块配置始终必须由一名教师、至少一名学生和至少一个科目组成。
考虑到架构 AC_ModuleTeaching
库,设计结果如下:
![]() |
这 TeacherModule
, SubjectModule
, 和 PupilModule
(或者 TeacherRegistration
)功能块派生自 AC.Module
功能块。这允许在模块树中配置这三种模块类型。
只有两个功能块与可学习模块的实现相关:
SubjectModule
和PupilModule
。TeacherModule
可以作为模块插入到模块树中,无需任何修改或附加配置。
顺序
初始化阶段进行如下:
![]() |
Init()
在第一个 PLC 周期中从基本 Application Composer 上下文中调用。
TeacherModule
:该模块扫描所有模块实例并报告每个实例SubjectModule
和PupilModule
(Register(THIS^)
)。这就建立了模块交叉通信的基本框架。SubjectModule
:每个模块都为自己分配了一个唯一的SubjectID
(UDINT
)。PupilModule
:每个模块必须注册自己的SubjectIDs
,它应该能够通过AddSubjectID(UDINT)
。
学习过程如下:
![]() |
对于任何事件(例如,单击可视化中的“学习”按钮), SubjectModule
实例报告给 TeacherModule
关于的电话 ReportTeacher()
。在 ReportTeacher()
, Report(THIS^)
的 TeacherModule
被隐式调用。这 TeacherModule
提供了 SubjectModule
与所有人的接口 PupilModule
实例通过 Learn(ISubject)
有机会学习 SubjectModule
。学习一个 SubjectModule
意味着 PupilModule
可能需要投射并标记 SubjectModule
本身(例如,通过存储在成员变量中)。
应用
对于任何特定的应用程序,您必须分别考虑什么人和谁将扮演“受试者”和“学生”的角色。例如,主体可以由传感器代表,瞳孔由演员代表。在该示例中,光传感器用于对象,光传感器用于瞳孔。光可以学会聆听不同传感器的声音,或者稍后再次忘记这些传感器。
实施中应注意以下几点:
光扩展 ACMT.Pup
Init()
: 添加可学习的内容SubjectID
Learn()
: 这个方法必须被覆盖。首先,应该调用基本实现:IF SUPER^.Learn(itfSubjectToLearn := itfSubjectToLearn) = ACMT.ERROR.NO_ERROR THEN
如果成功,则可以学习该主题。否则,该科目就无法学习并且可以被忽略。
END_IF
ForgetAll()
:这个方法也应该被覆盖并再次删除本地存储的主题。SwitchPush EXTENDS ACMT.SubjectModule // 间接通过继承链 SwitchOnOff -> SwitchBase
Init()
:定义SubjectID
CallPrioMediumStart()
: 呼叫ReportTeacher
如果按下传感器的时间超过 3 秒。持久化管理器
通过添加持久性管理器,可以保存所学的科目。因此,当应用程序重新启动时,将恢复上次状态。
系统要求和限制
编程系统 | CODESYS Development System (版本3.5.5.0或更高版本) |
运行时系统 | CODESYS Control Win (版本3.5.5.0) |
附加组件 | CODESYS Application Composer |