三菱PLC+MCGS触摸屏四路抢答器设计与组态实战
做这套四路抢答器起因是朋友的工厂要办安全知识竞赛问我说市场上买的成品抢答器不够灵活想让我帮忙做一套。我手头正好有三菱PLC和MCGS触摸屏的现货就顺手搭了一套。做完之后发现这套系统的含金量其实远不止“抢答”本身——它把三菱FX系列PLC的位逻辑、锁存、输出控制和MCGS组态软件的设备通信、画面联动、脚本逻辑全部串起来了非常适合作为PLC入门到进阶的实例。这篇就把完整搭建过程、梯形图设计、 MCGS组态步骤和联调时踩过的坑都写出来打算用三菱PLC做抢答器控制系统的朋友可以直接参考。1. 抢答器的核心需求拆解先想清楚再动手1.1 四路抢答到底要解决什么问题有人觉得抢答器不就是四个按钮加几个灯吗随便用个单片机加继电器都能做。确实DIY电子爱好者用一块STM32或者AT89C51就能搭出抢答器而且市面上也有现成套件。但从工业现场和长期使用的角度来看用PLC来做抢答器有它不可替代的地方抗干扰能力强、接线可靠、逻辑透明可改、维护方便。竞赛现场的按钮线可能拉得比较长单片机方案在信号抖动和长线干扰面前经常翻车而PLC输入端的硬件滤波和隔离设计就是为这种环境准备的。回到功能需求四路抢答器看起来简单真正细拆下来要解决三个问题第一公平性。多路选手同时按下按钮时系统必须只锁存最先按下的那一组后续信号一律无效。这是抢答器最核心的灵魂功能。第二状态指示。裁判和观众要能一眼看出是哪一路选手抢答成功并且要锁定显示直到裁判复位。第三可复位。一轮抢答结束后裁判按下复位按钮系统清空状态等待下一轮。如果把使用场景再放宽一点还可以加上裁判总开关、倒计时、违规判定、得分累计这些增强功能。但无论功能怎么扩展核心的“先按先锁、后按无效”这个逻辑骨架是不变的。1.2 为什么选三菱PLC加MCGS组合选型的逻辑是这样的抢答器属于典型的数字量输入输出控制五六个输入点、五六个输出点一台小型的PLC就完全够用。三菱的FX系列在这个量级上是应用最多、资料最全的机型梯形图指令直观上手门槛低。我在这个项目里用的是FX3U-16MR/ES16点里含8路输入和8路继电器输出做四路抢答器绰绰有余还有充足余量以后扩展功能。至于MCGS触摸屏它的定位是给PLC做人机界面。很多人觉得抢答器根本不需要触摸屏按钮加指示灯就够了。但在实际使用中裁判需要看到抢答状态、倒计时、当前轮次这些信息如果全部用物理按钮和指示灯来实现面板会做得又大又乱。而且MCGS组态软件是国产软件里的主流选择支持三菱FX系列PLC的驱动非常成熟串口一接就能通信比用LabVIEW这类上位机去控制PLC更适合现场这种轻量场景成本低、上电自启、不需要电脑值守。从项目整体来看用触摸屏还有一个隐藏的好处修改运行参数不需要改梯形图重新下载。比如倒计时时长、选手编号显示格式、复位方式这些都可以在MCGS画面上直接调整对最终用户非常友好。2. 硬件选型与I/O分配照着这张表配就够了2.1 完整的物料清单实际搭建一套四路抢答器需要的硬件并不多我把清单整理如下你可以直接照着买或者从库里翻序号元件型号/规格数量用途1PLC主机三菱FX3U-16MR/ES1台逻辑控制核心2触摸屏MCGS TPC7062K7寸或同系列1台人机界面显示与操作3抢答按钮自复位常开按钮带灯款可选4个选手抢答按键4复位按钮自复位常开按钮1个裁判复位5蜂鸣器DC24V有源蜂鸣器或电铃1个抢答成功声音提示6状态指示灯DC24V红/绿指示灯4个四路抢答状态显示7开关电源DC24V/3A1个给触摸屏和输出侧供电8通信电缆三菱FX编程口转RS232/RS485线1根PLC与MCGS通信这里有个细节值得说很多初学者会在按钮这里翻车。抢答器用的是自复位常开按钮按下接通、松开断开而不是自锁按钮自锁按钮按下去之后卡在里面松不回来抢答完没法自动复位千万不要选错。我在淘宝上买过一批普通工控按钮结果货到了才发现是自锁式的白白又等了两天物流。2.2 输入输出点分配表PLC这侧的点位分配是整个控制系统的地址地图最好在画梯形图之前就定清楚不然后面越改越乱。我用FX3U-16MR/ES做的分配如下PLC地址功能定义接线说明X01号选手抢答按钮按钮一端接X0另一端接COM端口X12号选手抢答按钮同上X23号选手抢答按钮同上X34号选手抢答按钮同上X4裁判复位按钮按钮一端接X4另一端接COM端口Y01号选手抢答指示灯对应X0的锁存状态Y12号选手抢答指示灯对应X1的锁存状态Y23号选手抢答指示灯对应X2的锁存状态Y34号选手抢答指示灯对应X3的锁存状态Y4蜂鸣器/电铃有人抢答成功时响一声有些朋友会把输入信号接成高电平有效或者低电平有效这个在PLC侧其实是可以配置的。我的习惯是统一用漏型接法也就是按钮一端接X端另一端接输入公共端COMPLC内部通过检测X端和COM端之间的通断来识别信号。这样接线简单统一也方便检修。FX3U的输入端是S/S端和X端搭配使用的S/S接0V、X端接24V按钮串在X端和24V之间或者S/S接24V、按钮串在X端和0V之间。具体接法要看你手头按钮的公共端走线怎么方便两种方式PLC都能识别只是一定要全系统统一别一路用NPN接法另一路用PNP接法那调试时会疯掉的。2.3 接线施工的注意事项接线这块我踩过几个坑单独拿出来说第一PLC输出端的公共端问题。继电器输出的PLC每个COM公共端可能是分组隔离的FX3U-16MR的输出侧有几个COM端Y0-Y3可能共用一组COMY4-Y7共用另一组。接线前务必看PLC侧面的端子图确认各组输出的COM分配不要想当然把Y0到Y4全部接到同一个COM上。如果不小心将一个COM组的电源反接或者超载轻则这组输出全部失效重则烧坏继电器触点。第二蜂鸣器最好用带驱动的有源蜂鸣器并且注意电流。DC24V有源蜂鸣器工作电流一般在20到50毫安PLC的继电器输出触点直接驱动没问题。但如果用的是电铃或者大功率声光报警器就一定要通过中间继电器转接不要让PLC的Y输出直接背大电流负载继电器触点寿命和PLC主板的散热都扛不住。第三通信电缆的选型。MCGS触摸屏和FX3U之间一般走编程口协议用三菱的SC-09编程线或者触摸屏自带的通信线。我第一次接的时候图省事拿了一根普通的USB转232线就往上怼结果MCGS里怎么都搜不到设备换了原装线立马就好。个中原因是FX编程口的电平标准和RS232不完全一样普通转接线没有信号转换芯片线序对不上。有条件的话建议直接用触摸屏厂家的配套线或者买带隔离的SC-09线。3. 梯形图设计抢答锁存逻辑其实就一个关键位3.1 核心逻辑用一个M中间继电器当总锁四路抢答器的梯形图说白了核心就是一个锁存逻辑。很多人第一次写会写成X0接通就置位M10X1接通就置位M11各自独立结果一测试就出问题——同时按下两个按钮两个M都被置位了。原因就是没有全局锁。正确的做法是设置一个公共的标志位我叫它M0中文含义是“本轮抢答是否已发生”。系统初始状态M0为OFF四个抢答按钮的检测条件都要加上“M0为OFF”这个前提。谁先把X0到X3这四路中的任意一路接通谁就不仅置位自己的M10到M13同时立刻把M0置位。因为PLC的程序是从上到下逐行扫描执行的M0一旦在某个网络里被置位后面那些网络执行时检查到M0已经是ON了它们的置位条件就不满足自然就不会再生效。这就实现了“先按先锁、后按无效”的公平判定。这个思路还可以推广任何需要在多个输入之间竞争、抢断、互锁的PLC程序都可以用类似的“总锁位”思路比如多台电机启动的互锁、多工位设备防重复动作等都是一招通吃。3.2 GX Works2里的完整梯形图参考以下是用GX Works2写的核心程序指令表形式贴在下面方便没有梯形图编辑界面的朋友直接对照// 第1段1号选手抢答锁存 LD X0 ANI M0 SET M10 SET M0 // 第2段2号选手抢答锁存 LD X1 ANI M0 SET M11 SET M0 // 第3段3号选手抢答锁存 LD X2 ANI M0 SET M12 SET M0 // 第4段4号选手抢答锁存 LD X3 ANI M0 SET M13 SET M0 // 第5段输出到指示灯 LD M10 OUT Y0 LD M11 OUT Y1 LD M12 OUT Y2 LD M13 OUT Y3 // 第6段抢答成功蜂鸣器提示 LD M0 OUT Y4 // 第7段裁判复位放在最后 LD X4 RST M0 RST M10 RST M11 RST M12 RST M13程序逻辑很清晰前四段处理四路抢答竞争条件是“自己按钮接通”加“总锁M0尚未置位”。置位M10到M13作为各选手的状态锁存同时置位M0封住其他路。第五段把四个状态位映射到Y0到Y3输出驱动指示灯。第六段让蜂鸣器在抢答成立时响。最后一段裁判按X4复位把所有状态清掉。这里有一个容易被忽略的细节复位段必须放在程序末尾。如果把复位放在程序开头按下复位按钮时X0到X3如果还是接通状态这一轮扫描里程序先把M0复位随后执行抢答判断时按钮还按着就会立刻再次触发一轮新的“抢答”导致你复了位跟没复位一样。放在末尾就能保证这一轮扫描完全结束后再清状态下一轮扫描开始才重新开放逻辑更干净。3.3 关于同时按下的“极端公平”问题实际抢答测试时总会有人问万一两个选手真的同时按下怎么判这个问题在PLC层面其实给不出绝对公平的答案因为任何物理系统都存在毫秒级的响应差异。PLC的做法是按下先后判定如果两个按钮在同一个扫描周期内同时被检测到接通那么程序顺序靠前的网络会被优先执行也就是X0那一路优先。在实际场景中人的反应时间差通常都在几十毫秒以上远大于PLC的扫描周期所以这个差异根本不会被感知。如果竞赛规则要求极其严格可以在硬件上增加一个继电器互锁电路或者在按钮端做独立硬件判断但对大部分知识竞赛来说PLC程序锁存已经足够用了。顺带提一句PLC输入端的数字滤波是默认开启的FX3U默认输入滤波时间是10毫秒。这个参数对抢答器来说是个天然好处按钮抖动带来的误触发会被PLC硬件过滤掉九成。我实际测试时快速连按、轻触、按钮接触不良都没有发生过重复抢答或者误抢答。4. MCGS组态实战从建工程到画面联动4.1 新建工程与设备连接MCGS组态软件分嵌入版和通用版TPC系列触摸屏用的是嵌入版组态环境。打开软件后第一步是建工程选择触摸屏型号TPC7062K对应的是7寸屏。建好工程后先别急着画画面最要紧的是把设备连接搞定。设备不通的话后面所有数据都是空的。在MCGS的设备窗口里先添加一个“通用串口父设备”然后在父设备下面添加“三菱FX系列编程口”子设备。注意顺序不能反子设备必须挂在父设备下面这是MCGS的设备嵌套规则。添加完成后双击子设备配置通信参数。三菱FX编程口默认的通信参数是波特率9600、8位数据、偶校验、1位停止位PLC侧如果没改过出厂参数MCGS这侧就保持默认即可。COM口号按照电脑设备管理器里的实际串口来选如果用的是USB转串口线一般是COM3或者COM4。设备配置还有两个隐藏设置容易被忽略一个是最小采集周期默认一般是200毫秒。对抢答器这种实时性要求较高的场景我建议改成100毫秒抢答状态在触摸屏上的反应会更跟手。另一个是“设备地址”三菱FX编程口协议的设备地址一般是0或者1具体看PLC的参数设置里配置的站号两边必须对上不然通信也会失败。4.2 实时数据库与通道地址映射设备通信建立后MCGS的实时数据库是连接PLC数据和画面组件的桥梁。你需要在实时数据库里新建数据对象每一个对象对应PLC里的一个软元件。具体映射关系如下MCGS数据对象名称PLC软元件数据类型读写属性lockFlagM0开关型只读player1M10开关型只读player2M11开关型只读player3M12开关型只读player4M13开关型只读resetCmdM100开关型读写这里说明一下为什么要单独建一个resetCmd信号。直接使用X4作为复位信号也是可以的但在实际使用中裁判往往是坐在远处按触摸屏复位不一定走到按钮旁边。所以我特意在梯形图里留了一个远程复位的输入用的是M100MCGS画面上的复位按钮就是往M100写一个脉冲让触摸屏和物理复位按钮都能独立复位系统。这种“远程软复位”的思路在很多PLC项目里通用值得保留。MCGS里新建数据对象时需要选择“开关型”类型。如果你把位对象建成了数值型通信时大概率会出现数据类型不匹配的报错。另外对象名称不要带特殊符号MCGS对中文变量名支持不错但用英文或者拼音更稳兼容性更好。4.3 画面布局与动态联动画面设计是这个项目里最直观出效果的部分。我的布局方案是这样的首先放一个标题栏显示“四路抢答器控制系统”字样字号加大适合竞赛现场的大屏投屏或远观。然后在中部放四个大的选手状态指示块每个指示块由一个圆形指示灯和一个文字标签组成1号到4号选手依次排列。指示灯用MCGS的“圆”或者“标签”图元动态属性设置为对应选手状态值为1时填充色变为红色为0时填充色变为灰色。这样抢答成功后哪个选手的灯变色现场所有人都能一眼看到。右下方放两个按钮一个“复位”按钮一个“开始”按钮。复位按钮的操作是往resetCmd写1脉冲松开时写0。开始按钮这个阶段可以先不接实际程序只作为后续扩展倒计时功能的预留也可以在梯形图里加一个M101做裁判开始信号用来做违规判定。除了指示灯和按钮我还加了一个状态文字显示用MCGS的标签对象连接lockFlag在显示输出里写一个表达式当lockFlag为1时显示“抢答锁定”为0时显示“等待抢答”。这个文字提示对裁判的操作体验提升非常明显不用靠猜指示灯来判断系统状态。4.4 用MCGS脚本做抢答倒计时竞赛场景下光有抢答不行通常还需要一个抢答后的答题倒计时。这个功能可以在PLC里用定时器做但更灵活的做法是在MCGS里用脚本搞定好处是倒计时时间随时可以改不用反复下载PLC程序。具体做法在MCGS用户窗口的循环脚本里设置一个“剩余时间”数值对象默认值设为20。当lockFlag从0变1时启动一个计时触发的逻辑每过一秒把剩余时间减1当剩余时间减到0时触发一个蜂鸣提示同时显示“时间到”。这里用到的关键是MCGS的循环脚本和系统时间变量。我在脚本里用了一个辅助标志位判断是否已经开始计时避免lockFlag一直为1时重复执行减法的逻辑。循环脚本的核心逻辑参考 当系统处于锁定状态且尚未开始倒计时 if lockFlag 1 and countStart 0 then remainTime 20 countStart 1 endif 倒计时进行中 if countStart 1 and lockFlag 1 then if remainTime 0 then remainTime remainTime - 1 存到一个中间变量供画面显示 else timeUp 1 countStart 0 endif endif 系统复位时重置倒计时状态 if lockFlag 0 then countStart 0 timeUp 0 remainTime 20 endif这个倒计时脚本在联调阶段非常有存在感——第一次写循环脚本时我忘了在循环脚本里加延时控制导致倒计时在1秒内刷了十几秒整个画面像抽风一样。原因是MCGS的循环脚本默认是按系统扫描周期循环执行的不是按秒执行的必须自己维护时间计数或者用脚本里的延时函数控制频率。这个问题当时排查了半天最后在官方论坛翻了帖子才搞清楚。5. 联调过程与常见问题排查实录5.1 联调的正确顺序经验告诉我PLC和MCGS联调一定不能“一次性全上”要按顺序分层验证。我的推荐顺序是第一步PLC单独测试。把写好的梯形图下载到PLC接上抢答按钮和指示灯不接触摸屏直接用物理按钮测试四路抢答和复位逻辑。这一步把PLC程序的所有问题都排干净。第二步MCGS通信测试。只建一个最简单的画面放一个标签显示lockFlag的值确认触摸屏能正确读取PLC的M0状态。通信通了再继续往下做。第三步MCGS画面联动测试。把四个选手状态指示灯和复位按钮全部接到实时数据库用PLC侧的X0到X3强制置位的方式模拟按钮动作确认画面上的灯能跟着变。第四步全系统联调。把物理按钮、指示灯、蜂鸣器、触摸屏全部接上做完整的抢答、锁定、复位、倒计时全流程测试。这套流程看起来繁琐但每一步都能把问题的范围缩小一大截。我遇到过同行项目PLC程序和画面组态都写完了上电发现触摸屏上什么都没显示结果查了半天的通信参数设置最后发现是PLC程序里根本没写通信相关设置——这种低级问题只要提前做通信测试就不会发生。5.2 MCGS显示“PLC连接失败”的排查链路MCGS用的三菱FX驱动如果通信异常画面上会弹“PLC连接失败”的提示。这个问题出现概率最高排查链路也是有规律可循的。第一检查通讯线。最常见的是线序不对或者线缆断芯。用万用表量一下通信线的几个关键针脚导通性。第二检查串口号。进入设备管理器确认USB转串口设备识别到的是COM几然后到MCGS设备窗口里把串口号改成一致的。第三检查通信参数。波特率、数据位、校验位、停止位四项必须和PLC侧一致三菱FX默认是9600、8、偶校验、1停止位。有人改了PLC通信参数后会忘记同步到MCGS这个坑特别普遍。第四检查PLC侧站号。如果用的是FX3UPLC参数里的站号设置必须和MCGS设备地址一致默认都是0。第五也是最容易被忽略的——PLC的运行状态。MCGS读取PLC数据需要PLC处于RUN状态如果PLC处于STOP状态MCGS也会报连接失败或者读到缓冲区的旧数据。可以在GX Works2里确认PLC是RUN绿灯。我那次联调碰到过一个问题通信线接在触摸屏的COM1上MCGS设备窗口里也选的COM1但触摸屏始终提示连接不上。折腾了一个多小时最后发现是触摸屏的COM1和COM2端子定义搞反了说明书上标注的COM1实际上线接的是COM2口。换了一下插口立刻通了。这种事不亲身经历一次很难想到。5.3 抢答逻辑实测中的意外情况整个系统搭建完成后我和朋友做了几十轮模拟测试基本功能都通过了但有两个意外情况值得记录下来。第一个是按钮抖动导致的重复触发。有一次测试时有一个按钮按下去之后触摸屏上显示选手1抢答成功但蜂鸣器响了好几声像是连续触发了多次。用万用表一量发现那个按钮内部的触点已经老化按下瞬间通断了好几次。PLC输入端虽然有10ms的数字滤波但这个按钮的抖动时间超过了滤波窗口。解决方法是把这个按钮换成了新的同时在梯形图里给蜂鸣器输出加了一个只响一秒的定时逻辑——用M0触发一个定时器线圈蜂鸣器只响应一秒就自动断开这样即使有重复触发也不会一直响。这个“脉冲化输出”的做法在工业报警场景里非常实用。第二个是MCGS画面刷新延迟。联调时发现物理按钮按下去之后触摸屏上的指示灯要慢半拍才亮肉眼感觉有零点几秒的延迟。排查后发现是设备最小采集周期设置成了1秒也就是MCGS每隔一秒才去PLC那儿读一次数据。把采集周期改成100毫秒之后延迟就完全感觉不到了。这个参数在MCGS设备窗口里藏得比较深很多教程都没提但在实时性要求较高的场景里非常关键。5.4 我踩过的一些坑和最终优化整套系统做完后我给几个不同的使用场景做了一些小优化这里一并分享。第一蜂鸣器建议加装一个手动静音开关。竞赛现场如果比较严肃抢答响铃会显得突兀。我在蜂鸣器回路里串了一个纽子开关需要声音时可以随时切断不影响抢答显示功能。这个改动成本不到五块钱但客户回去反馈特别好用。第二触摸屏的亮度设置。LED灯具多的活动现场触摸屏如果亮度低远距离看画面上的状态指示灯会看不清。MCGS的画面上有个亮度调节功能也可以直接在触摸屏系统设置里调整我一般调到70%以上再投屏。第三接线端子的颜色区分。四路抢答器的按钮线、指示灯线如果全部用一种颜色日后检修时头会大。我用了红、黄、蓝、绿四种颜色分别对应1到4号选手按钮线和灯线颜色一一对应检修时看颜色就知道是哪一路非常省事。这个小习惯在复杂项目里价值更大强烈建议养成。第四在GX Works2里把程序注释写清楚。这个项目看起来简单但过两个月再看如果你没写注释这些M0、M10到底对应什么意思得重新对着图纸猜半天。我后来给每个网络都加了中文注释比如“1号抢答锁存”“裁判复位”后面的维护成本直接降一半。这套四路抢答器做完之后我手里多了些PLC位逻辑和MCGS组态联通的完整经验。其实把范围放大来看抢答器只是PLC控制系统里的一个非常典型的缩影——传感器输入判断、逻辑锁存互斥、输出驱动执行、上位画面联动这些组合在一起正是工业控制系统里最常见的那套骨架。学会这套逻辑往后遇到多工位防错、设备互锁、呼叫管理之类的小型控制需求思路都是相通的。