Skip to main content

在项目中对控制器应用程序进行编程

声明全局变量

首先,声明要在整个应用程序中使用的变量。为此,请在下面创建一个全局变量列表 应用程序:

  1. 选择 Application 输入并点击 添加对象 → 全局变量列表 在上下文菜单中。更改默认名称 GVL 到 Glob_Var 并点击 添加 确认。

    这 _cds_icon_gvl.png Glob_Var 对象显示如下 _cds_icon_application.png Application。GVL 编辑器在设备树的右侧打开。

  2. 当文本视图打开时,它已经包含关键字 VAR_GLOBAL 和 END_VAR。对于我们的示例,单击 _cds_img_button_decl_editor_tabular.png 编辑器右侧栏上的按钮可激活表格视图。

    出现一个空行。光标位于 姓名 柱子。

  3. 在快捷菜单中,单击 插入。

    打开一个输入字段。同时, 范围 VAR_GLOBAL 还有 数据类型 BOOL 会自动输入到该行中。

  4. 指定 rTempActual 在 姓名 场地。

  5. 双击 数据类型 柱子。

    现在可以编辑该字段,并且 cds_icon_open_input_asisstant.png 按钮显示。

  6. 点击 cds_icon_open_input_asisstant.png 按钮,然后选择 输入助手。

    这个 输入助手 对话框打开。

  7. 选择数据类型 REAL 并点击 好的。

  8. 在中输入一个数值 初始化 列(示例: 8.0)。

以相同的方式声明以下变量:

姓名

数据类型

初始化

评论

rTempActual

REAL

8.0

实际温度

rTempSet

REAL

8.0

设定温度

xDoorOpen

BOOL

FALSE

门的状态

timAlarmThreshold

TIME

T#30S

压缩机运行后发出信号的时间

timDoorOpenThreshold

TIME

T#10S

开门后会发出信号的时间

xCompressor

BOOL

FALSE

控制信号

xSignal

BOOL

FALSE

控制信号

xLamp

BOOL

FALSE

状态消息

在 CFC 编辑器中创建冷却控制的主程序

现在,您将在 main 中描述应用程序的主要功能 PLC_PRG POU,默认情况下创建。当实际温度高于设定温度加上滞后时,压缩机被激活并冷却。当实际温度低于设定温度减去滞后时,压缩机关闭

