在项目中对控制器应用程序进行编程
声明全局变量
首先,声明要在整个应用程序中使用的变量。为此,请在下面创建一个全局变量列表 应用程序:
选择
Application
输入并点击 在上下文菜单中。更改默认名称GVL
到Glob_Var
并点击 添加 确认。这
Glob_Var
对象显示如下Application
。GVL 编辑器在设备树的右侧打开。当文本视图打开时,它已经包含关键字
VAR_GLOBAL
和END_VAR
。对于我们的示例,单击编辑器右侧栏上的按钮可激活表格视图。
出现一个空行。光标位于 姓名 柱子。
在快捷菜单中,单击 插入。
打开一个输入字段。同时, 范围
VAR_GLOBAL
还有 数据类型BOOL
会自动输入到该行中。指定
rTempActual
在 姓名 场地。双击 数据类型 柱子。
现在可以编辑该字段,并且
按钮显示。
点击
按钮,然后选择 输入助手。
这个 输入助手 对话框打开。
选择数据类型
REAL
并点击 好的。在中输入一个数值 初始化 列(示例:
8.0
)。
以相同的方式声明以下变量:
姓名 | 数据类型 | 初始化 | 评论 |
---|---|---|---|
|
|
| 实际温度 |
|
|
| 设定温度 |
|
|
| 门的状态 |
|
|
| 压缩机运行后发出信号的时间 |
|
|
| 开门后会发出信号的时间 |
|
|
| 控制信号 |
|
|
| 控制信号 |
|
|
| 状态消息 |
在 CFC 编辑器中创建冷却控制的主程序
现在,您将在 main 中描述应用程序的主要功能 PLC_PRG
POU,默认情况下创建。当实际温度高于设定温度加上滞后时,压缩机被激活并冷却。当实际温度低于设定温度减去滞后时,压缩机关闭
要使用 CFC 实现语言描述此功能,请执行以下步骤:
在设备树中,双击
PLC_PRG
。CFC 编辑器在中打开
PLC_PRG
选项卡。声明编辑器以文本或表格形式出现在图形编辑器区域的上方。这个 工具箱 视图在右边。在 工具箱 查看,选择 输入 元素并将其拖动到下方的 CFC 编辑器中 PLC_PRG 选项卡。
无名条目
???
已插入。在 CFC 编辑器中,单击
???
在输入处,然后单击打开输入助手。 变量 类别,选择
rTempActual
变量在下面 。这是引用全局变量的rTempActual
这里。输入名称是
Glob_Var.rTempActual
。与步骤 3 一样,使用全局变量的名称创建另一个输入
Glob_Var.rTempSet
。创建另一个输入,然后单击
???
然后用名字替换它们rHysteresis
。因为这不是已知变量的名称, 自动申报 对话框打开。该名称已在对话框中使用。
在 自动申报 对话框,指定 类型 作为
REAL
和 初始化 作为1
。点击 好吧 按钮。变量
rHysteresis
出现在声明编辑器中。在 工具箱 查看,选择 阻止 元素并将其拖动到下方的 CFC 编辑器中 PLC_PRG 选项卡。
POU 在 CFC 编辑器中打开。
替换
???
和ADD
。POU 会添加与其连接的所有输入。
连接
Glob_Var.rTempSet
输入到ADD
POU。为此,请单击输入的输出引脚并将其拖动到输入引脚的上方ADD
POU。以同样的方式,连接输入
rHysteresis
使用较低的输入值ADD
POU。两个输入
rHysteresis
和Glob_Var.rTempSet
现在添加者ADD
。要在编辑器中移动元素,请单击元素中的空白区域或单击框架,这样该元素即被选中(红色边框,红色突出显示)。将元素拖动到所需位置。
在右边创建另一个 POU
ADD
POU。它的目的是比较Glob_Var.rTempActual
总和为Glob_Var.rTempSet
和rHysteresis
。分配GT
函数(大于)到 POU。这个
GT
POU 的工作原理如下:IF (upper input > lower input) THEN output := TRUE;
连接输入
Glob_Var.rTempActual
到输入的上方GT
POU。连接输出
ADD
POU 到较低的输入端GT
POU。现在使用方块元素在右边创建一个功能块
GT
POU 根据输入条件启动和停止压缩机(设置 — 重置)。指定名字SR
在???
领域。按回车键关闭 POU 上方的打开输入字段SR_0
)。这个 自动申报 对话框打开。
用名称声明变量
SR_0
和数据类型SR
。点击 好吧 按钮。这个
SR
POU 来自Standard
库已实例化。SR
用于定义THEN
在 GT POU 的输出处。输入SET1
和RESET
出现。连接右侧的输出引脚
GT
POU 到SET1
的输入SR_0
POU。SR
可以从中设置布尔变量FALSE
到TRUE
然后又回来了。当条件处于输入SET1
满意,布尔变量设置为TRUE
。当条件为时,变量将再次重置RESET
很满意。我们示例中的布尔(全局)变量是Glob_Var.xCompressor
。创建一个 输出 元素并将其分配给全局变量
Glob_Var.xCompressor
。在两者之间拖动一条连接线Glob_Var.xCompressor
和输出引脚Q1
的SR
。
现在指定压缩机应再次关闭的条件(在本例中, RESET
SR POU 的输入会得到 TRUE
信号)。为此,请制定与上述条件相反的条件。 SUB
(减法)和 LT
(少于)用于执行此操作的 POU。
结果是以下 CFC 图表:

