示例: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(): 添加可学习的内容SubjectIDLearn(): 这个方法必须被覆盖。首先,应该调用基本实现:IF SUPER^.Learn(itfSubjectToLearn := itfSubjectToLearn) = ACMT.ERROR.NO_ERROR THEN如果成功,则可以学习该主题。否则,该科目就无法学习并且可以被忽略。
END_IFForgetAll():这个方法也应该被覆盖并再次删除本地存储的主题。SwitchPush EXTENDS ACMT.SubjectModule // 间接通过继承链 SwitchOnOff -> SwitchBase
Init():定义SubjectIDCallPrioMediumStart(): 呼叫ReportTeacher如果按下传感器的时间超过 3 秒。持久化管理器
通过添加持久性管理器,可以保存所学的科目。因此,当应用程序重新启动时,将恢复上次状态。
系统要求和限制
编程系统 | CODESYS Development System (版本3.5.5.0或更高版本) |
运行时系统 | CODESYS Control Win (版本3.5.5.0) |
附加组件 | CODESYS Application Composer |



