1. 从零开始认识SPEL程序的基本骨架如果你刚接触EPSON机器人看到控制器里那些以.PRG结尾的文件可能会有点懵。别担心这其实就是SPEL语言的程序文件。我刚开始搞EPSON机器人那会儿也觉得这玩意儿挺神秘的但上手后发现它的结构其实很清晰就像盖房子得先打地基一样。一个完整的SPEL项目Project就像你电脑上的一个工程文件夹。这个文件夹里至少得有一个程序文件和一个main函数。你可以把main函数理解成整个机器人任务的“总开关”控制器一运行首先找的就是它。程序文件就是.PRG文件里面装着你的所有代码逻辑。函数是组织代码的核心单元。在SPEL里你用Function关键字开头用Fend结尾这就划出了一个函数的“地盘”。给函数起名有点小讲究最多能用32个字符只能是英文、数字和下划线而且不能以数字或下划线打头也不能用SPEL语言自己的关键字比如Go、Move这些指令名。对了它不区分大小写MyFunction和myfunction在它看来是一回事但为了代码好看我建议你保持一个统一的风格。我踩过的一个小坑就是变量作用域。SPEL里有三种变量搞混了程序就容易出乱子Local局部变量只在声明它的那个函数内部有效。函数一执行完它就“消失”了。适合存放临时计算结果。Module模块变量在整个.PRG程序文件里都有效。不同函数之间想共享数据用它就挺方便。Global全局变量在整个项目Project里都有效是所有程序文件都能访问的“公共黑板”。比如你可以用一个全局布尔变量来标记某个安全门的状态。定义变量时必须先声明类型再写变量名格式是数据类型 变量名。比如Integer iCount就是定义了一个叫iCount的整数变量。这里有个铁律你赋值给它的数据类型必须匹配。你不能把一个字符串塞给一个整数变量控制器会报错的。为了让你们更清楚我把常用的数据类型整理了一下数据类型说明示例Integer整数Integer nSteps 100Double双精度浮点数Double dPosition 123.456String字符串String sName “Gripper1”Boolean布尔值True/FalseBoolean bReady TruePosition位置数据核心Position pHome这里要特别提一下Position类型这是机器人编程里最最重要的数据类型之一。它用来存储一个空间点的坐标比如X, Y, Z, U, W, R等根据机器人轴数不同。我们后面要讲的所有动作指令几乎都是围绕着操作Position变量进行的。2. 让机器人动起来PTP动作指令详解理论说了不少咱们来点实在的让机器人胳膊腿儿先动起来。SPEL里让机器人运动的指令叫动作指令其中最基本、最常用的就是PTPPoint-to-Point点到点指令。你可以把PTP动作想象成你告诉机器人“去拿桌上那个杯子”它不在乎手是怎么伸过去的是绕个弯还是直接掏它只关心最终手要精准地停在杯子把儿的位置。PTP就是这种“结果导向”的运动方式控制器会计算每个关节电机的最短路径让工具末端通常是夹爪或焊枪的头快速到达目标点。优点很明显速度快因为走的是关节空间的最短路径效率高。缺点也很明显路径不可预测在复杂工位里可能会撞到东西。所以PTP通常用于空间开阔、对运动轨迹没要求、只追求起点和终点精准的场景比如从A点快速移动到B点待命。控制PTP动作的速度和加减速用的是Speed和Accel指令它们是以百分比来设定的。下面我们看看几个核心的PTP指令。2.1 Go指令最直接的“走过去”Go指令是最基础的PTP移动命令让所有轴同时启动、同时停止以插补方式运动到目标点。Function main ‘ 假设我们已经定义并示教了一个叫 pPick 的位置变量 Go pPick ‘ 机械手移动到拾取点 FendGo指令非常灵活目标点可以直接是一个Position变量如pPick也可以用XY()这样的函数即时构造一个位置甚至可以在已知点的基础上做偏移Go XY(300, 200, 50, 0) ‘ 移动到绝对坐标 (X300, Y200, Z50, U0) Go pPick X(50) ‘ 移动到 pPick 点在X方向偏移50mm的位置 Go pPick : X(100) ‘ 移动到X坐标值为100其他轴与pPick点保持一致的位置注意X(50)是相对偏移而:X(100)是绝对坐标设定。这个区别一定要搞清楚我早期就曾因为用错而让机器人“跑飞”过。2.2 Jump指令聪明的“翻山越岭”如果工作台上有障碍物或者你要执行“吸取-移动-放置”这类操作直接用Go可能让机械手撞到东西。这时就该Jump指令出场了。Jump实现的是一个“门形”或“山形”轨迹。它的典型动作是先垂直向上Z轴抬升到一个安全高度然后水平移动到目标点正上方最后再垂直下降到达目标点。这个安全高度就是通过LimZ参数来设定的。Function main ‘ 从当前位置以门形轨迹移动到 pPlace 点抬升安全高度为50mm Jump pPlace LimZ 50 ‘ 更复杂的例子移动到目标点同时指定目标点的Z坐标为-10且抬升安全高度为30 Jump pPlace : Z(-10) LimZ 30 Fend提示Go和Jump都是PTP指令但Jump多了这个规避障碍的“抬升-平移-下降”三段式能力。在拾放作业中合理使用Jump不仅能防碰撞还能优化动作节奏缩短节拍时间。记住对于SCARA机器人在Z轴需要大范围升降时用Jump通常比用Go更快。3. 控制运动轨迹CP动作指令全解析当你需要机器人末端走一条特定的、可预测的路径时比如进行直线焊接、涂胶或者严格绕过某个区域PTP指令就力不从心了。这时你需要CPContinuous Path连续路径指令家族。CP指令的核心思想是控制工具末端TCP在空间中的运动轨迹而不仅仅是最终位置。它的运动路径是确定的、连续的。优点轨迹精确可控可以保持恒定的姿态和速度非常适合工艺性作业。缺点因为要严格遵循路径所以运动速度通常比PTP慢。控制CP动作的速度和加减速用的是SpeedS和AccelS指令它们的单位是实际的速度值如 mm/s和加速度值如 mm/s²。3.1 Move指令走直线的一把好手Move指令让机器人末端以直线轨迹从当前点运动到目标点。这是最常用的CP指令。Function main SpeedS 500 ‘ 设置CP运动速度为500 mm/s AccelS 1000, 1000 ‘ 设置CP运动加减速度为1000 mm/s² Move pStart ‘ 直线运动到起点 ‘ ... 执行一些操作比如打开焊枪 ... Move pEnd ‘ 直线运动到终点完成焊接 Fend注意Go和Move的区别是新手常问的问题。简单记要末端位置精准用Go要运动路径精准用Move。对于SCARA机器人如果只有Z轴上下运动两者轨迹确实一样。但在有水平移动时Go的路径是关节空间的弧线Move则是空间的绝对直线。3.2 Arc与Arc3指令画出优美的圆弧需要让机器人走个圆弧比如在边缘进行倒角打磨或者弧形焊接Arc和Arc3指令就是干这个的。Arc指令在XY平面对于SCARA机器人或指定的二维平面内进行圆弧插补。你需要给定一个“经过点”和一个“目标点”加上“当前点”这三点确定一段圆弧。Arc3指令在三维空间中进行圆弧插补功能更强大。Function main ‘ 假设有三个已示教的位置pNow当前位置 pVia圆弧经过点 pTarget圆弧目标点 Arc pVia, pTarget ‘ 从pNow出发经过pVia点以圆弧运动到pTarget点 Fend这里有个非常重要的安全提醒即使目标点pTarget在机器人的工作范围内如果计算出的圆弧路径中某一点超出了机器人的物理极限机器人会在运行时突然急停对伺服系统造成很大冲击。所以在第一次运行新的Arc或Move路径前务必先用极低的速度如SpeedS 50慢跑一遍确认整个路径安全无障碍这个坑我踩过急停的“哐当”声和领导的批评声至今难忘。3.3 高级CP指令Jump3与空间偏移对于更复杂的应用比如6轴机器人或者需要在特定坐标系下运动还有更高级的指令。Jump3 / Jump3CP这是三维空间的门形动作。Jump3是“1个PTP 2个CP”的组合而Jump3CP是“3个CP”的组合。它需要三个点退避点、接近点、目标点。这对于需要严格避障的空间作业非常有用。Jump3 pRetract, pApproach, pTarget注意普通的Jump指令不能用于6轴机器人6轴机必须使用Jump3或Jump3CP。BMove 与 TMove这两个是带偏移量的直线运动。BMove是在指定的基坐标系Base下进行偏移运动。如果没有指定就在默认的世界坐标系下进行PTP偏移。这常用于工作台上有多个相同布局的工位时。TMove是在当前的工具坐标系Tool下进行偏移运动。这常用于工具自身方向的微调比如拧螺丝时沿螺丝轴向的进退。‘ 假设当前工具坐标系是焊枪枪尖指向Z负方向 TMove Z(-5) ‘ 焊枪沿自身轴向扎入方向前进5mmCVMove这个指令用于执行由Curve命令事先定义好的复杂自由曲线路径。你需要先在控制器上用一个独立的文件定义好一连串路径点然后用CVMove调用这个文件来执行。这用于喷涂、复杂轨迹打磨等对路径要求极高的场景。4. 精细操控速度与加减速参数设定实战让机器人动起来只是第一步让它动得又快又稳才是真本事。这就离不开对速度Speed和加减速Accel参数的精细调节。调得好节拍提升、运行平稳调不好要么慢如蜗牛要么抖动冲击大。4.1 PTP动作的速度控制Speed与Accel对于Go,Jump这类PTP动作使用Speed和Accel指令参数是百分比。Speed指令Speed 80 ‘ 将所有轴的PTP速度设置为最大速度的80% Speed 80, 40, 30 ‘ 设置水平轴速度为80%第三轴常是Z轴上升速度40%下降速度30%为什么上升和下降速度要分开设这是出于安全和工艺考虑。比如下降去取料速度太快可能撞坏工件或产生大的抖动所以需要慢一些而取完料上升空载返回则可以快一些以提高效率。Accel指令Accel 80, 80 ‘ 将所有轴的加减速度设置为最大值的80% Accel 80, 80, 30, 30, 60, 60 ‘ 设置水平轴加减速度为80%第三轴上升加减速度30%下降加减速度60%加减速度影响的是机器人启动和停止时的“猛劲”。加速度太大启动瞬间冲击大减速度太大停止瞬间冲击大。对于搬运精密或易碎物品需要把加减速度值设小让动作更柔和。4.2 CP动作的速度控制SpeedS与AccelS对于Move,Arc这类CP动作使用SpeedS和AccelS指令参数是带单位的实际值如mm/s, mm/s²。SpeedS指令SpeedS 800 ‘ 将CP运动速度设置为800 mm/s这个值不是随便设的它受机器人型号和负载限制。你需要查阅对应机器人的手册找到允许的最大TCP速度。通常空载时可以跑得快一些重载时就要降低速度以保证稳定性和寿命。AccelS指令AccelS 1000 ‘ 将CP运动的加速度和减速度都设置为1000 mm/s² AccelS 1500, 800 ‘ 将加速度设置为1500 mm/s²减速度设置为800 mm/s²在CP路径中尤其是直线或圆弧衔接处加减速度的设置至关重要。过高的加速度会导致轨迹在拐角处“过冲”或抖动而过低的加速度又会使整体速度提不上来。我的经验是对于精度要求高的轨迹如精密涂胶采用“高加速、高减速”但“中低速”的策略对于长距离空跑可以采用“中加速、中减速”但“高速”的策略。4.3 参数调节的经验之谈在实际项目中我通常遵循一个“三步调试法”安全第一任何新程序、新路径首次运行务必用极低的速度如Speed 5,SpeedS 50和加速度单步或慢速连续运行观察路径和周围环境。逐步提升确认路径安全后逐步提高速度百分比或速度值。每次提升后观察机器人运行是否平稳有无异常振动或噪音。找到开始出现轻微振动的临界点然后回退10%-20%作为稳定工作点。优化节拍在稳定点的基础上尝试微调加减速度。有时适当降低加速度但提高匀速段速度整体节拍反而更优因为减少了急起急停的冲击时间。记住手册上的最大值是极限值不是推荐值。长期让机器人在极限参数下运行会大幅缩短其使用寿命。一个好的调试工程师是在性能、节拍和设备寿命之间找到最佳平衡点。