
别看西门子 S7-200 已经停产多年真在车间里接到三轴机械手的控制任务时我脑子里第一个冒出来的方案还是它加 MCGS 触摸屏这套组合。2024年还在讨论 S7-200听起来确实有点“复古”但这款小 PLC 皮实耐用、编程上手快、存量资料多尤其适合预算有限、工况又不算复杂的小型搬运和上下料场景。这篇文章从我做过的实际项目出发把硬件选型、IO 分配、PLC 程序设计、MCGS 组态和通讯联调的完整过程拆开讲给正在做同类项目的朋友一个可以直接抄作业的参考。1. 为什么选这套组合S7-200与MCGS的真实定位1.1 三轴机械手项目到底需要控制器干什么三轴机械手说白了就是 XYZ 三个直线轴的组合常见的应用是工件搬运、上下料、码垛和简单的装配辅助。这种设备对控制器的要求其实很明确能输出稳定的脉冲信号驱动步进或伺服电机能接收限位开关、原点开关和光电传感器的信号能按预定顺序执行动作还要能和人机界面通信让操作工看得见状态、按得下按钮。很多人一上来就想着用高端 PLC 或者运动控制卡但对于这种点位运动为主、没有复杂插补轨迹的三轴设备属于典型的“杀鸡用了牛刀”。S7-200 的高速脉冲输出和位逻辑指令完全够用PLC 扫描周期在毫秒级配合步进电机做点位运动绰绰有余。1.2 S7-200停产不等于过时老工程师听到 S7-200 会有种天然的信任感。这台 PLC 从 90 年代开始服役在小型自动化设备里的保有量极大。虽然西门子已经用 S7-200 SMART 接替了它的位置但大量存量设备还在运行二手市场和备件渠道也很成熟。CPU 226 有两个 RS-485 口、24 路输入和 16 路输出两个高速脉冲输出点完全能带起三轴机械手。它的编程软件 STEP7-Micro/WIN 界面朴素、指令简单哪怕只懂继电器电路的人也能很快上手。最关键的一点是S7-200 的 PPI 协议对 MCGS 来说几乎是“原生支持”通讯配置省心很多。1.3 MCGS为什么配得上这台机械手MCGS 昆仑通态在国产组态软件里算是占有率最高的一档它的嵌入版组态软件配合 TPC 系列触摸屏是很多中小设备厂的标准配置。价格比西门子原装触摸屏便宜一大截功能上却不缩水支持脚本、配方、报警、多画面和曲线显示。我个人最喜欢 MCGS 的一点是它的设备驱动做得非常细对西门子 S7-200 的 PPI 通讯、Modbus RTU 都支持得很好。换句话说你不需要在 PLC 里写任何额外的通讯程序MCGS 触摸屏直接读 PLC 的 V 区、M 区地址组态画面绑定变量就行。这对工期紧的项目来说省下的时间相当可观。2. 硬件选型与IO分配先把底子打牢2.1 三轴机械手的机械结构与驱动部件我做的这台设备是典型的龙门式三轴结构X 轴负责左右横移行程 600mmY 轴负责前后移动行程 400mmZ 轴负责上下升降行程 200mm。三个轴都用步进电机带动同步带或丝杆模组Z 轴末端装了一个气动手指用来夹取小型工件。步进电机的选型参考负载重量和速度要求一般 57 步进电机配 8N·m 左右的保持转矩就够大多数轻负载场景。驱动器用雷赛或研控的细分驱动器细分设置为 8也就是电机转一圈需要 1600 个脉冲。X 轴的丝杆导程如果是 5mm那移动 1mm 需要的脉冲数就是 1600 除以 5等于 320 个脉冲每毫米。原点检测用常开型接近开关正负限位用机械式行程开关工件检测用对射光电传感器。这些信号全部接入 PLC 的输入点走 24V 直流回路。2.2 PLC与控制柜核心器件清单主控制器我选了 S7-200 CPU 226 AC/DC/RLY这个型号自带 24 路数字量输入和 16 路数字量输出继电器输出型。虽然继电器输出响应速度比晶体管慢但驱动中间继电器和接触器很方便而且三轴机械手不需要太快的输出频率——高速脉冲输出不经过继电器是 CPU 直接驱动的所以选继电器型不影响脉冲输出。控制柜里的器件明细如下表所示器件型号/规格数量说明PLCS7-200 CPU 2261主控制器触摸屏MCGS TPC7062K1人机界面步进驱动器雷赛 DM542 或同类3X/Y/Z 三轴开关电源明纬 24V/5A1传感器和 PLC 输入回路中间继电器24V 线圈14脚若干隔离输出信号断路器三相单相2电源保护急停按钮常闭型1安全回路2.3 IO点分配与接线细节IO 分配是整个项目的关键一步分配得好编程和查线都会顺畅很多。输入点从 I0.0 开始分配输出点从 Q0.0 开始。我一般采用下表的方式地址信号名称传感器类型说明I0.0X 轴原点接近开关 PNP 常开回原点到位信号I0.1X 轴正限位行程开关常闭超程保护I0.2X 轴负限位行程开关常闭超程保护I0.3Y 轴原点接近开关 PNP 常开回原点到位信号I0.4Y 轴正限位行程开关常闭超程保护I0.5Y 轴负限位行程开关常闭超程保护I0.6Z 轴原点接近开关 PNP 常开回原点到位信号I0.7Z 轴正限位行程开关常闭超程保护I1.0Z 轴负限位行程开关常闭超程保护I1.1启动按钮按钮常开自动循环启动I1.2停止按钮按钮常开自动循环停止I1.3急停信号常闭触点急停回路反馈I1.4工件检测光电开关 PNP检测工件到位输出点分配上Q0.0 接 X 轴步进驱动器的脉冲端Q0.1 接 Y 轴步进驱动器的脉冲端。Z 轴因为在垂直方向运动需要随时保持位置我用了 Q0.2 作为脉冲输出配合 Q1.0、Q1.1、Q1.2 分别作为 XYZ 三轴的方向信号。每个轴还分配了一个使能信号和抱闸信号Z 轴断电时靠制动器锁住防止下滑。接线时要注意几个细节传感器的 PNP 和 NPN 绝对不能混用S7-200 输入回路是漏型接法PNP 传感器需要接法正确才能被识别脉冲线要用双绞屏蔽线屏蔽层在驱动器端单端接地所有 DC 24V 线圈负载都要并续流二极管防止断电时反向电动势击穿 PLC 输出点。3. PLC程序设计用状态机把逻辑理清楚3.1 程序整体架构与三种操作模式写 PLC 程序就像写一篇文章先搭框架再填内容。我习惯把程序分成五个子程序块初始化程序、手动控制程序、自动运行程序、回原点程序、报警处理程序。主程序用 SM0.1 调用一次初始化然后根据模式标志位决定调用哪个子程序。模式切换的核心思想是“互锁”手动模式下自动程序不使能自动模式下手动按钮不响应。这样才能避免操作工误操作导致机械碰撞。模式标志位我用 M 区的三个位来存放M10.0 手动、M10.1 自动、M10.2 回原点切换时用复位指令清掉其他模式标志。3.2 步进电机运动控制高速脉冲的关键细节S7-200 的两个高速脉冲输出点是 Q0.0 和 Q0.1它们由专门的脉冲输出指令控制。对于三轴设备X 轴和 Y 轴分别占用这两个点Z 轴则用 Q0.2 通过普通输出指令模拟脉冲代价是频率会受扫描周期限制但 Z 轴行程短、速度要求不高实际运行中完全够用。用 STEP7-Micro/WIN 的位置控制向导可以生成运动包络相当于把加速、恒速、减速的过程预先算好运行的时候调用 PLS 指令就能按包络发脉冲。这个功能对新手特别友好不用自己写加减速算法。我实际使用中发现位置控制向导生成的子程序会在 V 区占用一片存储空间规划 V 区地址时要给运动包络留够范围。调试时如果脉冲发出去了但电机不动先查方向信号有没有接反再查驱动器拨码有没有选对脉冲方式——步进驱动器一般要设成脉冲方向的模式。3.3 自动循环的状态机实现自动循环是机械手的核心逻辑。我用 VW 区的一个字作为状态寄存器从 0 到 10 定义一个状态的编号。每次扫描先读当前状态号然后进入对应的状态处理逻辑满足条件就把状态号加 1。设备回原点后自动程序依次执行以下流程等待工件检测信号有工件才允许下一动作Z 轴下降到抓取位延时 300ms气爪夹紧延时 500msZ 轴上升到位X 轴快速横移到放料位Z 轴下降到放置位气爪松开Z 轴上升X 轴返回取料位循环次数加 1回到等待状态这个流程的好处是单步调试容易按下启动后每个状态都可以停下来观察机械位置。联调时把状态寄存器的当前值显示在触摸屏上设备走到哪儿一目了然。安全联锁是自动程序里绝对不能省的部分任何一个轴触发限位立即停止对应轴的脉冲输出并置位报警标志急停信号断开时所有输出全部复位自动状态需要重新回原点才能继续运行手动模式下运动轴不能越过原点开关防止碰撞夹具。4. MCGS组态画面让人机交互真正好用4.1 画面布局与操作逻辑触摸屏组态做得好不好直接影响操作工的体验。我把 MCGS 画面分成四个主要页面主监控画面、手动操作画面、参数设置画面、报警记录画面。主监控画面放一张设备俯视示意图配合指示灯显示原点、限位、运行状态和当前工序。手动操作画面是操作工最常用的每个轴放两个点动按钮正转、反转一个回原点按钮一个气爪开闭按钮。参数设置画面需要权限保护普通操作工只能看工艺员和管理员才能改。4.2 变量字典与PLC地址映射MCGS 的实时数据库是整个组态的枢纽。我在做地址映射时遵循一个原则PLC 里的位地址一律用 M 区或 Q 区数值地址一律用 V 区。比如启停状态放在 M20.0自动模式标志放在 M20.1速度设定值放在 VW200当前位置值放在 VD300。映射关系可以整理成一张表方便调试时核对。MCGS 里建立变量时需要注意数据类型的选择16 位无符号整数和 32 位浮点数对应不同的 PLC 存储格式选错会导致显示的数值完全不对。比如 VD300 是 32 位数据MCGS 里就要选 32 位数值型不能只选 16 位。4.3 脚本实现进阶交互功能MCGS 的脚本功能是它比普通 HMI 灵活的地方。我在启动按钮上写了一段脚本当按钮按下时把 M20.0 置位延时 200ms 再复位这样相当于用按钮产生一个脉冲信号PLC 检测到上升沿就启动自动循环。另一个有用的是产量计数显示。PLC 每完成一次搬运把 VW400 加 1。MCGS 直接绑定这个地址显示数字再做一个清零按钮按下后把 VW400 写 0。这种交互逻辑在 MCGS 里很好实现而且 PLC 里的程序一步都不用改。报警方面MCGS 支持报警窗口绑定 PLC 的报警位。我把限位报警、急停报警、原点丢失报警都映射到 M 区的不同位一旦 PLC 置位触摸屏会弹出报警窗口并记录时间方便维护人员追溯。5. 通讯联调把PLC和触摸屏拉进同一张网5.1 PPI通讯参数配置S7-200 和 MCGS 触摸屏之间走的是 PPI 协议。硬件连接其实很简单触摸屏的 COM 口通过 RS-485 线接到 PLC 的 Port0只需要两根线AD和 BD-。PLC 端的参数在系统块里设置Port0 的协议选 PPI地址默认 2波特率设为 9600数据位 8停止位 1偶校验。MCGS 那边在设备窗口添加“西门子 S7-200 PPI”驱动通讯参数必须和 PLC 端严格一致。这里有个小细节MCGS 的“设备地址”对应 PLC 的站号写 2 就行如果写错会出现通讯超时。5.2 联调的正确顺序我踩过最大的坑就是在通讯没联调之前就开始写画面。正确流程应该是先把 PLC 程序单独跑起来用电脑的编程软件在线监控确认每一个输入输出都能正常工作然后把 MCGS 工程下载到触摸屏用设备调试窗口测试通讯状态最后才把画面变量和 PLC 地址绑定进行全系统联调。MCGS 有一个很实用的功能叫“设备调试”可以看到当前通讯是否正常、收发帧的字节数。联调时我习惯同时开着 PLC 编程软件的监控状态和 MCGS 的调试窗口一边看 PLC 内部数据一边看触摸屏显示值对不上号的地方马上就能定位。5.3 通讯故障排查实战如果通讯连不上不要慌按照下面的顺序排查绝大多数问题都能解决故障现象可能原因排查方法MCGS 提示连接失败COM 口参数不对核对波特率、校验位、站号通讯时通时断线路接触不良或干扰检查接线端子确认屏蔽层接地能通讯但数据全为零地址映射错误用设备调试看原始数据检查变量类型PLC 运行模式异常编程电缆占用串口拔掉编程电缆再重新启动触摸屏还有一个容易忽略的点S7-200 的 Port0 一旦被编程软件组态为自由口模式来跑 Modbus 协议MCGS 的 PPI 通讯就失效了。我做过的项目里遇到过两次都是客户之前用电脑调试过 Modbus重新下载程序时把 Port0 设置改回了自由口。解决办法很简单系统块里把 Port0 重新设为 PPI重新下载问题就消失了。6. 现场调试踩坑记录与工艺细节6.1 脉冲频率、加减速与机械共振三轴机械手调试时最折磨人的是电机丢步。明明脉冲数是对的走久了位置就偏了。我排查后发现问题出在加减速时间太短。S7-200 的位置控制向导里可以设置加速时间和减速时间这个参数直接影响步进电机的启动特性。步进电机低频共振点一般在 200 到 400Hz 之间如果恒速频率正好落在这个区间电机会剧烈振动甚至丢步。我后来把 X 轴的恒速频率设在 8000Hz 左右对应电机转速 300 转每分钟加减速时间各设 0.5 秒。这样既保证了效率又避开了共振区间。320 个脉冲每毫米的精度意味着 X 轴最快移动速度大约是 25mm/s对于这种小型搬运设备是完全合理的。6.2 上电时序与系统保护现场经常出现一种情况设备通电后触摸屏显示正常但按任何按钮都没反应。折腾半天发现是上电顺序的问题——先给触摸屏送了电再给 PLC 送电两者启动时间不一致PPI 通讯没有建立成功。规范的做法是控制柜里用一个总断路器控制所有电源PLC 和触摸屏同时上电。如果分离供电不可避免把 PLC 的供电放在前面触摸屏晚一点上电也没问题。断电后重新上电设备必须重新回原点这个逻辑一定要写进程序里否则机械手会按残留的位置数据运行容易撞机。6.3 程序备份与版本管理老工程师都有个习惯项目改到第三个版本之后一定要把 V2.0、V3.0 的源程序分别存档文件名带上修改日期。S7-200 的程序导出成 .mwp 文件占空间很小我会在项目文件夹里同时放一份 IO 分配表、一份 PLC 程序备份和一份 MCGS 工程备份缺一不可。MCGS 工程如果做过多次修改我还会把触摸屏里的运行工程用 U 盘拷出来备份一份万一 HMI 硬件故障换一台新触摸屏能直接恢复出同样的画面。给客户交付时我会专门做一个简单的《操作说明书》目录里面写上开机顺序、关机顺序、手动操作流程、自动操作流程、常见报警的处理方法、工程师模式下可以修改的参数。这套文档前期写起来繁琐但到售后阶段能省掉大量电话沟通时间。做这种传统 PLC 加组态的项目大多数时候并不需要多高深的技术关键是把基础工作做扎实——选型不盲目追新接线不留隐患程序逻辑理得清联调时一步一步来。S7-200 配上 MCGS 这对老搭档在三轴机械手这种典型场景下依然能稳定可靠地跑上很多年。我在实际调试中最大的体会是再好的工具也比不上调试前把需求和动作流程捋清楚。设备能不能稳定生产往往在你写第一段程序之前就已经注定了。