ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

PLC实验精讲:八段LED与交通灯的I/O映射、状态机与HMI仿真

PLC实验精讲:八段LED与交通灯的I/O映射、状态机与HMI仿真

简介:这份资源面向电气工程及其自动化等专业学生与PLC初学者,围绕西门子S7-1200可编程控制器,提供八段LED编程与智能交通红绿灯两个实验的完整实践方案,帮助读者掌握TIA Portal V13基本操作、梯形图编程与HMI画面设计。压缩包内为1个docx文档,约1.62MB,按实验目的、仪器设备、实验步骤、思考题与反思总结组织内容,涵盖PLC变量表设置、定时器与MOVE指令应用、16进制段位码显示、触摸屏按钮与动画关联,以及交通灯手自动切换逻辑和PROFINET组网配置。文档还记录了定时器编号冲突等排错思路与课后扩展练习,便于对照复现实验过程、理解程序每步控制作用。目前已有451人学习,适合课程设计参考与仿真验证对照使用。

1. 从一张 I/O 地图看 PLC 实验:八段 LED 与交通灯到底在练什么

很多人第一次打开 TIA Portal 时,会被左侧那棵项目树吓住:PLC 变量、程序块、监控表、HMI 画面、连接配置,一层套一层。但把这两个实验拆开看,核心其实只有一句话——把物理 I/O 点映射成有顺序的状态,再让人能看见并干预这个状态。八段 LED 练的是「输出编码 + 定时循环」,交通灯练的是「状态机 + 手自动切换」,两者共用同一套 S7-1200 变量表、梯形图、HMI 绑定和仿真验证流程。适合正在做课程设计、准备实验答辩,或者复习 PLC 编程基础的人。下面这份梳理按「知识地图 → 模块要点 → 易错点 → 复习清单」展开,重点放在变量分配、定时器编号、HMI 变量匹配这些真正会翻车的地方。

2. 八段 LED 实验:编码表、定时循环与 HMI 动画的完整链路

八段 LED 实验看起来只是让数字 0 到 8 循环亮,但它把 PLC 编程里最基础的几件事一次性串了起来:变量表怎么建、定时器怎么接、MOVE 指令怎么搬数据、HMI 怎么跟 PLC 变量对上。梳理下来会发现,这个实验的难点不在梯形图本身,而在「段码」和「变量地址」之间的对应关系。

2.1 段码表与 PLC 变量表:先定地址再画图

八段 LED 的每一段对应一个输出点,实验里用 a 到 g 七段加小数点,通常占 Q0.0 到 Q0.7 这八个连续输出。段码表是整条链路的起点,必须先把它写死,后面梯形图和 HMI 都依赖它。

显示数字abcdefg十六进制段码
0111111016#3F
1011000016#06
2110110116#5B
3111100116#4F
4011001116#66
5101101116#6D
6101111116#7D
7111000016#07
8111111116#7F

变量表里要同时出现三类地址:输入 I0.0 启动、I0.1 停止;输出 Q0.0 到 Q0.7 对应段;中间变量 MW10 或 DB 块里的一个字用来存当前段码。注意段码表里的「1」代表该段点亮,实际接线如果是共阳数码管,输出为 0 才亮,段码要整体取反,这一点实验指导书通常不强调,但接上实物就会暴露。

2.2 定时器 + MOVE:让数字自己走起来

循环显示的核心是一个接通延时定时器 TON,PT 设成 1s,定时到就自复位,同时把计数变量加一,再用 MOVE 把对应段码搬到输出字节。梯形图里常见写法是:启动按钮置位一个运行标志 M0.0,M0.0 常开触点串 TON 的 IN,TON 的 Q 输出接一个上升沿,上升沿触发 INC 指令让 MW10 从 0 加到 8,超过 8 就复位回 0,最后用 MOVE 把段码表里第 MW10 项送到 QB0。

# 变量表关键条目(TIA Portal 变量表视图) 启动按钮 I0.0 Bool 停止按钮 I0.1 Bool 运行标志 M0.0 Bool 当前数字 MW10 Int 段码输出 QB0 Byte 定时器 TON IEC_TIMER

这里最容易忽略的是定时器的自复位:TON 的 Q 只保持一个扫描周期,如果不做自锁或上升沿处理,数字会跳得比预期快。另一个坑是 MOVE 的数据类型,段码是十六进制字节,MOVE 的源和目标都必须是 Byte,写成 Int 会在监控表里看到数值对但输出不对。

2.3 HMI 八段图形:用矩形拼出来再绑变量

HMI 部分不是直接放一个数码管控件,而是用七个矩形拼成八段形状,每个矩形的「背景色」动画关联一个 PLC 布尔变量。实验里要求添加静态文本和按钮,按钮事件里写「置位/复位」对应 PLC 变量。梳理下来,HMI 动画的关键是变量匹配:矩形 1 关联 Q0.0,矩形 2 关联 Q0.1,依次排下去,颜色动画设成「变量为 1 时亮、为 0 时灭」。

