4. 第一个简单程序

在掌握了 Codesys 开发环境的界面布局与基本操作逻辑之后,我们正式进入第一个可运行的 PLC 程序实战。本章将带领你从零开始,完整走通“创建工程 → 编写梯形图 → 编译下载 → 在线监控”的全流程。这个流程是后续所有复杂项目开发的骨架,无论你未来是编写运动控制程序、过程控制程序还是物联网采集程序,都离不开这一套标准动作。我们以一个最经典的“起保停电路”为案例载体,因为它包含了输入信号(按钮)、输出信号(接触器)、自锁逻辑(保持)和互锁逻辑(保护),麻雀虽小五脏俱全,非常适合作为第一个工程。

Codesys 第一个PLC程序完整链路 ① 创建工程 标准工程 → 选择PLC型号 CODESYS Control V3 ② 编写梯形图 添加指令 → 常开/常闭/线圈 实现起保停逻辑 ③ 编译下载 登录 → 下载 → 启动 PLC进入RUN状态 ④ 监控调试 变量强制/监视 逻辑验证 梯形图逻辑示意(起保停电路) 启动 %IX0.0 自锁 %QX0.0 停止 %IX0.1 输出 启动按钮(NO) 输出反馈(NO) 停止按钮(NC) 负载线圈 关键点:自锁触点与输出线圈并联,停止按钮使用常闭逻辑

上图展示了本章的核心链路:从工程创建到最终监控调试的四个阶段,以及我们即将编写的梯形图逻辑结构。请注意,梯形图中的“自锁”触点与输出线圈是并联关系,这是起保停电路能够保持输出状态的关键。下面我们分步骤展开。

4.1 核心原理:工程结构、扫描周期与变量映射

在动手操作之前,必须先理解三个基本概念:工程结构、扫描周期和变量映射。Codesys 的工程结构采用树形组织,最上层是“设备”节点,它代表物理 PLC 或软 PLC 运行时;其下是“PLC 逻辑”节点,包含“应用”、“任务配置”和“全局变量”等子项。我们的梯形图程序写在“应用”下的程序组织单元(POU)中,而“任务配置”则决定了程序以何种周期执行。

扫描周期是 PLC 运行的基本节拍,它包含三个阶段:读取输入 → 执行程序 → 刷新输出。在读取输入阶段,PLC 将物理输入端子(如按钮)的状态快照到输入映像寄存器;在执行程序阶段,CPU 根据梯形图逻辑计算输出结果,但此时并不直接驱动物理输出;在刷新输出阶段,计算结果被一次性传送到输出端子。理解这一点非常重要,因为它解释了为什么 PLC 程序是“顺序扫描”而非“并行执行”的。

变量映射是连接梯形图符号与物理 I/O 的桥梁。在 Codesys 中,我们使用 %IX0.0 表示输入字节 0 的第 0 位,%QX0.0 表示输出字节 0 的第 0 位。这些地址在设备配置中与具体的 PLC 端子绑定。编写程序时,我们直接使用这些地址或为它们定义更有意义的别名(如 StartButton),这样既提高了程序可读性,也便于维护。

知识结构表:PLC 程序执行模型
阶段动作说明示例
输入采样读取物理输入将按钮、传感器状态存入输入映像区启动按钮按下 → %IX0.0 = TRUE
程序执行逐行扫描梯形图从左到右、从上到下执行逻辑计算自锁条件,决定输出线圈状态
输出刷新更新物理输出将输出映像区状态一次性传送到端子%QX0.0 = TRUE → 接触器吸合

4.2 操作流程:从新建工程到编译下载

下面我们按照标准步骤,完成第一个工程的创建与下载。请确保你已经安装了 Codesys V3 开发环境,并且有一个可用的 PLC 运行时(可以是真实硬件,也可以是 Codesys Control Win V3 软 PLC)。

  1. 新建工程:打开 Codesys,点击“文件”→“新建工程”,选择“标准工程”模板。在弹出窗口中,为工程命名(例如 MyFirstPLC),并选择设备类型。如果你使用软 PLC,选择“CODESYS Control Win V3”;如果使用真实硬件(如汇川、信捷等),选择对应的设备描述文件。
  2. 添加程序组织单元:在左侧设备树中,右键点击“PLC 逻辑”→“应用”,选择“添加对象”→“程序组织单元”。命名 POU 为 MainProgram,实现语言选择“连续功能图”或“梯形图”,这里我们选择“梯形图”。
  3. 编写梯形图:双击打开 MainProgram,在编辑区域中,从右侧工具箱拖入“常开触点”、“常闭触点”和“线圈”元素。按照图 4-1 的逻辑连接:启动按钮(常开)串联自锁触点(常开),再串联停止按钮(常闭),最后驱动输出线圈。将自锁触点与启动按钮并联。
  4. 声明变量:在 POU 的变量声明区,定义如下变量:Start AT %IX0.0 : BOOL;、Stop AT %IX0.1 : BOOL;、Motor AT %QX0.0 : BOOL;。这样,梯形图中的符号就与物理地址绑定了。
  5. 编译工程:点击菜单栏的“生成”→“生成”或按 F7,检查是否有编译错误。如果一切正常,输出窗口会显示“0 个错误,0 个警告”。
  6. 登录与下载:点击“登录”按钮(或按 F5),Codesys 会尝试连接 PLC。连接成功后,点击“下载”按钮,将程序下载到 PLC 中。下载完成后,点击“启动”按钮(或按 F5),PLC 进入运行状态,程序开始循环执行。
