Skip to main content

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

声明全局变量

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

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

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

  2. 当文本视图打开时,它已经包含关键字 VAR_GLOBALEND_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。

    两个输入 rHysteresisGlob_Var.rTempSet 现在添加者 ADD

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

  12. 在右边创建另一个 POU ADD POU。它的目的是比较 Glob_Var.rTempActual 总和为 Glob_Var.rTempSetrHysteresis。分配 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 的输出处。输入 SET1RESET 出现。

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

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

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

现在指定压缩机应再次关闭的条件(在本例中, 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/ENOEN 在上下文菜单中。

    现在这个方块只有 INPT 输入和 QET 输出。

  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,为此目的,您可以在输入处插入 PTTON_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 QTON 在此网络中使用 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; 然后在输入处插入这个变量 TIMELOWTIMEHIGH。循环时间为 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 键跳到代码中的相应点。将应用程序下载到控制器后,将对应用程序进行更多测试。

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