1. 八人抢答器:为什么这个PLC毕设题目值得认真做
每年电气自动化、机电一体化专业的毕设清单里,“八人抢答器PLC S7-1200”都是出镜率极高的题目。你可能觉得它太简单——八个人按按钮,谁先按谁亮灯,这有什么好设计的?但真上手做你会发现,这个题目其实把PLC应用的核心基本功全串起来了:开关量输入输出、逻辑互锁、定时器、复位优先、人机交互、甚至通信扩展。用西门子S7-1200来做,是因为它比S7-200 SMART的指令体系更现代,博途软件的环境也更贴近工业现场的调试习惯,而且1214C这种CPU自带足够数量的数字量输入输出,做八路抢答不加扩展模块就能搞定,硬件成本可控、接线也简单。
这篇内容我会从需求拆解、硬件选型、程序逻辑、实操调试、报告撰写几个维度完整走一遍,重点讲清楚抢答判定的核心互锁逻辑怎么写、调试时最容易踩的坑是什么、以及万字报告到底该往里面填什么。如果你是准备拿这个题目做毕设的本科生,或者想练手S7-1200但是没有头绪的自学者,这篇内容可以直接当操作手册用。
先说清楚一件事:这个项目不是“把八个按钮接到PLC上完事”,它的核心难点是“抢答语义”的实现。抢答和普通的按钮输入有本质区别——抢答要保证“先到先得、后来无效”,同一时刻最多只有一个选手胜出,而且这个状态必须保持住,直到裁判复位。这个需求对应到PLC程序里,就是一组带互锁的置位优先逻辑,你把这个逻辑写明白了,触类旁通,工业现场的设备互锁、安全联锁也都是一个套路。
2. 需求拆解与硬件方案:动手之前先把I/O算明白
2.1 功能需求到底有哪些
八人抢答器的场景通常是这样的:比赛现场有8名选手,每人面前一个抢答按钮,主持人说“开始”后选手按下按钮,系统要立刻判定谁是第一个按下的,并把对应的编号显示出来、同时给出声光提示,其他选手即使再按也不生效。主持人随后按下复位按钮,系统回到初始状态,准备下一轮抢答。
这个基本流程拆开来看,至少包含三块功能需求。第一块是抢答判定:8路按钮输入,判定胜出编号,状态锁存。第二块是声光提示:胜出者的指示灯点亮,蜂鸣器鸣响,需要一个开始允许信号来防止“主持人还没说开始就有人偷跑”,如果要求严格,还要对偷跑行为做提示。第三块是状态显示:最简单方案是8个指示灯对应8个选手,讲究一点的方案是用触摸屏显示“当前胜出选手编号”和一轮倒计时秒数。对于毕设来说,8个指示灯加触摸屏是比较合理的组合,既能体现硬功夫,又能展示上位机组态能力,评审时观感也更好。
这里有个容易被忽略的细节:抢答器需要在检测到某位选手按下后立即锁定系统,这个锁定动作要发生在同一次扫描周期内。用梯形图写的时候,顺序很重要——必须先判断“之前是否已经有人抢答成功”,如果已经锁定,那么后续所有按钮输入直接忽略;如果尚未锁定,则按顺序扫描I0.0到I0.7,一旦发现某个按钮信号为1,就立刻置位对应的胜出标志并产生锁定标志。
2.2 硬件选型:S7-1200的哪种CPU合适
S7-1200家族里做毕设最常见的是CPU 1214C DC/DC/DC,这款CPU自带14个数字量输入和10个数字量输出,直流24V供电,晶体管输出。14个输入对于八人抢答器来说绰绰有余——8个选手按钮、1个裁判开始按钮、1个裁判复位按钮,总共10个,还剩4个输入备用。10个输出的分配也够用:8个选手指示灯、1个蜂鸣器、预留1个,不用加任何扩展模块。如果不打算用指示灯,只想用触摸屏显示编号,那输出只需要1个蜂鸣器,I/O余量更大。
CPU选型上还有一点值得注意:1214C有DC/DC/DC和DC/DC/Relay两种常见版本,前者是晶体管输出,响应速度快、可以高频通断;后者是继电器输出,触点容量大、可以驱动交流负载,但机械寿命有限。抢答器负载就是指示灯和蜂鸣器,直流低压小功率,完全没有必要用继电器输出,晶体管版本更合适,而且还便宜一点。如果你手头已经有S7-1212C,14个输入够吗?答案是12个输入也够用——它比1214C少两个输入点,而你只需要10个输入。不过1214C的存储器和通信接口余量更大,后期想扩展计分功能或者接入触摸屏,它在性能上更从容,所以毕设选型时一般优先推荐1214C。
供电方面,S7-1200的L+端子接24V直流电源,注意要单独给传感器和输出负载供电,不要全部堆在一个小功率开关电源上。8个指示灯加蜂鸣器的电流不大,但选电源时建议留出至少50%的余量,一个5A的24V开关电源足够带动整个系统,价格也就几十块,别在这个地方省钱。
2.3 I/O分配表该怎么规划
I/O分配是硬件设计里最基础也最不能出错的一步。分配的原则是清晰、有规律、留有扩展余地。我建议采用这样的方案:
| 输入点 | 用途 | 输出点 | 用途 |
|---|---|---|---|
| I0.0 | 选手1抢答按钮 | Q0.0 | 选手1指示灯 |
| I0.1 | 选手2抢答按钮 | Q0.1 | 选手2指示灯 |
| I0.2 | 选手3抢答按钮 | Q0.2 | 选手3指示灯 |
| I0.3 | 选手4抢答按钮 | Q0.3 | 选手4指示灯 |
| I0.4 | 选手5抢答按钮 | Q0.4 | 选手5指示灯 |
| I0.5 | 选手6抢答按钮 | Q0.5 | 选手6指示灯 |
| I0.6 | 选手7抢答按钮 | Q0.6 | 选手7指示灯 |
| I0.7 | 选手8抢答按钮 | Q0.7 | 选手8指示灯 |
| I1.0 | 裁判开始按钮 | Q1.0 | 蜂鸣器 |
| I1.1 | 裁判复位按钮 | 备用 | — |
这里有一个设计细节我希望你特别留意:按钮输入的类型。抢答按钮必须用常开触点、自复位型按钮,按下去闭合、松手断开,千万不要用自锁型按钮,否则选手按了一次之后状态一直保持,程序就没办法判断“当前这一轮是否已经处理过这个选手的信号”了。裁判的开始按钮和复位按钮也用自复位型,这是整个系统能正常循环工作的基础。
关于触摸屏,我建议选用西门子KTP700 Basic精简系列面板。它和S7-1200同属博途生态,组态时直接拖一个HMI连接PLC,变量通过PLC变量表自动关联,不需要写任何通信代码,对毕设来说是性价比最高的方案。KTP400虽然更便宜,但屏幕尺寸只有4.3英寸,显示效果和交互体验都差一截,做项目演示的时候会显得小气。触摸屏上要组态的核心元素有四个:当前胜出选手编号显示、当前状态文本(等待开始/抢答中/本轮结束)、裁判开始按钮、裁判复位按钮。HMI上的按钮和实体按钮是并行关系,也就是说操作员既可以用触摸屏操作,也可以用面板上的物理按钮操作,两者不冲突。
3. 程序核心逻辑:先到先得是怎么用梯形图实现的
3.1 程序的整体结构怎么组织
S7-1200的编程环境是博途(TIA Portal),工程组织方式以OB(组织块)、FB(函数块)、FC(函数)、DB(数据块)为核心。八人抢答器这种规模的程序不算复杂,直接用OB1主程序加一个FB或者FC就能实现,但我强烈建议你不要把逻辑全堆在OB1里——至少封装成一个FC,输入是8个按钮信号和2个控制信号,输出是8个指示灯状态和1个蜂鸣器状态,这个封装习惯对你后续扩展功能有好处。
我的建议结构是:
- OB1主循环:调用抢答控制FC,处理复位、开始、抢答判定流程
- FC1抢答控制:核心逻辑块,包含允许抢答判断、选手判定、锁存、显示输出
- DB1数据块:存放“是否已锁定”“胜出者编号”“上一轮有效状态”等中间变量
- 触摸屏对应的HMI变量:与DB1中的变量建立引用
有人可能会问,这么简单的程序用FC是不是小题大做?但从毕设评阅的角度看,一个结构清晰、有模块化意识的程序比一个“一根筋”的大梯形图得分要高得多。我见过很多学生把八个选手的判定逻辑复制粘贴八遍,每个网络的触点几乎一样,只有地址不同——程序确实能跑,但答辩老师一眼就能看出你没有工程思维。正确的做法是用“数组+循环”的思想:把8个按钮输入和8个胜出标志放到数组里,程序里用FOR循环统一扫描,代码量直接少一半,可读性还好。
3.2 抢答判定的核心:互锁锁存怎么写
抢答判定的本质是“并行输入下的优先级判定”。8个选手的信号在同一个扫描周期内可能同时到达,而系统必须在这些信号中选出一个,并屏蔽其他信号。这个用现代控制理论的话说,就是一个竞争的仲裁逻辑。在继电器控制时代,我们用“互锁触点”来实现——A选手的常闭触点串在B选手的回路里,B选手的常闭触点串在A选手的回路里,谁先动作谁就把别人的回路切断。在PLC时代,逻辑上依然是这个思路,只不过常闭触点变成了程序里的取反判断。
用梯形图写,核心逻辑是这样的:先判断“系统是否已锁定”,锁定标志是M0.0。如果M0.0为0,则扫描8个按钮,比如检测到I0.0为1,就把M0.0置位、把胜出者编号MOVE到数据块、把Q0.0置位。然后后续的每个选手网络都必须串一个M0.0的常闭触点,M0.0一旦为1,后面这些网络的能流全部被切断,后续选手的置位指令就不会触发。这样实现的互锁有一个天然特性:如果两个信号恰好同时到达,执行顺序靠前的选手优先。这句话用工程语言说就是“CPU扫描顺序决定了仲裁优先级”。
如果你用SCL语言,这段逻辑更简洁直观:
// 抢答判定核心逻辑(FB或FC中的片段) IF #复位信号 THEN #锁定标志 := FALSE; #胜出者序号 := 0; FOR #i := 1 TO 8 DO #输出指示[#i] := FALSE; END_FOR; ELSIF #开始信号 AND NOT #锁定标志 THEN FOR #i := 1 TO 8 DO IF #按钮输入[#i] THEN #锁定标志 := TRUE; #胜出者序号 := #i; #蜂鸣器 := TRUE; EXIT; // 一旦找到第一个按下的选手,立即退出循环 END_IF; END_FOR; END_IF;这里有个关键的细节是 EXIT 指令。S7-1200的SCL里,FOR循环可以用EXIT提前终止。一旦某位选手的按钮触点导通,立刻把锁定标志置位并退出循环,不再扫描后面的按钮。这个执行方式和梯形图串联M0.0常闭触点的效果完全等价,但代码量小很多。顺便说一句,博途是支持在同一个工程里混合使用梯形图和SCL的,所以你完全可以在OB1里用梯形图调用FC,而FC内部用SCL写核心逻辑,两种语言各自发挥优势。
还有一个容易被新手忽略的问题:按钮的机械抖动。物理按钮在按下瞬间,触点会经历几次高速通断,持续时间大约5到20毫秒,如果PLC程序直接采样这个信号,可能一个按钮按下会产生多次脉冲,导致抢答器出现“一个人按了两次”“同时判两个人胜出”这种诡异问题。解决办法是在程序里加一个延时滤波:检测到按钮信号后启动一个10毫秒的定时器,定时器计时结束后再读取一次信号,如果仍然为1才确认有效。我习惯用定时器TON加一个中间位来模拟“数字滤波”,实测下来非常稳。
3.3 显示和提示逻辑怎么配合
抢答判定完成后,显示逻辑相对简单,但要注意几个细节。第一个细节是蜂鸣器的控制:蜂鸣器不应该一直响,应该鸣响2到3秒后自动停止,否则现场会很吵。实现方式是用一个TON延时断开定时器(TOF)或者更简单——抢答成功后启动一个2秒的TON,定时器输出取反后作为蜂鸣器的使能条件。梯形图写就是:Q1.0的线圈串联一个“TON.Q的常闭触点”,这样定时器一到2秒,常闭触点断开,蜂鸣器自动停。第二个细节是指示灯和胜出状态的配合:胜出者指示灯应该保持常亮直到复位,而不是跟随按钮松手就熄灭,所以必须用置位指令而不是普通输出指令。第三个细节是开始信号的语义:开始按钮按下的那一刻系统进入“允许抢答”状态,之后按钮松开状态保持不变,直到复位。这个功能需要用置位来表达“允许状态”。
我用一个DB数据块来管理这些状态变量,结构大致是这样:
| 变量名 | 数据类型 | 初始值 | 用途 |
|---|---|---|---|
| Locked | Bool | FALSE | 抢答锁定标志 |
| Winner | Int | 0 | 胜出选手编号(0表示无) |
| AllowQuiz | Bool | FALSE | 裁判允许抢答标志 |
| StartPulse | Bool | FALSE | 开始信号上升沿捕获 |
| ResetPulse | Bool | FALSE | 复位信号上升沿捕获 |
| BuzzerON | Bool | FALSE | 蜂鸣器输出状态 |
| ButtonArray | Array[1..8] of Bool | FALSE | 8路按钮输入镜像 |
| LightArray | Array[1..8] of Bool | FALSE | 8路指示灯输出镜像 |
这里为什么要把按钮输入和指示灯输出映射到数组里?因为SCL里对数组用循环处理非常方便,尤其在触摸屏上显示“当前胜出者编号”时,只需要把Winner这个整数变量拖到HMI画面的文本控件上,PLC程序里处理编号的中断和恢复逻辑比处理一堆散落的Bool变量轻松得多。
3.4 程序流程图的梳理
论文报告里必画系统流程图,程序架构也可以先画好再写代码。顺手理一遍:
流程从系统上电开始:PLC初始化,锁定标志清零,胜出者编号为0,所有指示灯熄灭。然后系统等待裁判按下开始按钮。开始按钮有效后,置位允许抢答标志,触摸屏显示“抢答中”。随后程序进入扫描循环,实时检测8路按钮输入。一旦检测到某一路闭合,且当前锁定标志为0,就判定该选手胜出,置位锁定标志,更新胜出者编号,点亮对应指示灯,蜂鸣器鸣响2秒。最终系统停在“本轮结束”状态,所有未生效的按钮输入都被锁定标志屏蔽。裁判按下复位按钮后,锁定标志清零、胜出编号清空、指示灯熄灭,系统回到初始状态。
这是最基本的单轮抢答流程。如果你想在报告中加分,可以加一个“违规抢答”逻辑:裁判尚未按开始按钮时,如果有选手提前按下,系统判定为犯规,触摸屏显示“选手X犯规”。这个功能对程序逻辑没有根本性改动,只是在开始信号为0时增加了一个检测分支,但写进报告和演示视频里,功能性上的亮点一下子就出来了。
4. 实操过程:从接线到仿真再到现场调试
4.1 外部接线:端子别接错,电源最要紧
硬件接线是整个项目里最“物理”的一环,也是很多学生容易出错的地方。S7-1200 CPU 1214C的端子分布有一个典型规律:最左侧是电源端子和输入端子,中间是传感器电源输出,右侧是输出端子。输入端的公共端子是M,输出端的公共端子是L+和M,接线时必须特别注意不要把输出端的24V直接串进输入端。
八人抢答器的接线实际上可以分成三路:按钮输入回路、指示灯输出回路、触摸屏通信回路。按钮输入回路采用24V直流供电,按钮一端接PLC输入端子,另一端接公共0V(M端子),PLC输入端内部已经做了光耦隔离和数据采集——这是最常见的漏型接法。指示灯输出回路采用24V直流供电,PLC输出端子Q0.0~Q0.7对应8个指示灯的一个端子,指示灯的另一个端子统一接0V。蜂鸣器接到Q1.0,如果蜂鸣器功率稍大,建议加一个中间继电器过渡,不要直接带着大电流负载。
这里补充一个“为什么”:PLC晶体管输出的负载能力通常是0.5A/点,指示灯没问题,但如果你接的蜂鸣器是那种大功率报警器,工作电流超过0.5A,就可能烧毁输出模块。稳妥的做法是Q1.0驱动一个24V中间继电器线圈,继电器的触点再去控制蜂鸣器,虽然多一个元件,但安全冗余大大提升。你写报告时,这部分可以作为“系统可靠性设计”的一个小节展开,答辩时老师会注意到。
接线端子号在博途的硬件配置界面可以看到每种CPU对应的I/O地址和端子排列图,按图施工基本不会错。不过有一点我必须强调:接线前一定断电操作,PLC的24V低压虽然比不上220V危险,但接线过程中如果带电操作,极易造成模块内部器件击穿损坏,辛辛苦苦做出来的板子可能因为一次疏忽就报废。
4.2 博途工程的建立与参数配置
博途软件现在的版本是V17、V18甚至V19,S7-1200的G2版本也在更新迭代。在博途里新建一个项目,添加CPU 1214C,这一步几乎所有人都知道。有几个容易出问题的地方要单独提醒。
第一,固件版本问题。你手里的PLC模块实物可能出厂固件是V4.x,而博途软件默认的固件版本可能更高或与之不同。如果组态里选择的CPU固件版本和实物不一致,在线连接时会直接报“设备不支持该固件”的错误。解决办法是在硬件组态界面的CPU属性中修改固件版本号,或者在建立设备时直接选择“与实物一致”的版本。我的习惯是先右键硬件站点、选择“在线”和“比较”,让博途自动识别实际固件版本,再按识别结果修改组态。
第二,IP地址规划。S7-1200通过以太网口和编程电脑以及触摸屏通信,必须规划好IP地址。通常做法是:编程电脑的网卡设置为192.168.0.100,PLC设置192.168.0.1,触摸屏设置为192.168.0.2,子网掩码统一为255.255.255.0。在博途中双击CPU的以太网口属性,把IP地址设为192.168.0.1,然后下载时把“包含IP地址的设备”勾选上,下载完成后PLC的IP地址就固定了。用网线直连比通过交换机连更简单,千兆网卡有时候和S7-1200的百兆口会出现协商问题,直连时如果连不上,可以在电脑网卡属性里把速率强制到100Mbps全双工试试,这个坑我踩过不止一次。
第三,OB1主程序中的循环时间。S7-1200默认的循环扫描时间是1毫秒数量级,八人抢答器程序很短,单次扫描时间可能只有零点几毫秒,完全满足抢答判定精度。但如果你加了触摸屏的HMI通信,注意不要使用“周期性通信”之外的邮箱机制,否则显示刷新会有延迟感。触摸屏变量的访问可以设置为“HMI刷新周期”100毫秒,肉眼完全感觉不到延迟。
下载程序之前,记得先编译整个项目。博途会检查硬件组态、变量定义、程序语法,编译通过后点击下载按钮,选择目标IP地址,在线连接PLC,把硬件配置和程序块一起下载进去。下载过程中如果PLC处于“运行”状态,博途会提示停止PLC——直接确认即可。程序下载完成后把CPU切到RUN模式,再打开监控表逐个测试输入状态。
4.3 仿真测试:没有实物也能把逻辑跑通
并不是所有同学手头都有S7-1200实物,好在博途自带S7-PLCSIM仿真器。在博途中启用S7-1200仿真,同样需要先编译项目,然后在菜单栏点击仿真启动,软件会弹出一个仿真窗口,同时把当前项目加载到虚拟PLC中。仿真环境下你同样可以下载硬件组态和程序,然后通过仿真面板手动给输入信号赋值,观察输出信号变化。
用仿真器测试抢答逻辑尤其方便:你可以在仿真面板里连续点击I0.0、再点击I0.3,观察Q0.0是否置位、Q0.3是否仍然保持为0,从而验证互锁逻辑是否正确。仿真器还能模拟“同时按下多个按钮”的极端情况:先把I0.0和I0.1都置为1,再触发开始信号,看判定结果是否优先选中编号靠前的选手。大多数情况下这个优先级由程序扫描顺序决定,通过仿真验证你的程序逻辑是否符合预期,是非常重要的一步。
如果你计划做“带报告”的版本,仿真截图可以直接放进报告里作为“软件调试”章节的证明材料。我建议至少截图三种情况:初始状态、1号选手抢答成功、8号选手抢答成功后蜂鸣器鸣响,每张图配一段文字说明,报告的可信度就上来了。
4.4 现场调试的实测记录
有实物之后,现场调试建议按照“先静态、后动态、再整机联调”的顺序走。静态调试是指不运行程序,直接通过博途的监控表强制输出,逐个验证接线和输出模块;比如把Q0.0强制为1,看1号指示灯是否亮起,亮起来说明接线正确。动态调试是指把程序下载进去,但不接实体按钮,通过监控表手动置位输入信号来测试程序逻辑。最后再做整机联调,接上实体按钮和触摸屏,模拟一场抢答比赛。
我在自己做这个项目时,习惯用博途的“监控表”功能打开“启用外围设备访问”,这样可以同时强制输入和输出。测试过程中最重要的一个指标是响应时间:从某个选手按下按钮到对应指示灯亮起的时间差,正常情况下这个时间应该远小于一个扫描周期的若干倍,人眼完全感知不到延迟。如果发现指示灯延迟明显,先检查是否有较长延时的定时器串联在输出路径上,再看PLC扫描周期是否被某些特殊指令拉长。
触摸屏联调时有一个很容易被忽略的坑:KTP700触摸屏和PLC通信需要同一个子网,如果你之前把PLC的IP地址改成了192.168.0.5,而触摸屏组态里的连接还是默认的192.168.0.1,那HMI上就会一直显示“连接中断”。务必在触摸屏组态中检查与PLC的连接配置,确保IP地址和PLC的以太网口地址一致。还有一点是HMI中的变量名称要和PLC变量表中的名称一致,博途的跨设备变量拖拽可以自动创建连接,如果你手工敲错了名字,编译时会报出“变量未定义”的错误,按照报错提示逐个修复即可。
5. 报告撰写与答辩准备:万字报告到底怎么填
5.1 报告的章节结构建议
很多学生拿到“万能字报告”这个要求时不知从何写起,或者干脆去网上拼接一堆别人论文的段落,结果答辩时被老师一问就露馅。万字报告的核心不是字数,而是“论证闭环”——需求分析、方案设计、硬件实现、软件实现、调试测试、总结展望,每一步都要有前后呼应。我建议采用这样的章节结构:
第一章绪论,写清楚抢答器的应用背景(竞赛活动、知识问答、教学互动等场景),说明设计此类系统的意义。这一章大约1000字,这部分重点在于“引出问题”,不需要长篇大论,但要交代清楚为什么选PLC而不是单片机或继电器电路。
第二章总体方案设计,先列需求指标(8路输入、声光提示、复位功能、时间精度要求等),再对比几种实现方案——单片机方案、继电器逻辑电路方案、PLC方案——最后论证为什么PLC方案最优。这一章大约1500字,是老师最看重逻辑能力的一章。
第三章硬件设计,给出PLC选型理由、I/O分配表、元器件清单、外部接线图、端子定义。这一章大约3000字,画图是重点,直接用博途的硬件组态截图加一张自己绘制的接线图,清晰直观。
第四章软件设计,给出程序流程图、梯形图截图、SCL代码、变量表,并对每一段关键逻辑做文字说明。这一章大约3000字,是全文的技术核心。
第五章系统调试与仿真,写清楚调试步骤、仿真结果、现场实测数据。这一章大约1000字,配上监控表截图和触摸屏运行照片。
第六章总结与展望,写一下设计的优势、不足和改进空间,比如增加“违规抢答检测”“答题倒计时”“自动计分”等扩展功能。这一章大约500字,不需要堆砌套话。
这样加起来约一万字,每一章都有实打实的内容。你的“设计源文件+万字报告+讲解”三件套里,报告是让老师了解你完整工作量的主要载体,不能凑数。
5.2 图纸和技术细节怎么放进报告
报告里有两类图纸是必备的:硬件接线图和程序流程图。硬件接线图如果你不会用专业电气软件画,可以直接在博途的硬件配置界面截图,再标注每个端子的连接去向。更建议的方式是用Visio或者CAD画一张逻辑清晰的接线示意图,把PLC模块、按钮、指示灯、蜂鸣器、电源、触摸屏之间的线缆关系画清楚。这张图放在报告里,比任何文字描述都直观。
程序流程图要用标准的流程图形状,从“系统上电”开始,经过初始化、等待开始、扫描按钮、判断锁定、输出显示、等待复位等节点,最后回到初始化。注意流程图中要体现“开始信号”和“复位信号”的判定分支,否则流程图和程序代码对不上,答辩时很容易被抓出破绽。
梯形图截图不要直接截博途的代码块,最好先把程序整理好,放大到合适比例,截图后加上编号注释。你的文字说明要能解释每一行梯形图的含义,比如“网络2:选手1抢答判定,串联M0.0常闭触点实现互锁,S_Q0.0输出为置位,保持至复位”。这种逐步解释在报告中非常加分,因为它体现了你真的懂这段程序,而不是网上抄来的。
5.3 答辩讲解的演示逻辑
“讲解”部分对应答辩或视频演示的场景。一个好的演示流程应该控制在10到15分钟,按以下顺序展开:先介绍系统组成(用硬件实物或接线图),再说明功能需求和一个关键指标——抢答判定的正确率、响应时间、复位可靠性;然后现场演示正常抢答流程、同时按下两个按钮时系统如何裁决、复位后系统如何回到初始状态;如果加了触摸屏,再演示触摸屏上的显示和操作;最后讲解程序中互锁逻辑的实现方式,这是最能体现你技术含量的环节。
在演示过程中,我的一个经验是:不要只演示“成功路径”,要有意识地展示边界情况——比如复位后不按开始按钮直接抢答,此时系统应该不做任何响应;或者两路按钮非常接近地连续按下,系统只判定第一个。这些边界情况一旦在答辩现场被老师问出来,你心里有数就能从容应对。
6. 避坑指南:八人抢答器最常见的几个翻车现场
6.1 按钮抖动导致误判
按钮是机械触点器件,按下和松开的瞬间会有弹簧振颤,表现为开关信号在几毫秒内反复通断。如果PLC直接读取这个信号作为抢答信号,就可能出现反复触发置位、甚至两个选手按下同一时间被误判为多次抢答的现象。解决思路是加入“去抖确认时间”:检测到按钮信号后,启动一个10到20毫秒的延时,延时结束后再次读取信号,如果保持有效则确认为有效信号。这个逻辑可以用一个简单的定时器网络实现:TON定时器的输入端连接按钮信号,定时器输出Q作为有效信号,而不再直接使用按钮触点。我在程序里用每个按钮一个TON的做法,实测下来任何物理按钮都不会出现误触发了。
6.2 两个选手同时按下如何仲裁
严格意义上,两个选手不可能在纳秒级完全同步按下,总会有微小的时序差异。但因为PLC具有周期性扫描的特性,如果两个信号恰好在同一个扫描周期内都导通,程序就会根据扫描顺序判定排在前面的那位选手胜出。用SCL写时,FOR循环从1到8扫描,从i=1开始找,找到就退出,所以编号小的选手天然占优。这个设计不算是缺陷,而是仲裁策略——你需要在报告里明确写出“当多路信号同时到达时,系统按I/O编号顺序仲裁”,这是一句非常专业的表述。如果你想让仲裁更“公平”,可以改用随机数模块,但这对毕设来说没有必要,反而会增加系统的不可预期性。
6.3 触点和线圈地址冲突
博途的符号寻址方式很好用,但用传统梯形图时你仍然要注意:同一个输出线圈不要在多处写,尤其不要既在OB1中使用又在FC中使用,否则会有双线圈问题。双线圈问题在S7-1200中虽然不像老式S7-200那么致命,但会造成输出状态的不确定性,调试时非常容易怀疑人生。我的建议是所有输出信号统一在FC内部计算,把结果存到DB的镜像变量,然后再统一映射到Q点。这样程序结构清晰,排查问题也快。
6.4 IP通信失败
这个故障在首次连接时几乎必现。现象是博途在线扫描找不到PLC。排查顺序:第一步检查网线是否插好,PLC的以太网口是否有指示灯闪烁;第二步检查编程电脑的IP地址是否和PLC在同一网段,尤其笔记本电脑可能开了多个网卡,要确保以太网接口的IP是192.168.0.x;第三步在博途的“可访问设备”窗口里重新扫描,扫描后勾选“类型”和“地址”列查看是否有设备回应;第四步如果还是找不到,直接把电脑的网卡禁用再启用一次,重启博途。还有一个比较容易忽略的原因:Windows防火墙可能拦截了S7通信端口,可以在防火墙的高级设置中为“S7-1200站”添加入站规则,或者临时关闭防火墙测试。
6.5 程序下载后指示灯不亮
如果程序运行了,你强制某个按钮信号为1,但对应的指示灯就是不亮,首先检查PLC是否处于RUN模式,其次检查Q点有没有被强制(博途监控表里可以看到被强制的点标成“强制”字样),最后用万用表量输出端子的电压。最常见的原因是“接线时公共端接错”——晶体管输出点Q0.0的电流是从L+流入负载再回到Q0.0端子,如果负载的一端接到了M而不是L+,整个回路没有电压,负载当然不亮。这一点在接线时就要确认清楚,调试时再查会浪费大量时间。
6.6 触摸屏显示的编号不更新
触摸屏的显示来自PLC的DB变量,如果胜出者编号在程序里更新了,但HMI画面没反应,先检查HMI运行后是否和PLC建立了连接——触摸屏右上角通常有一个通信状态图标,正常是绿色的对勾。如果显示中断,排查IP地址和子网掩码。如果连接正常但数据不更新,检查HMI变量关联的DB地址是否正确,尤其你使用了数组变量后,HMI里的变量类型要和PLC侧保持一致,数组下标0和1的问题也经常引发显示错位。
7. 这个项目还能怎么扩展
做完基础的八人抢答功能之后,如果你还有余力,我非常推荐做两三个扩展功能,它们能显著提升项目的完整度和答辩评分。
第一个扩展是“答题倒计时”。抢答成功后,系统自动开始一个30秒或60秒的倒计时,触摸屏上显示剩余秒数,超时未答则蜂鸣器鸣响提示。实现方式很简单:调用S7-1200的IEC定时器TONR累加定时器,数据块里存一个定时器剩余值,HMI上绑定一个文本显示控件格式化输出即可。
第二个扩展是“自动积分”。每轮抢答结束后,裁判可以在触摸屏上输入该选手本轮得分或者系统自动加1分,积分累计显示在HMI画面上。这个功能需要的数据逻辑非常简单——在DB里建一个长度为8的整数数组ScoreArray,每次胜出后在对应元素上加1,然后用HMI的柱状图或表格控件展示排名。这个功能写进报告里,会让方案看起来是一个完整的竞赛计分系统,而不仅是“抢答器”。
第三个扩展是“MODBUS TCP通信”。S7-1200本身支持通过MODBUS TCP协议与外部设备通信,如果你想更进一步贴合工业物联网的热点,可以把PLC的胜出者编号通过MODBUS TCP协议上报给一个上位机软件,或者用一个云端面板读取数据。这个方向可以和当前工业数据采集的技术趋势结合起来,在你的论文“展望”一章里写出这个方向,会显得你对行业趋势有认知。
我个人在实际操作中的一个体会是,这个项目的核心价值不在于功能本身有多复杂,而在于你通过它把PLC开发的全流程走通了一遍——从硬件选型到接线,从梯形图逻辑到HMI组态,从仿真到现场调试,这和在课堂上做几道PLC编程题是完全不同的体验。做这个项目的过程中,你踩过的每一个坑,最后都会变成答辩时的谈资。所以如果你正在犹豫毕设选题,或者刚开始接触S7-1200,这个题目是一个投入产出比很高的起点。