提示:HMI 变量表里会出现两个名字很像的变量,一个是 PLC 变量表里的绝对地址,一个是 HMI 内部连接生成的符号名,选错不会报错,但仿真时画面不动。判断方法是看变量后面的连接名称是否指向 S7-1200 的 PROFINET 连接。

2.4 仿真验证:先看 PLC 再看 HMI

仿真顺序有讲究:先编译 PLC 程序、下载到 PLCSIM,确认 QB0 按 1s 节奏变化;再启动 HMI 仿真,确认画面上的段跟着亮。如果先开 HMI 仿真,连接还没建立,画面会一直停在初始状态,容易误判成程序错。验证时在监控表里强制 MW10 从 0 走到 8,观察 QB0 是否依次等于 16#3F、16#06……16#7F,这一步能快速定位是段码表错还是定时器没走。

3. 交通灯实验:状态切换、手自动逻辑与 HMI 时间设定的复习重点

交通灯实验比八段 LED 多了一层「状态」概念:南北通行、南北黄灯、东西通行、东西黄灯,四个状态按时间轮转,还要支持手动强制切换。这个实验真正考的是顺序功能图怎么落到梯形图,以及 HMI 上设定的时间怎么传进 PLC 定时器。

3.1 状态划分与输出分配:先画时序再写程序

实验里南北方向和东西方向的灯分别占 Q0.0 到 Q0.5,典型分配是南北红 Q0.0、南北黄 Q0.1、南北绿 Q0.2、东西红 Q0.3、东西黄 Q0.4、东西绿 Q0.5。自动运行时状态顺序是:初始化全灭 → 南北绿 + 东西红 → 南北黄 + 东西红 → 南北红 + 东西绿 → 南北红 + 东西黄 → 回到南北绿。每个状态停留时间由 HMI 上的「通行时间」和「黄灯时间」决定。

状态南北东西持续时间来源
S0 初始化全灭全灭一个扫描周期
S1 南北通行绿 Q0.2红 Q0.3HMI 通行时间
S2 南北黄灯黄 Q0.1红 Q0.3HMI 黄灯时间
S3 东西通行红 Q0.0绿 Q0.5HMI 通行时间
S4 东西黄灯红 Q0.0黄 Q0.4HMI 黄灯时间

写程序时建议用 DB 块存状态字,比如「交通灯_DB」里放 CurrentState、GreenTime、YellowTime 三个变量,FC 块里用比较指令判断当前状态,再驱动对应输出。这样比一堆自锁互锁的触点串并联清楚得多,也方便后面加手动逻辑。

3.2 手自动切换:一个选择开关决定两条路径

实验里 I0.1 是手自动选择:低电平自动、高电平手动。自动路径按上面的状态机走;手动路径下,I0.2 为高则南北绿 + 东西红,I0.3 为高则东西绿 + 南北红。两条路径的输出必须互斥,否则会出现两个方向同时绿的危险状态。

-- 自动状态切换的伪逻辑(梯形图比较指令的等价表达) IF "启动" AND NOT "手自动" THEN CASE "交通灯_DB".CurrentState OF 1: 南北绿 := TRUE; 东西红 := TRUE; 2: 南北黄 := TRUE; 东西红 := TRUE; 3: 南北红 := TRUE; 东西绿 := TRUE; 4: 南北红 := TRUE; 东西黄 := TRUE; END_CASE; END_IF;

手自动切换的瞬间要复位所有灯输出,实验步骤里专门写了这一条。实际写的时候,把「手自动」的上升沿和下降沿各接一个复位指令,清掉 Q0.0 到 Q0.5,再进入对应模式,能避免切换时残留上一个状态的灯。

3.3 HMI 时间输入与变量绑定:IO 域不是文本框

HMI 上设定通行时间和黄灯时间,用的是「IO 域」而不是普通文本,关联变量选 DB 块里的 GreenTime 和 YellowTime,模式设为输入输出,格式选十进制。PLC 侧定时器的 PT 直接引用这两个变量,改画面上的数字,定时器时间立刻变。这里有个细节:IO 域的值类型要和 DB 变量一致,DB 里是 Time 类型就选 Time 格式,是 Int 就按秒换算,混用会导致写入失败但不报错。

3.4 仿真与强制表:用监控表验证状态跳转

交通灯仿真时,监控表里同时盯 CurrentState、Q0.0 到 Q0.5 和两个时间变量。启动后看状态字是否按 1→2→3→4 循环,每个状态停留时间是否等于 HMI 设定值。手动模式下拨 I0.1 为高,再分别置位 I0.2、I0.3,确认输出互斥。强制表里改 GreenTime 从 5s 到 3s,观察状态切换是否立即变快,这一步能验证 HMI 变量是否真的写进了 DB。

