简介这份资源面向电气工程及其自动化等专业学生与PLC初学者围绕S7-1200可编程控制器与TIA Portal V13提供八段LED编程与智能交通红绿灯两项实验的完整实践方案帮助读者从软件操作、梯形图编程到HMI画面设计逐步上手解决课堂理论与实际编程脱节的问题。压缩包内为1个docx文档约1.62MB按实验目的、仪器设备、实验步骤、思考题与反思总结组织涵盖PLC变量表设置、定时器与MOVE指令应用、16进制段位码显示、触摸屏按钮与动画关联以及交通灯手自动切换逻辑和PROFINET组态等内容。已有451人学习适合课程设计、实验报告撰写与仿真调试时对照参考也可作为课后扩展练习的思路来源。1. 从一份 S7-1200 实验包说起八段 LED 与交通灯到底能练什么带过几届课程设计之后我发现一个规律真正让新手卡住的往往不是梯形图逻辑本身而是“变量表建了没、HMI 变量关联对没、仿真下载顺序对不对”这些落地细节。这份 S7-1200 实验包正好把两个典型场景串在一起——八段 LED 数码管显示和路口交通红绿灯控制前者练编码表与 MOVE 指令后者练时序切换与手自动切换。它面向电气工程及其自动化方向的学习者也适合已经上手过 TIA Portal、想补一套完整“PLC HMI 仿真”闭环的从业者。下面按我拆包复现的顺序讲重点放在参数怎么设、坑在哪。2. 八段 LED 段码表与 MOVE 指令从 0 到 8 的循环怎么搭八段 LED 实验的核心不是“点亮”而是“按顺序点亮并自动跳转”。整条链路是PLC 变量表定义输出字节 → 定时器每 1s 触发一次 → 计数器或自增逻辑产生 0~8 的序号 → 用 MOVE 指令把对应十六进制段码送到输出字节 → HMI 上同步显示。理解这条链路后面交通灯实验的时序切换就是同一套思路的变体。2.1 先定段码表再定输出字节八段数码管实际是七段加小数点每个段对应一个输出位常见约定是 a~g 加 dp 共 8 位正好一个字节。段码表必须提前定死否则后面 MOVE 的值和接线对不上现象就是“数字显示缺笔画”。我一般用下面这张表作为基准具体位序以实验箱接线为准但数值关系不变显示数字十六进制段码说明00x3Fa b c d e f 亮g 灭10x06b c 亮20x5Ba b d e g 亮30x4Fa b c d g 亮40x66b c f g 亮50x6Da c d f g 亮60x7Da c d e f g 亮70x07a b c 亮80x7F除 dp 外全亮这张表就是“编码表”的落地形态。实验正文里提到“将 LED 显示的数字通过 MOVE 指令移动到数码管的 16 进制段位”说的就是把这个字节值写进 QB 输出区。注意如果实验箱是共阳接法段码要取反这一点在接线前必须确认否则显示会整体反相。2.2 定时器 自增 MOVE 的梯形图骨架下面这段是循环显示的核心逻辑用 SCL 写出来便于看清结构实际在 TIA Portal 里可以用梯形图等价实现TON ADD MOVE 三个指令块串联// 每 1s 产生一个脉冲驱动显示序号自增 LED_TON.TON(IN : NOT LED_TON.Q, PT : T#1S); IF LED_TON.Q THEN LED_Index : LED_Index 1; IF LED_Index 8 THEN LED_Index : 0; END_IF; END_IF; // 按序号查段码写入输出字节 CASE LED_Index OF 0: LED_Out : 16#3F; 1: LED_Out : 16#06; 2: LED_Out : 16#5B; 3: LED_Out : 16#4F; 4: LED_Out : 16#66; 5: LED_Out : 16#6D; 6: LED_Out : 16#7D; 7: LED_Out : 16#07; 8: LED_Out : 16#7F; END_CASE;逻辑说明TON 的 IN 取自身 Q 的反形成自复位振荡PT 设 1s 就是每秒一个扫描脉冲LED_Index是自增序号超过 8 归零保证 0~8 循环CASE 分支把序号翻译成段码写入LED_Out这个变量在变量表里映射到实际输出字节。参数上唯一要改的是 PT想快就改 500ms但别低于 PLC 扫描周期太多否则脉冲会丢。2.3 启动停止与 HMI 按钮的关联实验要求“启动按钮与停止按钮串联实现控制”落到程序里就是一个自锁回路启动 I0.0 置位运行标志停止 I0.1 复位运行标志运行标志串在定时器使能前面。HMI 上的启动/停止按钮不要直接写 I 区而是关联到 M 区或 DB 里的中间变量再由程序映射这样仿真时按钮才可控。HMI 画面里用矩形拼八段形状、加静态文本、做颜色动画动画变量就绑LED_Out的各个位位为 1 时该段变色——这是最省事的做法比逐段写脚本稳。3. 交通灯时序控制手自动切换与 HMI 时间设定怎么落地交通灯实验比八段 LED 多了一层“状态机”味道南北通行、南北黄灯、东西通行、东西黄灯四个状态循环每个状态停留时间由 HMI 输入。难点不在单个状态而在切换时“先复位再输出”的顺序以及手动模式下不能和自动逻辑打架。3.1 状态划分与输出映射按实验正文的 I/O 分配输出点是这样对应的Q0.0 南北红、Q0.1 南北黄、Q0.2 南北绿、Q0.3 东西红、Q0.5 东西绿东西黄按同理补一个点。四个状态用整数Step表示程序骨架如下// 自动模式下的状态推进 IF Auto_Mode AND Run_Flag THEN Step_TON.TON(IN : NOT Step_TON.Q, PT : Step_Time); // 时间来自 HMI 输入 IF Step_TON.Q THEN Step : Step 1; IF Step 3 THEN Step : 0; END_IF; END_IF; END_IF; // 状态到输出的映射先全复位再置位 NS_R : FALSE; NS_Y : FALSE; NS_G : FALSE; EW_R : FALSE; EW_G : FALSE; CASE Step OF 0: NS_G : TRUE; EW_R : TRUE; // 南北通行 1: NS_Y : TRUE; EW_R : TRUE; // 南北黄灯 2: EW_G : TRUE; NS_R : TRUE; // 东西通行 3: EW_R : TRUE; NS_R : TRUE; // 全红过渡可并入黄灯段 END_CASE;逻辑说明Step_Time是 HMI 写入的通行时间黄灯时间可以单独再设一个变量在 Step1 和 Step3 时切换 PT 值。关键点是每个扫描周期先把所有灯复位再按 CASE 置位这样切换瞬间不会出现两个方向同时绿灯的“血泪”现象。参数上Step_Time建议给个下限保护比如小于 3s 时强制按 3s 走防止 HMI 误输入 0 导致状态机狂跳。3.2 手动模式的互锁与切换复位手动模式由 I0.1 高低电平区分I0.2 南北通行、I0.3 东西通行。手动逻辑必须和自动逻辑互斥否则两个方向同时亮。常见做法是IF NOT Auto_Mode THEN // 手动先复位再按按钮置位 NS_G : Manual_NS AND NOT Manual_EW; EW_G : Manual_EW AND NOT Manual_NS; NS_R : NOT NS_G; EW_R : NOT EW_G; END_IF;手自动切换时I0.1 边沿触发一次全灯复位把Step清零、所有输出 FALSE再进入对应模式。这一步不做切换瞬间会残留上一个模式的灯态仿真里看起来就是“灯卡住了”。HMI 上做手自动切换按钮时记得在按钮事件里同时写模式变量和复位触发位别只写一个。3.3 HMI 画面IO 域、指示灯动画与变量关联HMI 部分实验正文讲得比较细我补两个实操点。第一通行时间用 IO 域关联变量选输入输出模式显示格式选十进制别选成十六进制否则输入 30 会变成 0x30。第二指示灯颜色动画关联的是 PLC 输出变量动画类型选“变量为 1 时变色”颜色对应红黄绿别用“范围”动画范围动画在布尔量上容易配错。变量关联时如果下拉框出现两个相似名称优先选带 DB 前缀的那个全局 DB 里的变量比 M 区稳定仿真下载后不会丢。4. 避坑排查定时器编号、变量关联与仿真顺序的五个翻车点4.1 复制粘贴导致定时器编号重复现象编译报错或运行时时序全乱多个程序段共用同一个 TON 实例。原因梯形图里复制粘贴定时器块背景数据块编号跟着复制TIA Portal 不会自动改。解决删掉重复的定时器块从右侧指令库重新拖入逐个确认背景 DB 编号不同或者干脆用多重背景放在同一个 FB 里编号由系统分配。4.2 HMI 变量关联选错同名项现象HMI 上按钮按了没反应或指示灯不跟着变。原因变量表里存在名称相近的变量比如NS_G和交通灯_DB.NS_G关联时选错。解决统一用 DB 变量HMI 关联时展开 DB 节点选绝对地址关联完在仿真里强制该变量看 HMI 是否响应不响应就是关联错了。4.3 仿真下载顺序颠倒现象PLC 仿真跑起来了HMI 仿真连不上或画面灰。原因先启动了 HMI 仿真再下载 PLC或 IP 没对齐。解决先编译 PLC 并启动 PLC 仿真确认 RUN 状态再启动 HMI 仿真PLC IP 设 192.168.0.200、HMI 设 192.168.0.201 这类同网段地址PROFINET 连接在设备视图里连好再下载。4.4 段码共阳共阴没确认现象八段 LED 显示的数字是“反”的该亮的灭、该灭的亮。原因实验箱数码管共阳接法程序按共阴段码写。解决确认实验箱原理图共阳时把段码按位取反再输出或直接在输出前加 NOT 指令别改接线。4.5 手动自动同时使能现象两个方向绿灯同时亮或灯态闪烁。原因手自动逻辑没有互锁两个分支都往同一组输出写值。解决输出映射只保留一处CASE 或手动分支二选一用模式变量做前置判断切换边沿强制复位一次。5. 从单个数码管到三个学号显示的扩展写法与验证习惯把单个八段 LED 扩到三个显示学号后三位本质是“一份逻辑复制三份、段码各管各的”。我一般把段码翻译封装成 FC输入是显示数字输出是段码字节三个数码管各调一次输出分别映射到三个 QB 字节。这样改学号只改三个输入常数不用动逻辑。验证时别一上来就接实物先在仿真里用监控表把三个输出字节的值读出来和段码表逐个对对上了再下载到实验箱。HMI 上三个数码管的动画变量分别绑三个输出字节的位别图省事绑同一个否则三个管显示永远一样。还有一个习惯每次改完程序先编译看有没有“背景 DB 编号冲突”的警告再启动仿真最后才碰实物。这个顺序帮我省掉过很多次“下载到一半发现编号重复”的后悔药。这套实验包的价值就在于它把编码表、时序、HMI 关联、仿真验证串成了一条能完整走通的链路照着走一遍后面做更复杂的控制逻辑时变量表和状态机的底子就有了。希望帮到你。本文还有配套的精品资源点击获取