要使用 CFC 实现语言描述此功能,请执行以下步骤:

  1. 在设备树中,双击 PLC_PRG。

    CFC 编辑器在中打开 PLC_PRG 选项卡。声明编辑器以文本或表格形式出现在图形编辑器区域的上方。这个 工具箱 视图在右边。

  2. 在 工具箱 查看,选择 输入 元素并将其拖动到下方的 CFC 编辑器中 PLC_PRG 选项卡。

    无名条目 ??? 已插入。

  3. 在 CFC 编辑器中,单击 ??? 在输入处,然后单击 _cds_icon_input_assistent.png 打开输入助手。 变量 类别,选择 rTempActual 变量在下面 应用程序 → Glob_Var。这是引用全局变量的 rTempActual 这里。

    输入名称是 Glob_Var.rTempActual。

  4. 与步骤 3 一样,使用全局变量的名称创建另一个输入 Glob_Var.rTempSet。

  5. 创建另一个输入,然后单击 ??? 然后用名字替换它们 rHysteresis。

    因为这不是已知变量的名称, 自动申报 对话框打开。该名称已在对话框中使用。

  6. 在 自动申报 对话框,指定 类型 作为 REAL 和 初始化 作为 1。点击 好吧 按钮。

    变量 rHysteresis 出现在声明编辑器中。

  7. 在 工具箱 查看,选择 阻止 元素并将其拖动到下方的 CFC 编辑器中 PLC_PRG 选项卡。

    POU 在 CFC 编辑器中打开。

  8. 替换 ??? 和 ADD。

    POU 会添加与其连接的所有输入。

  9. 连接 Glob_Var.rTempSet 输入到 ADD POU。为此,请单击输入的输出引脚并将其拖动到输入引脚的上方 ADD POU。

  10. 以同样的方式,连接输入 rHysteresis 使用较低的输入值 ADD POU。

    两个输入 rHysteresis 和 Glob_Var.rTempSet 现在添加者 ADD。

  11. 要在编辑器中移动元素,请单击元素中的空白区域或单击框架,这样该元素即被选中(红色边框,红色突出显示)。将元素拖动到所需位置。

  12. 在右边创建另一个 POU ADD POU。它的目的是比较 Glob_Var.rTempActual 总和为 Glob_Var.rTempSet 和 rHysteresis。分配 GT 函数(大于)到 POU。

    这个 GT POU 的工作原理如下: IF (upper input > lower input) THEN output := TRUE;

  13. 连接输入 Glob_Var.rTempActual 到输入的上方 GT POU。

  14. 连接输出 ADD POU 到较低的输入端 GT POU。

  15. 现在使用方块元素在右边创建一个功能块 GT POU 根据输入条件启动和停止压缩机(设置 — 重置)。指定名字 SR 在 ??? 领域。按回车键关闭 POU 上方的打开输入字段SR_0)。

    这个 自动申报 对话框打开。

  16. 用名称声明变量 SR_0 和数据类型 SR。点击 好吧 按钮。

    这个 SR POU 来自 Standard 库已实例化。 SR 用于定义 THEN 在 GT POU 的输出处。输入 SET1 和 RESET 出现。

  17. 连接右侧的输出引脚 GT POU 到 SET1 的输入 SR_0 POU。

    SR 可以从中设置布尔变量 FALSE 到 TRUE 然后又回来了。当条件处于输入 SET1 满意,布尔变量设置为 TRUE。当条件为时,变量将再次重置 RESET 很满意。我们示例中的布尔(全局)变量是 Glob_Var.xCompressor。

  18. 创建一个 输出 元素并将其分配给全局变量 Glob_Var.xCompressor。在两者之间拖动一条连接线 Glob_Var.xCompressor 和输出引脚 Q1 的 SR。

现在指定压缩机应再次关闭的条件(在本例中, RESET SR POU 的输入会得到 TRUE 信号)。为此,请制定与上述条件相反的条件。 SUB (减法)和 LT (少于)用于执行此操作的 POU。

结果是以下 CFC 图表:

_cds_img_tutorial_refrigerator_plcprg_cfc_diagram.png

在梯形图编辑器中创建用于信号管理的 POU

在另一个 POU 中,您现在将实现警报蜂鸣器以及开启和关闭灯泡的信号管理。梯形图 (LD) 实现语言适合于此。

