在项目中对控制器应用程序进行编程
声明全局变量
首先,声明要在整个应用程序中使用的变量。为此,请在下面创建一个全局变量列表 应用程序:
选择
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输入到ADDPOU。为此,请单击输入的输出引脚并将其拖动到输入引脚的上方ADDPOU。以同样的方式,连接输入
rHysteresis使用较低的输入值ADDPOU。两个输入
rHysteresis和Glob_Var.rTempSet现在添加者ADD。要在编辑器中移动元素,请单击元素中的空白区域或单击框架,这样该元素即被选中(红色边框,红色突出显示)。将元素拖动到所需位置。
在右边创建另一个 POU
ADDPOU。它的目的是比较Glob_Var.rTempActual总和为Glob_Var.rTempSet和rHysteresis。分配GT函数(大于)到 POU。这个
GTPOU 的工作原理如下:IF (upper input > lower input) THEN output := TRUE;连接输入
Glob_Var.rTempActual到输入的上方GTPOU。连接输出
ADDPOU 到较低的输入端GTPOU。现在使用方块元素在右边创建一个功能块
GTPOU 根据输入条件启动和停止压缩机(设置 — 重置)。指定名字SR在???领域。按回车键关闭 POU 上方的打开输入字段SR_0)。这个 自动申报 对话框打开。
用名称声明变量
SR_0和数据类型SR。点击 好吧 按钮。这个
SRPOU 来自Standard库已实例化。SR用于定义THEN在 GT POU 的输出处。输入SET1和RESET出现。连接右侧的输出引脚
GTPOU 到SET1的输入SR_0POU。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 键。这个
TONPOU 与其输入和输出一起显示。要删除
EN输入和ENO输出,选择方块并单击 EN/ENO → EN 在上下文菜单中。现在这个方块只有
IN和PT输入和Q和ET输出。双击块正上方的三个问号[???],输入
TON_0作为实例名称,然后按 Enter 键。您已经确认了实例名称。这个 自动申报 对话框打开。
点击 好吧 确认对话框。
现在插入
TONPOU 实例化的名称TON_0。对模块进行编程,使其在压缩机开始运行后立即激活。首先拖动
Contact来自的梯子元素 工具箱 前面的视图IN区块的输入。双击三个问号,然后在行编辑器中单击该图标 (
)。在输入助手中,现在选择已经声明的全局变量 x压缩机 然后点击 好吧。变量名
Glob_Var.xCompressor显示在联系人上方。提示
当你开始在输入位置键入变量名时,你将自动获得所有变量的列表,其名称以键入的字符开头,此时可以使用。此帮助是中的默认设置 CODESYS 智能编码的选项。
插入要激活的信号。为此,请将 线圈 从 工具箱 看法, 梯子 类别,
Q输出TON块。指定名称Glob_Var.xSignal对于线圈。定义从 POU 激活开始的时间段
TON_0直到信号响起。此定义通过变量进行Glob_Var.timAlarmThreshold,为此目的,您可以在输入处插入PT的TON_0。为此,单击输入引脚左侧的细边框并输入变量名称。按回车键。
这个 自动申报 对话框打开。
点击 好吧 确认对话框。
新声明的变量显示在声明部分。
选择
TONPOU 并点击 移除未使用的引脚 在上下文菜单中。未使用的输出
ET已移除。在 LD 的第二个网络中,进行编程,使门打开时间过长时会间歇性地发出信号。
用鼠标拖动 网络 元素来自 工具箱 查看网络 1 下方的插入点。
带有该号码的空网络 2 出现。
就像在第一个网络中一样,实现
TONPOU 用于按时间控制激活信号。这次是由全局变量触发的Glob_Var.xDoorOpen在输入处IN。在输入处PT,添加全局变量Glob_Var.timDoorOpenThreshold。来自
Util库,添加一个BLINK输出端的 POUQ的TON在此网络中使用 POU 并使用名称对其进行实例化Blink_0。这个
BLINK_0POU 对信号转发进行计时Q因此Glob_Var.xSignal。首先,拖动两个 联系我们 元素来自 工具箱 查看
OUTU 的输出。分配变量TON_1.Q输出后直接与联系人联系Q和全局变量Glob_Var.xDoorOpen致第二个联系人。插入 线圈 两个联系人之后的元素并分配全局变量
Glob_Var.xSignal对它来说。声明局部变量
timSignalTime : TIME := T#1S;然后在输入处插入这个变量TIMELOW和TIMEHIGH。循环时间为 1 秒TRUE并且 1 秒为FALSE。选择
TONPOU 并点击 移除未使用的引脚 在上下文菜单中。未使用的输出
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 键跳到代码中的相应点。将应用程序下载到控制器后,将对应用程序进行更多测试。
之后,只能将无错误的应用程序下载到控制器。