
1. 项目概述与核心需求解析1.1 为什么选择 S7-1200 PLC 做机械手做机械手控制很多年前我第一反应是用单片机或者板卡方案后来接触到小型控制系统集成度要求越来越高的项目才慢慢转向用 PLC 来做。这个项目用的核心控制器是西门子 S7-1200 系列 PLC具体型号是 1214C DC/DC/DC配了一个信号板扩展模拟量输入和一个 RS485 通信模块。为什么选这个组合我在项目立项之前其实对比了好几套方案最终敲定它有四个原因。第一是成本可控。整站设备只需要控制一个三轴机械手加上气动夹爪没有复杂的 CNC 插补需求用小型 PLC 就能覆盖全部 IO 点没必要上中型 PLC。单片机方案看着省成本但机械手涉及的运动控制逻辑、报警处理、原点回归、HMI 交互这些环节全部从零写底层的工时成本反而更高后期设备到了客户现场出了问题远程改程序也不方便。PLC 方案把底层封装好了我只需要站在功能块层面思考流程效率高得多。第二是模块化扩展能力。S7-1200 的机架可以插信号板自带以太网口还能加通信模块这套组合留了后手。万一客户后续要求机械手跟 MES 系统做数据对接或者增加视觉引导不需要换掉整套控制器加模块或直接用现有网口就能实现。很多设备厂家在报价时并没有预料到客户会追加需求选型时留够扩展余量是很值得的。第三是调试工具链成熟。S7-1200 配套 TIA Portal 编程软件也就是博途除了写逻辑代码还能在线监控变量、做仿真测试、强制输出。这种“看得见摸得着”的调试体验比对着板卡寄存器猜测状态要直观太多。尤其是运动控制功能调试博途里的 Trace 功能曲线能直接看到轴运行位置、速度、扭矩随时间的变化曲线这个对调加减速参数帮助非常大。第四是售后维护门槛。PLC 方案最终部署到客户现场客户的电气维护人员基本都学过 PLC 基础哪怕没有接触过 S7-1200只要培训半天就能上手看程序、查故障。很多小型非标设备厂最终选择 PLC 而不选单片机的核心原因就在这里——技术门槛直接决定售后成本。1.2 这套机械手到底要干什么机械手的机械结构不算复杂三轴采取龙门式布局X 轴负责水平左右移动Y 轴负责垂直上下升降Z 轴其实是旋转轴带动夹爪翻转。末端是一个气动夹爪靠电磁阀控制气缸开合抓取工件。整套设备的任务是从皮带线的固定取料位抓取工件搬运到加工工位按顺序摆放到位加工完成后再抓取到成品箱里。动作周期要求在 8 秒以内。这类工作在产线上很常见看起来简单但真正做起来有几个刁钻的地方。第一个是Y轴升降过程中要防止夹爪与工件碰撞取料后要抬升到安全高度才能横移这个安全高度需要根据实际工件高度动态调整。第二个是工件尺寸有轻微误差机械手抓取时不能硬性到位夹爪闭合后要做“夹持确认”确认传感器亮起才认为抓稳了没抓稳必须报警而不是继续运行。第三个是设备需要支持手动、自动、半自动三种模式手动模式用于调试和维修自动模式用于连续生产半自动模式用在一个动作周期内的单步操作——这看似是软件逻辑问题实际影响机械结构设计。我接到这个项目时机械结构部分已经由另一家机械设计公司完成我的工作重点是电气控制编写 PLC 程序、设计 HMI 界面、完成运动控制参数整定、跟机械工程师配合做联动调试。这类跨专业协作的项目程序架构一开始就要想着怎么好沟通不能埋头写代码否则联调阶段就是灾难。2. 硬件选型与 IO 资源配置的幕后逻辑2.1 硬件清单与现实考量S7-1200 的硬件选型当时有过一个小纠结。CPU 1241 的通信模块其实对机械手项目来说可有可无但客户的产线上游有一个扫码枪需要把扫描到的工件条码信息传到 PLC后续可能还要传给工厂的数据库。扫码枪输出的是 RS485 信号所以加了一块 CB1241 RS485 通信模块。事后证明这个决定省了很多事——直接用 PLC 的串口做数据接收不需要中间加协议转换器稳定性也更好。我也专门为这个项目配了数字量 IO 扩展模块 SM1223因为 1214C 自带的 DI/DO 点数勉强够用但考虑调试期间可能临时加传感器预留 8 个输入点比较稳妥。实际使用时这些备用点并没有全部用上但调试阶段有个很实际的好处手动模式下做单轴动作测试时可以直接临时接一个接近开关作为限位验证程序逻辑不用停机改动原有接线。运动控制方面S7-1200 通过高速脉冲输出控制伺服驱动器的脉冲/方向信号1214C 集成 4 路 PTO 输出本项目 X 轴用 1 路Y 轴用 1 路旋转轴走气动方式不参与脉冲控制所以资源完全够用。伺服驱动器用的是国产某品牌的中惯量 750W 电机X 轴通过同步带减速传动Y 轴通过丝杆传动。速度和加速度有关的数据全部按照机械设计给出的最大安全值做了冗余降额处理后面调试时少走弯路。2.2 IO 分配背后的安全设计思路IO 分配看起来是体力活但这里有很多细节会影响后续程序的可靠性。机械手项目的 IO 表包含数字量输入 24 点、数字量输出 16 点、模拟量输入 4 点。其中数字量输入中有几个很关键的信号X 轴原点、X 轴正极限、X 轴负极限、Y 轴原点、Y 轴正极限、Y 轴负极限、夹爪闭合到位检测、夹爪开到位检测、急停按钮、光幕信号。我把原点信号和极限信号单独提出来在程序里做硬件级互锁这是在设备启动时就确定好的安全底线。有一个在实际项目中经常被忽视的问题极限开关和原点开关不是同一个物理位置的开关。有些人图省事让原点信号兼做负极限信号结果机械手在自动运行回归原点时一旦越过原点开关位置直接撞上机械硬限位。更稳妥的做法是两个开关分开安装程序里也是分开处理。我在 IO 表注释里专门标注了这些开关的安装位置和电气常开常闭特性避免调试后期电工接线混淆。夹爪的开到位和关到位传感器用了两根线分别接入 PLC 的两个输入点而不是采用三线制传感器单点输出。原因是有时候夹爪动作不到位两个传感器都不亮这种状态必须当做故障处理如果只接一个传感器就判断不了这种中间态。很多老工程师习惯“够用就行”但机械手上传感器信号直接关系到人身安全和设备安全宁可多占 IO 点。急停回路我做了硬接线串联不经过 PLC 程序处理。急停按钮按下后直接切断伺服驱动器的使能信号和电磁阀电源PLC 即使没有来得及响应设备也会立即停下来。这个属于电气安全基础常识但如果程序里还在用软件去处理急停而 PLC 恰好死机或扫描周期异常设备没法停下。程序里仍然会检测急停信号用于报故障和复位状态但安全切断完全交给硬回路。2.3 电气柜布局与抗干扰细节电气控制柜的布局对机械手这种存在伺服驱动器的系统来说非常关键对 PLC 的可靠性影响很多时候比程序本身还大。我按“强电与弱电分区、动力线独立走线、信号线屏蔽接地”三条原则做布局。伺服驱动器放置在最底层PLC 安装在顶层左侧中间用隔板隔开所有动力线从柜体右侧的线槽走信号线从左侧线槽走尽量避免平行长距离布线。接入接近开关的信号线使用双绞屏蔽电缆屏蔽层单端接地接到柜内接地铜排。S7-1200 的电源输入前端串了一个滤波器因为伺服驱动器工作时会产生大量高频干扰如果 PLC 跟伺服共用电源容易出现不明原因的偶发性故障。伺服驱动器的主回路电源我选择从总空开直接引一路PLC 的开关电源再从总空开另一路引出两路电源完全独立。这个做法在调试时确实体现出了价值——伺服动态响应时PLC 侧电压纹波稳定没有出现过程序跑飞或者 IO 误动作。3. S7-1200 运动控制程序架构与核心算法3.1 程序结构不只是 OB1 里写逻辑S7-1200 的程序框架如果只是把整个逻辑写在组织块 OB1 里前期看着简单一旦功能扩展或者要修改某个子流程就会陷入泥潭。我习惯按功能划分功能块FB和函数FC本项目创建了这几个关键块FB1 轴控制块封装 X/Y 轴的点动、回原点、绝对定位、相对定位、速度切换、暂停、停止、状态反馈输入输出参数直接用引脚引出方便在 HMI 上绑定变量。FB2 夹爪控制块处理夹爪开/闭动作、限位传感器判定、夹持确认、报警输出。FB3 流程控制块整个机械手搬运动作的时序状态机内部有个状态枚举变量状态流转由状态机的当前状态和触发条件共同决定。FC1 报警处理函数把轴状态字、传感器状态、流程状态综合判断产出报警码。FB10 HMI 通信处理跟触摸屏交换数据包括模式切换、手动操作指令、配方参数。TIA Portal 里每个 FB 都有自己的背景数据块Instance DB背景数据块里存放该功能块的静态变量和输入输出参数这样即使我在 OB1 之外另建一个调用点使用同款 FB也不会相互干扰。对 PLC 编程不熟的人可能觉得功能块封装是多此一举但真正到了现场调试你会发现自己写的程序没有好结构找 bug 的时间成本是写程序的几十倍。3.2 状态机设计——机械手流程的灵魂机械手搬运流程必须靠状态机来维护不能靠散乱的置位复位指令堆叠。状态机设计在这套程序中是灵魂所在整个搬运过程按逻辑切分成了十一个状态节点。启动后先进入“等待启动”状态按下启动按钮后进入“回原点”状态X/Y 轴执行回原点动作直到两个原点信号都到位回原点完成后进入“等待取料”状态此时机械手停留在取料位正上方安全高度当取料位检测到有工件且光幕安全信号正常进入“取料下降”状态Y 轴以低速下降到达取料位信号点后停止下降进入“夹爪闭合”状态延时等待夹爪气缸到位检查夹持确认传感器如果确认夹到工件进入下一步如果没夹到则进入“夹持失败报警”状态夹持成功后进入“取料上升”状态Y 轴上升到安全高度再进入“X 轴移动”状态到达放料位上方坐标接着“放料下降”→“夹爪打开”→“放料上升”→“X 轴回取料位”逐步完成一个完整循环。每个状态之间都有明确的进入条件和退出条件状态变量实时传给 HMI。设备停在哪个节点、因为什么原因停的触摸屏一眼就能看到这对售后调试和客户操作来说非常友好。状态机里特别要注意“暂停”和“急停复位”的处理方式。按下暂停后当前执行的运动指令必须暂停轴保持当前位置不变流程停在当前状态但不复位状态机。解除暂停后可以继续。急停按下后就不一样了不仅轴停止整个状态机要回到“等待启动”状态所有输出复位气缸失电机械手保持原位重新启动时先回原点再进入自动循环。3.3 运动控制指令与参数计算逻辑本项目用 S7-1200 的 Motion Control 指令库完成轴运动控制功能。MC_Power 指令用于使能轴MC_Home 用于回原点MC_MoveAbsolute 和 MC_MoveRelative 用于定位控制MC_Halt 和 MC_Stop 用于停止与暂停。轴参数的组态在 TIA Portal 的运动控制对象中完成包括单位换算、最大速度、最大加速度、加减速时间等。参数计算牵涉到机械传动关系这是很多初学者最容易出错的地方。X 轴用同步带传动伺服电机旋转一圈同步带移动 100mm伺服驱动器电子齿轮比设置为电机编码器每 2500 脉冲对应丝杆转动一圈也就是说 X 轴移动 1mm 对应的脉冲数为 2500/100 25 脉冲/mm。Y 轴用丝杆导程 10mm 的滚珠丝杆伺服电机直连丝杆2500 脉冲对应 10mm 位移所以 Y 轴 1mm 对应 250 脉冲/mm。这些换算是必须算明白的一旦组态错了一位数字机械手定位精度直接差十倍连试运行都跑不了。最大速度和加减速时间的设置需要考虑机械结构的承载能力。机械设计方给出的允许最大速度为 X 轴 500mm/s、Y 轴 200mm/s加速度均为 0.5g。我实际设置时留了 20% 的余量最大运行速度取 80%即 X 轴 400mm/s、Y 轴 160mm/s加速度时间保守设置到 1 秒。这样既保证生产效率满足节拍要求又给机械结构留了寿命余量。加减速时间太短会引发电机构件震动同步带跳齿丝杆磨损加速太长则影响节拍。这个余量有个度不是越大越好关键得看现场振动测试。伺服驱动器侧的电子齿轮比也得配合 PLC 组态设置。例如 X 轴伺服驱动器内部参数设置为每 2500 个高速脉冲驱动电机转一圈PLC 的轴组态就按“位置单位”为 mm 来做内部换算PLC 发 25 个脉冲对应 1mm这些参数需要两边一致。整个运动控制调试初期我花了不少时间核对这类换算关系因为驱动器和 PLC 两边的软件看位置显示单位不一样不把单位统一起来很容易出现“程序看起来对、实际跑出来位置全乱”的情况。3.4 手自动模式切换与互锁逻辑机械手项目里手动模式和自动模式之间的互锁是程序安全的重中之重。手动模式下HMI 上的手动操作按钮可以直接控制 X 轴正/负、Y 轴升/降、夹爪开/闭是维修和调试人员用来点动对位的自动模式下如果还可以通过 HMI 手动点动很容易因为正在自动运行却误触碰按钮导致事故。所以我在程序里做了两个层面的互锁第一个层面是模式互锁。手动模式下禁止启动自动流程自动模式下手动点动按钮全部失效两个模式的执行标志互相排斥。模式切换由 HMI 上的三位选择开关决定程序里用置位复位逻辑保证同一时刻只有一个模式使能。第二个层面是传感器互锁。在自动流程中移动 X 轴前会检查 Y 轴是否处于安全高度即 Y 轴当前位置高于某个设定值确保不在低位时横向移动。在 Y 轴下降前会检查目标位置没有障碍物信号。这个互锁思路来源于“轴间干涉保护”虽然是程序逻辑但在机械手整体安全中与硬件限位同等重要。我还额外加了一个逻辑手动模式下操作 X 轴正方向和负方向时都用到位限位作为禁止条件——即使操作员一直按住按钮撞到限位后点动立即停止。手动模式下限制同样存在很多人调试时容易忽略这一点。4. HMI 交互设计与调试全流程实录4.1 触摸屏界面整体规划人机界面的设计直接影响设备操作员的接受度程序功能写得再好操作界面反人类还是会被投诉。本项目触摸屏选用 7 寸国产触摸屏支持与 S7-1200 通过以太网通信。界面分为四大主页面主监控页面、手动操作页面、参数设定页面、报警记录页面。主监控页面主要显示机械手当前所处状态等待启动、回原点、取料、搬运、放料等、当前坐标位置、模式指示、当前报警信息。页面中央画了一个简易机械手示意不同颜色表示不同状态节点绿色代表运行中红色代表报警中灰色代表空闲操作员不用读代码也能直观看出设备正在干什么。手动操作页面除了点动按钮还实时显示 X/Y 轴当前位置和限位传感器状态。夹爪开/闭按钮旁边有到位指示灯这对维修时排查卡料很有用。参数设定页面是配方数据包含取料位坐标、放料位坐标、取放料安全高度、搬运转角速度等权限分两级操作员只能微调速度设定工程师登录才能修改坐标配方。报警记录页面存储最近 100 条报警事件带时间戳和操作员评论栏。4.2 手动调试阶段的方法与心得调试顺序是单轴 → 双轴联动 → 完整自动流程单轴调试是整个项目的基础不能跳过也不能急躁。第一步是伺服驱动器参数自整定。把伺服驱动器的速度环和位置环参数按负载惯量比做自整定机械手结构刚性较差惯量比通常在 3 到 5 倍之间自整定后要实际跑一个梯形波速度指令验证跟随误差误差太大致使报警就说明参数需要手动调整。这个阶段不用急着接 PLC 程序先用驱动器的面板点动功能确认电机转向正确、极限开关方向正确就行。第二步是 PLC 与伺服的脉冲接线验证。先不组态运动控制轴对象直接通过 PLC 输出一个脉冲串信号看伺服电机是否按预计方向旋转。由于接线错误导致电机反转的情况很常见如果电机转向与预期不符就检查脉冲方向和方向信号是否反了。这一步确认好后面组态轴对象时就省力很多。第三步是在 TIA Portal 中组态轴对象做 MC_Home 回原点动作测试。回原点的速度和方向都要单独设置一般找原点时可以速度快一点但建议靠近原点后降速爬行用接近开关的下降沿捕获精准原点。这里有一个很关键的调试细节接近开关的电气特性和机械安装位置决定原点重复精度如果每次原点位置偏差超过 0.2mm就要检查是不是接近开关安装松动或者机械传动间隙太大。机械间隙问题在自动化行业永远是绕不开的痛点靠程序补偿只能解决部分问题最终还是得靠机械精度。4.3 联动调试中的关键调参过程联动调试是最让人头疼的阶段因为问题往往不是单轴的问题而是多轴配合、时序衔接、传感器响应共同作用出现的问题。X 轴和 Y 轴联动时由于两个轴的负载差异和传动方式不同它们的实际响应速度不一样需要分别设置不同的加减速时间。Y 轴因为垂直方向受重力影响电机扭矩负载更大如果加速时间设太短会引发伺服过载报警甚至机械手抖动。实测下来 Y 轴加速时间设到 800ms、X 轴设到 500ms 比较合适。这些值都是现场“摸”出来的不是计算出来的所以我一直强调调试阶段一定要耐心做速度阶梯测试从低速开始逐步提高记录不同参数下的实际表现。夹爪和升降轴的时序配合也是关键点。取料时Y 轴下降到目标位置后不能马上夹爪闭合要给机械结构一个稳定的时间程序里加了 200ms 延时再执行夹爪动作。但这个延时也不能太长否则影响节拍。类似这样的“工艺延时”在流程里共有七处每处我都单独做好注释方便后续优化。还有一个不能忘的检测光幕信号。设备运行中如果有人伸手进入机械手工作区域光幕输出信号断开程序必须立即停轴这个信号的响应优先级仅次于急停。调试时我用一个模拟开关来测试光幕断开时机验证无论设备处于任何一个状态节点光幕信号都能让轴停止且状态机不丢失当前状态。很多人测试时会忽略“停机后能恢复”这个要求结果光幕触发后需要整套流程重新初始化这在生产线上是很糟糕的体验。注意光幕和急停都属于安全相关信号不建议依赖 PLC 程序做唯一的响应层。机械手设备如果规格较高是需要考虑安全继电器硬回路方案的。本项目由于速度较慢、负载小程序响应加硬线切断的组合能够满足安全评估要求但如果你做的是重型高速机械手请务必引入独立的安全控制回路这不是用 PLC 软件能替代的。4.4 全自动节拍测试与优化自动流程跑通后最核心的目标是满足节拍 8 秒。第一次连续运行测试的平均周期是 11.5 秒距离目标差了 3.5 秒多。我用博途的 Trace 功能记录了完整循环中各个轴的运行时间占比发现三个瓶颈第一个瓶颈是 X 轴的横向移动时间太长。原始参数里 X 轴行程约 800mm速度 400mm/s单程要 2 秒往返 4 秒。我把 X 轴最大速度上调到 480mm/s加速时间从 500ms 优化到 350ms单程缩短到 1.7 秒左右。这个调整基于机械设计方确认的允许最大速度 500mm/s 的 96%余量还是有的但已经接近极限不敢再提。第二个瓶颈是 Y 轴升降速度。受限于垂直电机的扭矩最高速度只能到 180mm/s但通过优化加速和减速曲线的形状在保证定位精度的前提下缩短了低速爬行距离。伺服驱动器的电子齿轮比没动靠调整 PLC 的轴加减速参数实现的。第三个瓶颈是夹爪动作的 200ms 延时太多。后来把延时细分夹爪闭合动作保持驱动后在 Y 轴开始上升的同时就进入夹持检测判定逻辑传感器一旦确认夹持成功就立即继续上升不需要等 200ms 固定时间。这样夹爪动作从流程关键路径上拿掉了大部分延时整体节拍顺利压到了 7.6 秒还留了 0.4 秒余量。5. 常见问题排查与实战避坑清单5.1 跑飞、乱停、报警高频故障复盘机械手调试和运行阶段接触过不少问题有些问题当时找原因费了很大劲后来总结下来基本都是几个常见类别。第一类是运动控制报“实际位置与设定位置偏差过大”。排查发现是同步带张紧力不足电机启动加速时同步带打滑编码器反馈位置跟 PLC 发出的目标位置不匹配。这种现象不是每次都会发生只在机械手满载运行或者加速时偶尔出现很隐蔽。处理方法有两个层次短期把加速度降下来一些长期要机械工程师重新张紧同步带。从这个案例里我学到一条经验——伺服轴的报警信息不要只看代码含义要结合机械传动机构的物理特性去推测原因。第二类是夹爪误报警明明夹到了工件但传感器没有反馈。排查后发现是传感器的安装位置偏向夹爪指尖前缘当工件较小或者形状略有差异时夹爪虽然有夹持力但传感器感应面正好处于间隙中感应不到。解决办法是更换为行程更短的传感器安装支架让传感器触发点和夹爪实际夹持点重合。这种问题靠程序没法解决只能修改机械结构。第三类是偶发性的“X 轴到限位失效”操作员描述说按下手动按钮设备没反应到现场测试一切正常间隔很久才复现一次。最终用博途的在线趋势图监控发现是接近开关的信号在手动按钮按下的瞬间产生了抖动——具体原因是开关电源的滤波电容老化导致电磁阀动作瞬间产生电压跌落接近开关在这种欠压状态下误动作。更换开关电源后问题彻底消失。这种“幽灵故障”在自动化项目里占比不小排查思路必须从电气和机械两块同时下手单靠看程序常常捕风捉影。5.2 程序版本管理与交接文档那些事机械手程序开发过程中少不了现场调整我严格保持 TIA Portal 项目文件的版本管理习惯。每天调试结束时导出一份存档文件名包含日期和后缀编号例如MechanicalArm_V20240528_01.ap18。一个星期集中归档一次把当天修改的内容记录在备注文件里。这样做看起来多花了几分钟但出了严重问题可以随时回滚到前一个稳定版本不用重新排查。项目交付时的资料交接同样重要。全套图纸、IO 表、PLC 程序备份、HMI 程序备份、伺服驱动器参数文件、操作手册、维护手册、备件清单一样不能少。IO 表是我特别要强调的——很多项目交接后就没人能看明白设备接线了。我在 IO 表的每一行都填写了信号名称、硬件地址、线缆颜色、端子号、信号类型和注释这样哪怕换一个完全没参与项目的人去现场排查也能很快理清线路关系。S7-1200 的 PLC 程序我还会在交付前做一次加密备份防止客户拿到程序后因误修改导致设备故障却回不到原始状态。这类细节对设备来说成本很低但对于维护效率提升明显。5.3 机械手程序扩展方向项目主体交付后还有两个值得考虑扩展的方向。第一个方向是加装视觉系统。S7-1200 本身不能直接处理视觉算法但可以通过以太网与工业相机通信接收视觉系统发送的偏移量数据修正取料坐标。这么做的好处是机械手能适应工件位置小范围偏移的情况大大放宽上游皮带线的定位精度要求。第二个方向是接入数据采集系统。通过 S7-1200 自带的以太网口做 OPC UA 通信如果固件版本支持可以把设备状态、节拍统计、报警记录、产量数据实时上报到产线管理系统这是很多智能工厂项目的基本盘。如果后续要扩展这两个方向选型时“多留了一个 RS485 口和模拟量输入”的决策就派上用场了不需要更换 PLC 主体只需要追加视觉模块或者物联网网关即可。这也是我反复跟选型阶段的自己确认过的理由——上限大改造成本低对客户来说是最划算的方案。