在自己的网络中处理以下每个信号:

  • 当压缩机因温度过高而运行时间过长时,会发出连续的声音信号。

  • 当门打开时间过长时,会发出间歇性信号。

  • 只要门开着,灯就会亮。

  1. 在设备树中,在 Application 对象,创建一个类型的 POU 对象 程序 使用 梯子(LD2) 实现语言。

    将程序命名为 Signals。

    这个 Signals 程序列在设备树旁边 PLC_PRG。梯形图编辑器将在中打开 Signals 选项卡。声明编辑器出现在上部, 工具箱 向右看。梯形图包含一个空网络。

  2. 网络中创建程序,这样,当压缩机运行时间过长而未达到指定温度时,就会发出声音信号。为此,请插入 TON 接下来的步骤中计时 POU。它将布尔信号切换为 TRUE 在指定的时间之后。

  3. 在 工具箱 查看,拖动 阻止 元素并将其拖放到空网络中到可用的插入位置。

    该模块显示为一个包含输入和输出的方框。

  4. 双击三个问号 (???) 在区块中,然后单击 _ld_icon_input_assistant.png 线条编辑器中的符号。

    这个 输入助手 对话框打开。

  5. 在 输入助手 对话框,在 标准功能块 类别,在 标准 库,选择 TON 计时器 然后点击 好吧。

  6. 现在在块的行编辑器中,它显示了功能块的名称 TON,按 Enter 键。

    这个 TON POU 与其输入和输出一起显示。

  7. 要删除 EN 输入和 ENO 输出,选择方块并单击 EN/ENO → EN 在上下文菜单中。

    现在这个方块只有 IN 和 PT 输入和 Q 和 ET 输出。

  8. 双击块正上方的三个问号[???],输入 TON_0 作为实例名称,然后按 Enter 键。

    您已经确认了实例名称。这个 自动申报 对话框打开。

  9. 点击 好吧 确认对话框。

    现在插入 TON POU 实例化的名称 TON_0。

  10. 对模块进行编程,使其在压缩机开始运行后立即激活。首先拖动 Contact 来自的梯子元素 工具箱 前面的视图 IN 区块的输入。双击三个问号,然后在行编辑器中单击该图标 (_ld_icon_input_assistant.png)。在输入助手中,现在选择已经声明的全局变量 x压缩机 然后点击 好吧。

    变量名 Glob_Var.xCompressor 显示在联系人上方。

    提示

    当你开始在输入位置键入变量名时,你将自动获得所有变量的列表,其名称以键入的字符开头,此时可以使用。此帮助是中的默认设置 CODESYS 智能编码的选项。

  11. 插入要激活的信号。为此,请将 线圈 从 工具箱 看法, 梯子 类别, Q 输出 TON 块。指定名称 Glob_Var.xSignal 对于线圈。

  12. 定义从 POU 激活开始的时间段 TON_0 直到信号响起。此定义通过变量进行 Glob_Var.timAlarmThreshold,为此目的,您可以在输入处插入 PT 的 TON_0。为此,单击输入引脚左侧的细边框并输入变量名称。

  13. 按回车键。

    这个 自动申报 对话框打开。

  14. 点击 好吧 确认对话框。

    新声明的变量显示在声明部分。

  15. 选择 TON POU 并点击 移除未使用的引脚 在上下文菜单中。

    未使用的输出 ET 已移除。

  16. 在 LD 的第二个网络中,进行编程,使门打开时间过长时会间歇性地发出信号。

    用鼠标拖动 网络 元素来自 工具箱 查看网络 1 下方的插入点。

    带有该号码的空网络 2 出现。

  17. 就像在第一个网络中一样,实现 TON POU 用于按时间控制激活信号。这次是由全局变量触发的 Glob_Var.xDoorOpen 在输入处 IN。在输入处 PT,添加全局变量 Glob_Var.timDoorOpenThreshold。

  18. 来自 Util 库,添加一个 BLINK 输出端的 POU Q 的 TON 在此网络中使用 POU 并使用名称对其进行实例化 Blink_0。

  19. 这个 BLINK_0 POU 对信号转发进行计时 Q 因此 Glob_Var.xSignal。

    首先,拖动两个 联系我们 元素来自 工具箱 查看 OUT U 的输出。分配变量 TON_1.Q 输出后直接与联系人联系 Q 和全局变量 Glob_Var.xDoorOpen 致第二个联系人。

  20. 插入 线圈 两个联系人之后的元素并分配全局变量 Glob_Var.xSignal 对它来说。

  21. 声明局部变量 timSignalTime : TIME := T#1S; 然后在输入处插入这个变量 TIMELOW 和 TIMEHIGH。循环时间为 1 秒 TRUE 并且 1 秒为 FALSE。

  22. 选择 TON POU 并点击 移除未使用的引脚 在上下文菜单中。

    未使用的输出 ET 已被移除。

  23. 在第三个网络中,进行编程,使灯在门打开时一直亮着。添加一个附加网络和一个触点。分配变量 GlobVar.xDoorOpen 致聯絡人。

  24. 插入的触点直接通向线圈。在触点右侧添加线圈并分配全局变量 Glob_Var.xLamp 到线圈上。

  25. CODESYS 接一个地处理 LD 的网络。现在,在网络 1 的末尾安装一个跳转到网络 3 的程序,以确保只执行网络 1 或仅执行网络 2:

    当您将鼠标指针悬停在网络左上角第三行时,信息 <在此处插入跳转> 出现。双击此位置并输入 门打开了: 作为行编辑器中的跳转标签。

    选择网络 1. 从 工具箱 看法, 梯形图 类别,拖动 跳 元素到插入位置,前面有一个三角形标记 Glob_Var.xSignal 线圈。

    出现跳跃元素。跳转目的地仍指定为 ???。

  26. 双击三个问号 [???],然后单击行编辑器中的图标 (_ld_icon_input_assistant.png)。在 输入助手 对话框中,选择 DoorIsOpen 从可能的标签标识符中单击 好的 确认。

    网络 3 的标签已实现。