在梯形图编辑器中创建用于信号管理的 POU
在另一个 POU 中,您现在将实现警报蜂鸣器以及开启和关闭灯泡的信号管理。梯形图 (LD) 实现语言适合于此。
在自己的网络中处理以下每个信号:
当压缩机因温度过高而运行时间过长时,会发出连续的声音信号。
当门打开时间过长时,会发出间歇性信号。
只要门开着,灯就会亮。
在设备树中,在
Application
对象,创建一个类型的 POU 对象 程序 使用 梯子(LD2) 实现语言。将程序命名为
Signals
。这个
Signals
程序列在设备树旁边PLC_PRG
。梯形图编辑器将在中打开Signals
选项卡。声明编辑器出现在上部, 工具箱 向右看。梯形图包含一个空网络。网络中创建程序,这样,当压缩机运行时间过长而未达到指定温度时,就会发出声音信号。为此,请插入
TON
接下来的步骤中计时 POU。它将布尔信号切换为TRUE
在指定的时间之后。在 工具箱 查看,拖动 阻止 元素并将其拖放到空网络中到可用的插入位置。
该模块显示为一个包含输入和输出的方框。
双击三个问号 (
???
) 在区块中,然后单击线条编辑器中的符号。
这个 输入助手 对话框打开。
在 输入助手 对话框,在 标准功能块 类别,在 标准 库,选择
TON
计时器 然后点击 好吧。现在在块的行编辑器中,它显示了功能块的名称
TON
,按 Enter 键。这个
TON
POU 与其输入和输出一起显示。要删除
EN
输入和ENO
输出,选择方块并单击 EN/ENO → EN 在上下文菜单中。现在这个方块只有
IN
和PT
输入和Q
和ET
输出。双击块正上方的三个问号[???],输入
TON_0
作为实例名称,然后按 Enter 键。您已经确认了实例名称。这个 自动申报 对话框打开。
点击 好吧 确认对话框。
现在插入
TON
POU 实例化的名称TON_0
。对模块进行编程,使其在压缩机开始运行后立即激活。首先拖动
Contact
来自的梯子元素 工具箱 前面的视图IN
区块的输入。双击三个问号,然后在行编辑器中单击该图标 ()。在输入助手中,现在选择已经声明的全局变量 x压缩机 然后点击 好吧。
变量名
Glob_Var.xCompressor
显示在联系人上方。提示
当你开始在输入位置键入变量名时,你将自动获得所有变量的列表,其名称以键入的字符开头,此时可以使用。此帮助是中的默认设置 CODESYS 智能编码的选项。
插入要激活的信号。为此,请将 线圈 从 工具箱 看法, 梯子 类别,
Q
输出TON
块。指定名称Glob_Var.xSignal
对于线圈。定义从 POU 激活开始的时间段
TON_0
直到信号响起。此定义通过变量进行Glob_Var.timAlarmThreshold
,为此目的,您可以在输入处插入PT
的TON_0
。为此,单击输入引脚左侧的细边框并输入变量名称。按回车键。
这个 自动申报 对话框打开。
点击 好吧 确认对话框。
新声明的变量显示在声明部分。
选择
TON
POU 并点击 移除未使用的引脚 在上下文菜单中。未使用的输出
ET
已移除。在 LD 的第二个网络中,进行编程,使门打开时间过长时会间歇性地发出信号。
用鼠标拖动 网络 元素来自 工具箱 查看网络 1 下方的插入点。
带有该号码的空网络 2 出现。
就像在第一个网络中一样,实现
TON
POU 用于按时间控制激活信号。这次是由全局变量触发的Glob_Var.xDoorOpen
在输入处IN
。在输入处PT
,添加全局变量Glob_Var.timDoorOpenThreshold
。来自
Util
库,添加一个BLINK
输出端的 POUQ
的TON
在此网络中使用 POU 并使用名称对其进行实例化Blink_0
。这个
BLINK_0
POU 对信号转发进行计时Q
因此Glob_Var.xSignal
。首先,拖动两个 联系我们 元素来自 工具箱 查看
OUT
U 的输出。分配变量TON_1.Q
输出后直接与联系人联系Q
和全局变量Glob_Var.xDoorOpen
致第二个联系人。插入 线圈 两个联系人之后的元素并分配全局变量
Glob_Var.xSignal
对它来说。声明局部变量
timSignalTime : TIME := T#1S;
然后在输入处插入这个变量TIMELOW
和TIMEHIGH
。循环时间为 1 秒TRUE
并且 1 秒为FALSE
。选择
TON
POU 并点击 移除未使用的引脚 在上下文菜单中。未使用的输出
ET
已被移除。在第三个网络中,进行编程,使灯在门打开时一直亮着。添加一个附加网络和一个触点。分配变量
GlobVar.xDoorOpen
致聯絡人。插入的触点直接通向线圈。在触点右侧添加线圈并分配全局变量
Glob_Var.xLamp
到线圈上。CODESYS 接一个地处理 LD 的网络。现在,在网络 1 的末尾安装一个跳转到网络 3 的程序,以确保只执行网络 1 或仅执行网络 2:
当您将鼠标指针悬停在网络左上角第三行时,信息 <在此处插入跳转> 出现。双击此位置并输入 门打开了: 作为行编辑器中的跳转标签。
选择网络 1. 从 工具箱 看法, 梯形图 类别,拖动 跳 元素到插入位置,前面有一个三角形标记
Glob_Var.xSignal
线圈。出现跳跃元素。跳转目的地仍指定为
???
。双击三个问号 [???],然后单击行编辑器中的图标 (
)。在 输入助手 对话框中,选择
DoorIsOpen
从可能的标签标识符中单击 好的 确认。网络 3 的标签已实现。
现在 LD 程序如下所示:

在主程序中调用 “Signals” 程序
在我们的程序示例中,主程序 PLC_PRG
应该打电话给 Signals
信号处理程序。
在设备树中,双击
PLC_PRG
。这个
PLC_PRG
程序在编辑器中打开。在 工具箱 查看,拖动 阻止 向编辑器添加元素
PLC_PRG
。双击三个问号 [???]然后点击
线条编辑器中的符号。 输入助手 对话框,在 POU/程序和函数调用 类别,选择
Signals
编程,然后单击 好吧 进行确认。
为模拟创建 ST POU
由于此示例项目中的应用程序未链接到物理传感器和执行器,因此您还需要编写一个程序来模拟温度的升高和降低。这将允许您随后在联机模式下监视冰箱控制器的操作。
您使用结构化文本创建仿真程序。
该程序会增加温度,直到主程序启动 PLC_PRG
确定已超过设定温度。然后程序激活压缩器。然后,仿真程序降低温度,直到主程序再次禁用压缩机
在设备树中,右键单击 应用程序 对象,然后添加一个类型为 POU 的对象 程式 和 结构化文本 (ST) 实现语言。将 POU 命名为
Simulation
。在 ST 编辑器中实现以下代码:
声明部分:
PROGRAM Simulation VAR TON_1: TON; //The temperature is decreased on a time delay, when the comepressor has been activated P_Cooling: TIME:=T#500MS; xReduceTemp: BOOL; //Signal for dereasing the temperature TON_2: TON; //The temperature is increased on a time delay P_Environment: TIME:=T#2S; //Delay time when the door is closed P_EnvironmentDoorOpen: TIME:=T#1S; //Delay time when the door is open xRaiseTemp: BOOL; //Signal for increasing the temperature timTemp: TIME; //Delay time iCounter: INT; END_VAR
实现部分:
iCounter := iCounter + 1; // No function, just for demonstration purposes. // After the compressor has been activated due to TempActual being too high, the temperature decreases. // The temperature is decremented by 0.1°C per cycle after a delay of P_Cooling IF Glob_VAR.xCompressor THEN TON_1(IN:= Glob_Var.xCompressor, PT:= P_Cooling, Q=>xReduceTemp); IF xReduceTemp THEN Glob_Var.rTempActual := Glob_Var.rTempActual-0.1; TON_1(IN:=FALSE); END_IF END_IF //If the door is open, the warming occurs faster; SEL selects P_EnvironmentDoorOpen timTemp:=SEL(Glob_Var.xDoorOpen, P_Environment, P_EnvironmentDoorOpen); //If the compressor is not in operation, then the cooling chamber becomes warmer. //The temperature is incremented by 0.1°C per cycle after a delay of tTemp TON_2(IN:= TRUE, PT:= timTemp, Q=>xRaiseTemp); IF xRaiseTemp THEN Glob_Var.rTempActual := Glob_Var.rTempActual + 0.1; TON_2(IN:=FALSE); END_IF
提示
我们建议您使用可视化来方便操作和监控整个控制器程序。使用创建的可视化效果 CODESYS 可视化安装在本教程的已完成示例项目中,该项目随附于 CODESYS 标准安装 (Projects
目录)。你可以将这个项目下载到控制器并启动它,看看它与可视化协同工作。启动时, Live_Visu
首先是冰箱的表示,它无需输入任何数据即可重现仿真程序的操作。但是,您可以通过单击开/关开关来打开和关闭门。可以通过旋转控制的指针来调整默认温度。在本教程中,我们将不介绍可视化的创建。的帮助中计划了相应的教程 CODESYS 可视化。
定义要在任务配置中执行的程序
默认任务配置包含对主程序的调用 PLC_PRG
。对于我们的示例项目,您还需要添加调用 Simulation
程序。
在设备树中,拖动
Simulation
进入MainTask
下方 任务配置。这个
Simulation
程序已插入任务配置。要查看任务配置,请双击
MainTask
打开编辑器的入口。在编辑器下部的表格中,您可以看到任务调用的 POU:
PLC_PRG
(默认输入)和Simulation
。任务的呼叫类型是 循环的 间隔为 20 毫秒。在联机模式下,任务将在每个周期执行两个 POU 一次
定义与 PLC 通信的 “活动应用程序”
的名字 Application
以粗体显示在 设备 观点。这意味着此应用程序被设置为 “活动应用程序”。然后,与控制器的通信指的是此应用程序。
当项目中只有一个应用程序时,它会自动成为活动应用程序。如果您的应用程序尚未激活,请按如下方式将其激活:
在的上下文菜单中
Application
,点击 设置活动应用程序。应用程序 现在以粗体显示在 设备 观点。
调试应用程序
当你输入代码时, CODESYS 通过在相关文本下方使用红色波浪下划线立即提醒您出现语法错误。检查结果也显示在消息视图中。如有必要,单击 打开消息视图。消息显示在 预编译 消息类别。您可以选择一条消息,然后按 F4 键跳到代码中的相应点。将应用程序下载到控制器后,将对应用程序进行更多测试。
之后,只能将无错误的应用程序下载到控制器。