经验提醒:在第一次下载时,如果 PLC 中已有旧程序,Codesys 会提示“在线更改”或“下载”。对于初学者,建议选择“下载”并勾选“停止 PLC”,确保程序从初始状态开始运行。另外,务必确认 PLC 的通信设置(如网关、设备地址)正确,否则无法建立连接。

4.3 案例拆解:起保停电路的完整调试过程

现在,我们通过一个具体的调试场景来验证程序逻辑。假设我们使用 Codesys Control Win V3 软 PLC,并添加了可视化模拟面板(或使用 Modbus 从站模拟 I/O)。我们的目标是:按下启动按钮后,输出线圈保持吸合;按下停止按钮后,输出线圈断开。

初始状态:PLC 处于运行状态,所有变量为 FALSE。我们打开“监视”视图(右键点击 POU → “监视”),可以看到梯形图上每个触点和线圈的实时状态(绿色表示 TRUE,灰色表示 FALSE)。

操作步骤与观察:

  • 在可视化面板中,将 Start 按钮置为 TRUE(模拟按下)。观察梯形图:启动触点变为绿色,电流路径导通,输出线圈 Motor 变为 TRUE。此时,即使将 Start 按钮恢复为 FALSE,由于自锁触点(Motor)已经闭合,输出线圈仍然保持 TRUE。
  • 将 Stop 按钮置为 TRUE(模拟按下)。观察梯形图:停止触点(常闭)断开,电流路径中断,输出线圈 Motor 变为 FALSE。此时,即使将 Stop 按钮恢复为 FALSE,输出线圈也不会自动恢复,必须再次按下启动按钮。

关键参数与指标:在监控过程中,我们关注三个变量的布尔值变化。通过“监视”窗口,可以实时看到 Start、Stop、Motor 的状态切换。此外,我们还可以在“任务配置”中查看程序的循环周期(例如 10ms),确保程序在预期的时间片内完成扫描。

风险与代价:如果停止按钮使用了常开触点(即程序逻辑为“停止按钮为 TRUE 时断开”),那么当停止按钮的线路断开或 PLC 输入点损坏时,将无法停止设备,这是严重的安全隐患。因此,工业标准中急停按钮必须使用常闭触点,并采用“失电停车”原则。

安全警示:在实际设备调试中,务必先断开主回路电源,仅对控制回路进行逻辑验证。切勿在带载情况下进行程序下载或在线修改,以免造成设备意外动作。对于起保停电路,建议在输出端串联一个中间继电器,再驱动接触器,以隔离 PLC 输出与强电回路。

4.4 常见误区与总结复盘

初学者在编写第一个程序时,常犯以下几个错误,我们逐一分析并给出规避方法。

误区现象原因正确做法
变量地址未绑定梯形图符号无颜色变化变量未关联到物理 I/O在变量声明中使用 AT %IX0.0 语法
自锁触点接错位置输出无法保持自锁触点未与启动按钮并联确保自锁触点与启动按钮并联,且位于停止触点之前
停止按钮使用常开停止功能失效逻辑错误或安全设计缺陷使用常闭触点,并考虑硬件急停回路
下载后程序未运行PLC 处于 STOP 状态未点击“启动”或任务未配置下载后点击“启动”,并检查任务配置
在线修改后未生效程序行为不变未执行“在线更改”或“下载”使用“在线更改”功能,或停止 PLC 后重新下载

总结复盘:本章的核心目标是建立“工程化”的思维。创建工程不仅仅是写代码,还包括设备选型、变量规划、任务配置和调试验证。起保停电路虽然简单,但它涵盖了 PLC 编程的三大基础要素:输入采样、逻辑运算、输出控制。在后续章节中,我们会引入定时器、计数器、功能块和状态机,但所有复杂逻辑都建立在这套标准的工程流程之上。

最后,请务必养成以下习惯:每次修改程序后先编译再下载;下载前确认 PLC 处于安全状态;调试时使用“监视”功能观察变量实时变化,而不是盲目猜测。这些习惯将帮助你在未来的项目中减少排障时间,提高开发效率。