现在 LD 程序如下所示:

_cds_img_first_cds_program_ld_signals.png

在主程序中调用 “Signals” 程序

在我们的程序示例中,主程序 PLC_PRG 应该打电话给 Signals 信号处理程序。

  1. 在设备树中,双击 PLC_PRG。

    这个 PLC_PRG 程序在编辑器中打开。

  2. 在 工具箱 查看,拖动 阻止 向编辑器添加元素 PLC_PRG。

  3. 双击三个问号 [???]然后点击 _ld_icon_input_assistant.png 线条编辑器中的符号。 输入助手 对话框,在 POU/程序和函数调用 类别,选择 Signals 编程,然后单击 好吧 进行确认。

为模拟创建 ST POU

由于此示例项目中的应用程序未链接到物理传感器和执行器,因此您还需要编写一个程序来模拟温度的升高和降低。这将允许您随后在联机模式下监视冰箱控制器的操作。

您使用结构化文本创建仿真程序。

该程序会增加温度,直到主程序启动 PLC_PRG 确定已超过设定温度。然后程序激活压缩器。然后,仿真程序降低温度,直到主程序再次禁用压缩机

  1. 在设备树中,右键单击 应用程序 对象,然后添加一个类型为 POU 的对象 程式 和 结构化文本 (ST) 实现语言。将 POU 命名为 Simulation。

  2. 在 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 程序。

  1. 在设备树中,拖动 Simulation 进入 MainTask 下方 任务配置。

    这个 Simulation 程序已插入任务配置。

  2. 要查看任务配置,请双击 MainTask 打开编辑器的入口。

    在编辑器下部的表格中,您可以看到任务调用的 POU: PLC_PRG (默认输入)和 Simulation。任务的呼叫类型是 循环的 间隔为 20 毫秒。在联机模式下,任务将在每个周期执行两个 POU 一次

定义与 PLC 通信的 “活动应用程序”

的名字 Application 以粗体显示在 设备 观点。这意味着此应用程序被设置为 “活动应用程序”。然后,与控制器的通信指的是此应用程序。

当项目中只有一个应用程序时,它会自动成为活动应用程序。如果您的应用程序尚未激活,请按如下方式将其激活:

  • 在的上下文菜单中 Application,点击 设置活动应用程序。

    应用程序 现在以粗体显示在 设备 观点。

调试应用程序

当你输入代码时, CODESYS 通过在相关文本下方使用红色波浪下划线立即提醒您出现语法错误。检查结果也显示在消息视图中。如有必要,单击 查看 → 消息 打开消息视图。消息显示在 预编译 消息类别。您可以选择一条消息,然后按 F4 键跳到代码中的相应点。将应用程序下载到控制器后,将对应用程序进行更多测试。

之后,只能将无错误的应用程序下载到控制器。