4. 易错点:定时器编号、变量匹配与段码取反这三处最容易翻车

4.1 易漏点:复制粘贴导致定时器编号重复

为什么漏:写八段 LED 循环或者交通灯多状态时,很多人图快,直接复制上一段梯形图改触点,定时器的背景数据块编号没改,编译能过,但运行时几个定时器共用一个实例,时间全乱。实验反思里就提到过这个血泪经验——编译时发现每段代码用了同一个定时器,只能全部删掉重新从右侧库拉取。

怎么补:每放一个 TON,立刻在属性里确认背景 DB 编号唯一,或者在 DB 块里手动建多个 IEC_TIMER 实例,梯形图上引用不同实例。写完一段就编译一次,别等全部画完再编。

4.2 易漏点:HMI 变量选到同名但不同连接的条目

为什么漏:HMI 变量表里既有 PLC 变量表同步过来的绝对地址,也有手动建的内部变量,名字可能都叫「启动」。选错时画面按钮按下去没反应,仿真也不报错,排查起来像玄学。

怎么补:建 HMI 变量时统一从「PLC 变量」筛选视图里拖,不手敲名字;每个变量后面确认连接名是那条 PROFINET 连接。仿真前在 HMI 变量表里看「质量」列,显示良好才说明连上了。

4.3 易错点:共阳/共阴段码没取反

为什么漏:段码表按「1 点亮」写,仿真时 PLCSIM 上看 QB0 数值完全正确,但接实物数码管不亮或显示乱码,因为实验箱上的数码管是共阳接法,输出 0 才亮。

怎么补:先确认实验箱数码管的公共端接法,共阳就把段码表整体按位取反再写入,或者在输出前加一个 INV 指令。仿真阶段可以用监控表看 QB0,实物阶段必须看灯,两者不能互相替代。

4.4 易错点:手自动切换不复位输出

为什么漏:自动状态停在南北绿时拨到手动,如果只写手动路径的置位逻辑,南北绿不会被清掉,再置位东西绿就出现双向绿。实验步骤里写了「手自动切换时复位所有灯输出」,但写程序时容易只写切换后的赋值。

怎么补:把「手自动」选择开关的上升沿和下降沿各接一个复位网络,清 Q0.0 到 Q0.5,再让手动或自动逻辑接管。仿真时专门在绿灯状态拨开关,看六个输出是否全灭后再亮。

4.5 易错点:MOVE 指令的数据类型不匹配

为什么漏:段码是十六进制字节,有人把目标写成 MW10(字),MOVE 过去高字节补零,低字节对但监控表显示的值和段码表对不上,误以为段码错。

怎么补:MOVE 的源和目标都定义成 Byte,输出直接写 QB0,中间变量用 MB 而不是 MW。监控表里按十六进制格式看,和段码表逐项对。

5. 复习清单:从变量表到仿真验收的查漏补缺顺序

复习这两个实验,不建议从头重画梯形图,按「变量表 → 程序块 → HMI 绑定 → 仿真验收」四步走一遍,哪里卡住就补哪里。下面这张清单可以直接对着 TIA Portal 项目逐项打勾。

检查项合格标准常见问题
PLC 变量表输入输出地址连续、无重叠I0.0 和 I0.1 被重复定义
段码表0 到 8 九项齐全、进制正确共阳未取反
定时器实例每个 TON 背景 DB 唯一复制粘贴编号重复
状态字DB 块里有 CurrentState用 M 区散落标志位
HMI 变量全部来自 PLC 连接选到内部变量
IO 域格式与 DB 变量类型一致Time 和 Int 混用
手自动复位切换沿触发全输出复位只写赋值不写复位
仿真顺序先 PLC 后 HMI先开 HMI 误判连接

具体操作上,先打开变量表按地址排序,看有没有两个变量抢同一个 Q 点;再打开每个 FC 块,逐个定时器点属性看背景 DB 编号;然后到 HMI 变量表按连接名筛选,把不是 PLC 连接的条目清掉;最后启动 PLCSIM,用监控表强制关键变量走一遍完整流程。交通灯重点看状态字跳转和手自动互斥,八段 LED 重点看 QB0 是否按 1s 节奏变化、HMI 输入数字 6 时输出是否等于 16#7D。

我自己的习惯是每次新建项目先把变量表和段码表写在纸上,画完梯形图先编译再仿真,仿真通过才接实物。有一次偷懒跳过监控表直接接数码管,结果共阳没取反,对着不亮的管子查了半小时才想起段码这回事。从那以后每次做 PLC 实验,变量表、定时器编号、HMI 连接这三项都强制走一遍检查清单,再进仿真。希望这份梳理帮到你,复习时少走几段弯路。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进