示例:第一步
产品: CODESYS Application Composer
此示例展示了如何开始创建和使用模块CODESYS Application Composer为此,您将创建一个带有灯和开关的房间。
描述
本示例实现了一个简短的楼宇自动化场景:为房间配备照明灯和相应的开关。开关也可用作调光器。因此,照明灯也应支持不同的亮度等级。
准备工作
创建新的CODESYS项目来自带有应用程序编写器的标准项目模板。选择
AC_ModuleBase
作为图书馆。顶级模块
Room
在项目的POU池中添加一个新的模块声明。指定名称
Room
模块声明和关联的功能块。功能块还必须扩展AC.Module
功能块定义在AC_ModuleBase
图书馆。AC.Module
功能块已经提供了许多不必覆盖的方法和属性。声明以关键字开头
MODULE
后跟模块名称和附加关键字IMPLEMENTED_BY
以及实现该模块的功能块。具体来说,该功能块是Room
刚刚创建的功能块。在大多数情况下,MetaData
部分现已声明。有关所有参数和部分的详细信息,请参阅:模块编辑器。
因为
Room
在我们的例子中,模块是顶级模块,你声明Toplevel
接下来的部分。在本节中,您将为全局变量列表定义一个名称,该列表包含生成后的顶层功能块的实例名称。之后,您仍然需要在Toplevel
部分。这项任务Standard_Task
在这个例子中。它被定义为MEDIUM
任务并包含CREATE_IF_MISSING
和UPDATE_IOS
旗標。所有用作描述和图标占位符的图标和字符串(
Desc
,Icon_16
, 和Icon_32
参数)必须在文本列表和图像池中引用。因此,您需要创建相应的文本列表TL
和一个图像池IP
在包含所引用的图标和文本的POU池中。子模块:
Switch
创建模块声明和相应的功能块,名称为
Switch
。此模块不是顶级模块,因此不需要Toplevel
部分。与所有代表模块的功能块一样,Switch
功能块还必须扩展AC.modules
。 而且,Switch
实现ISwitch
接口,您也需要创建它。反过来,ISwitch
接口扩展AC.IModule
但并没有添加任何新的方法或属性。此外,开关需要输入信号才能识别按下状态。您可以在
IO
部分,使用xIn
输入变量Switch
功能块。此外,您需要一个参考时间来区分开关的两个功能:按下开关的持续时间tTimer
启动调光功能——短按只会打开或关闭灯光。您可以定义输入变量tTimer
作为模块的参数(Parameters
部分)。这样,以后使用模块时就可以轻松设置时间。您定义变量
xIn
和tTimer
作为输入Switch
功能块,在其中设置 500ms 的初始值tTimer
范围。您还需要扩展文本列表和图像池以显示描述。
子模块:
SwitchSimple
您创建的第二个开关模块是一个简单的开关,只有两个状态:开和关。为此,您需要创建一个模块声明和一个功能块,它们与现有开关仅在以下几点不同:参数和
tTimer
变量不是必需的。此外,您无需实现ISwitch
但ISwitchSimple
,这也延伸了AC.IModule
。子模块:
Light
与之前的开关一样,对于灯,您也需要创建一个模块声明
Light
与Light
功能块和ILight
界面。要插入
Light
房间下方的模块,您需要添加Slots
部分到Light
模块声明。在本节中,您将声明一个子节Slot_Multi
,你称之为Lights
并且可以容纳以下类型的模块ILight
. 必须或可以添加到房间的灯的数量由Cardinality
。您还可以定义变量Variable
和Var_Count
并将它们链接到模块声明pLights(POINTER TO ILight)
和uiNumberOfLights (UINT)
。这确保只有其功能块实现的模块ILight
接口可以添加到Lights
投币口。随着
Light
模块,你还定义了一个可以插入交换机的插槽。因此,你需要添加一个Switch
插槽到Light
模块声明。附加参数Light
模块是调光器的速度rSpeed
和最大亮度uiMaxValue
最后,您需要定义一个表示灯光亮度的输出。您需要添加所有参数、插槽、输出以及Light
功能块。子模块:
LightSimple
你创建的最后一个模块是一个简化的灯,它与简单开关配合使用。为此,你需要一个模块声明和一个
LightSimple
功能块扩展AC.Module
并实施现有的ILight
接口。与Light
模块如下:输出应为类型BOOL
并有名字xSwitchedOn
。此外,rSpeed
参数不是必需的。执行
对于该功能的实现
Switch
模块,使用CallPrioMediumStart
方法来自AC.Module
并用其自身的实现覆盖它。选择此函数是因为Room
顶级模块声明一个MEDIUM
任务。这意味着CallPrioMediumStart
方法Switch
功能块会在任务的每个循环中自动调用。然而,开关的主要功能是区分开关和调光。按下开关后,计时器会启动,时间可以通过用户参数预设。当计时器计时结束,开关仍处于按下状态时,将应用调光功能,该功能由变量xPushLong
. 变量xPush
当开关按下很短时,为 TRUE。对于两个变量xPushLong
和xPush
,属性被添加到Switch
功能块和接口,以便可以从父级灯光功能块中使用它们。此外
Light
功能块覆盖CallPrioMediumStart
方法。根据相应输入变量的值,灯光可以调暗或简单地打开/关闭。对于调光器,声明参数的速度值rSpeed
被使用。达到最大或最小调光值后,调光停止。如果灯处于调光状态,按下开关,灯就会亮。您可以在示例项目中看到可能的实现。
工程
您可以在模块视图。为此,首先添加
Room
模块导入后,将顶层模块添加到模块树中。在Lights
插槽,添加一个Light
和一个LightSimple
. 为每个Switch
或SwitchSimple
然后,您可以设置模块实例的参数和 I/O。出于测试目的,建议将输入和输出链接到全局变量列表中的变量。最后,使用作曲家→创造命令创建项目。下载到设备后,您可以根据需要测试示例。您还可以改变房间的布局,而无需修改代码或模块。您还可以修改模块实例参数的值并检查其效果。参数值可以在离线和在线模式下更改。
系统要求和限制
编程系统 | CODESYS Development System(版本 3.5.17.0 或更高版本) |
运行时系统 | CODESYS Control Win(版本 3.5.17.0) |
附加组件 | CODESYS Application Composer |
注意
下载项目