
简介面向EPSON机器人二次开发者的API应用资源基于RC 7.0选件API支持使用Visual Basic或.NET技术构建机器人控制程序与复杂交互界面适合自动化集成工程师、机器视觉开发者及工业机器人爱好者参考。资源共315个文件压缩包12.63MB其中包含110个vi文件、30个cs与30个vb源程序、29个resx界面资源、以及cpp/h、sln、settings等工程文件覆盖多种语言的项目模板与配置项便于对照学习不同开发方式。已有261人浏览学习。通过该包可获得完整的EPSON RC API调用示例、多语言工程框架、界面布局与项目配置代码尤其对需要接入数据库或第三方.NET组件、创建定制化操作界面的场景有直接帮助。文件类型较丰富适合初学者快速搭建示例工程也适合开发者按需提取代码模块用于现场项目。1. 从 API.zip 开始认识 EPSON 机器人 API 应用拿到 API.zip 后直接解压里面通常是一堆 DLL、示例工程和离线文档很多人下意识找 Setup.exe找不到就开始怀疑人生。其实 EPSON 机器人 API 应用不靠安装而是把 RC 7.0 的 API 动态库引用进自己的上位机工程让 PC 通过以太网和机器人控制器通信。控制器里真正跑指令的是 SPEL 解释器API 只是把连接、回原点、走点、读输入这些操作包装成函数调用。需要这套接口通常已经遇到两类需求产线上位机要做视觉定位或 MES 联动或者不想在 RC 7.0 界面里点按钮想让程序按节拍自动跑。在线文档打不开时优先以压缩包内的离线文档和示例工程为准。下面按通信原理、最小实现、参数设置、真机排错和采集入库的顺序一路讲下去。2. 先看 RC 7.0 的 API 体系SPEL 任务与 PC API 的通信关系2.1 控制器里的 SPEL 才是执行者PC API 是外部调用方EPSON 机器人控制器RC700 系列、RC90 系列等内部跑的是实时操作系统用户逻辑用 SPEL 语言编写编译后下载到控制器的 Flash 里。控制器上电后按任务表启动主程序整个运动规划、伺服使能、IO 扫描都在控制器内部闭环完成。PC API 不参与实时控制它只做一件事把高层指令通过以太网或串口送进控制器再由控制器里的 SPEL 运行环境解释执行。这个关系决定了排错时的基本分工。API 调用失败先别怀疑语法先确认控制器里的 SPEL 任务是否在正常运行。常见做法是在控制器里放一个循环任务作为“最小可执行环境”例如下面这段 SPEL 代码它会一直盯住 0 号输入信号来了就走 P1 点Function UserMain Do If In(0) 1 Then Go P1 On 10, 200 EndIf Loop Fend上面这段代码里In(0)读取 0 号输入端子的电平Go P1让机械臂以最快路径运动到示教点 P1On 10, 200把 10 号输出打开 200ms。真正干活的是这个 SPEL 任务PC API 在多数情况下只是替外部系统的逻辑去触发它、或者去查询它的状态。理解这一点之后你再看 API.zip 里的文档就不会被各种类名绕晕找的永远是“连接、调用、断开、查状态”这四个动作。2.2 RC 7.0 的 API 形态.NET 为主C/C 和 ActiveX 做补充API.zip 里通常同时提供几种语言的封装下面这张表是 RC 7.0 配套 API 最常见的三种形态实际版本以你解压出来的文件列表为准API 形态面向语言典型场景.NET DLLC# / VB.NET上位机界面、视觉定位、数据库与 MES 对接C/C 库C、C老式工控软件、内存或性能敏感的数据采集ActiveX / COMVBA、LabVIEW、脚本快速连调、验证工装、Excel 记录选型建议很直接新项目一律走 .NET DLL用 C# 写。原因不是 C/C 性能不够而是机器人的 API 调用频率通常只有几十赫兹瓶颈在网络和控制器扫描周期上C# 完全扛得住而 .NET 的异常信息、调试体验和依赖管理能明显缩短联调时间。只有在你们产线已经有一套 VC6 时代的遗留程序必须原地扩展时才值得去碰 C/C 接口。2.3 手写 TCP 报文和直接用 API.zip 的差别EPSON 控制器的网络协议本质上是自定义的应用层协议端口号在 RC 7.0 的 Controller Setup 里配置。理论上你可以拿 Socket 自己拼报文但实际没人推荐这么做一是协议版本随控制器固件变化API.zip 里的 DLL 已经替你做了版本适配二是控制器端有安全应答、任务调度和错误码联动手写报文漏掉一个握手字段表现出的症状往往是“连得上但命令没反应”这种问题非常难查。API.zip 真正值钱的地方在示例工程里。你大概率能找到 C# 的示例解决方案里面有连接、示教、运动、I/O 读写的全部骨架。我一般会把这份示例当作接口字典遇到不认识的方法先用 Visual Studio 的转到定义功能跳到 DLL 的元数据再看示例里怎么调比翻离线 PDF 快得多。3. 用 API.zip 里的示例工程在 RC 7.0 上跑通最小调用程序3.1 确认三个前提控制器/仿真器、IP、端口在写第一行 C# 之前先确保三个条件成立。第一目标控制器已经运行或者 RC 7.0 里启动了 Simulator仿真器不需要真机也能验证 API 调用链。第二知道控制器的 IP 和端口在 RC 7.0 的菜单中选择 Setup - Controller - Network里面能看到当前 IP 和通信端口出厂常见配置是静态 IP端口默认值以页面显示为准。第三PC 和控制器在同一个网段中间隔了办公网交换机也不怕只要路由可达即可但我不建议跨 VLAN 调机器人。先用一条 PowerShell 命令验证链路端口号按你在 Controller Setup 里看到的填Test-NetConnection -ComputerName 192.168.0.100 -Port 3795Test-NetConnection会返回TcpTestSucceeded值为True说明 TCP 层能通。如果这里就失败后面 API 报什么错都不用往代码上找先查网线和防火墙。注意控制器默认只开机器人相关的几个端口不要为了让 API 通而把 Windows 防火墙整个关掉加一条入站规则放行对应端口即可。3.2 在 Visual Studio 里引用 API DLL 并建立连接我用 C# 时习惯新建一个控制台工程引用从 API.zip 解压出来的主 DLL再用示例工程里的命名空间。不同版本对 DLL 的命名不完全一样解压后如果没有 Readme直接在示例工程的 References 里看引用了哪个文件最靠谱。下面这段代码按 RC 7.0 配套示例最常见的写法精简类名和方法名以你手里的 API.zip 为准using System; using Epson.RSR1; // 以 API.zip 示例工程里的 using 为准 class RemoteControl { static void Main() { Rsr1Controller ctrl new Rsr1Controller(); ctrl.Timeout 5000; // 单条指令超时 5 秒 ctrl.Connect(192.168.0.100, 3795); if (ctrl.ErrorID 0) { Console.WriteLine(connected); } ctrl.Disconnect(); Console.ReadLine(); } }这段代码只做了三件事创建控制器对象、设置超时连接、检查连接结果。Timeout的单位是毫秒常规工业现场建议 30005000给得太短会导致控制器忙时误报失败ErrorID为 0 表示无错误非 0 时去 RC 7.0 的 Error List 视图里对照。连接成功后不要马上调运动指令先跑两次空连接再停确认不会触发控制器的“频繁连接保护”。部分固件对短时间内的连接建立次数有限制测试程序里反复 Connect/Disconnect 太快会遇到连接被拒绝。3.3 跑通 Home 和直线运动的最小 C# 代码连接没问题后加两个最常用的动作回原点和走点位。下面的代码在上一节基础上补了 Home 和 Goctrl.Home(1); // 1 号机械臂执行回原点 if (ctrl.ErrorID ! 0) { Console.WriteLine(home error: ctrl.ErrorID); return; } ctrl.Go(1, 0); // 运动到点表 0 号点 ctrl.WaitFinish(1); // 等待机械臂到位参数说明Home的第一个参数是机械臂编号单臂机器人固定传 1双臂机器人第二臂传 2Go的第一个参数同样是臂号第二个参数是点表里的点位编号对应 RC 7.0 左侧 Point 视图里的编号不是坐标值。WaitFinish是必须的API 调用本身是异步的不等它你紧接着读位置状态读到的是运动中间值。点表里的点需要在 RC 7.0 里示教或手动输入坐标API 侧只管编号。这套“先建点表API 按编号走点”的做法比在 API 里传六个关节值更安全因为点位经过控制器侧校验越界和奇异点问题少一半。提示点表编号以 RC 7.0 的 Point 视图为准API 传的是编号不是坐标传错编号不会报错但会去错位置。3.4 断开与释放别把控制器的会话占满调用结束后我一般把 Disconnect 放在 finally 里避免程序异常退出把控制器的会话挂住。EPSON 控制器对并发连接数有限制调试时 CtrlC 杀掉进程再开程序却发现连不上多半是旧会话没释放。加一层 try-finally 是好习惯try { ctrl.Connect(ip, port); // 业务调用 } finally { ctrl?.Disconnect(); }另外一个容易忽略的细节整个上位机程序只维护一个控制器对象实例不要在每次按钮点击时 new 一个 Rsr1Controller更不要在多个线程里同时 Connect 同一个控制器。API 文档里通常会注明对象不是线程安全的我一般用 lock 包住调用块或者用一个后台队列串行处理所有 API 请求这样既不会撞会话限制也方便做超时重试。4. 生产里常用的 API 调用与参数设置运动、I/O 与状态读取4.1 运动命令的 API 映射Go、Move、Jump 的参数差异EPSON 的 SPEL 语言里运动指令按轨迹类型分成几档API 里的方法名通常与 SPEL 指令保持一致下面是 RC 7.0 上位机开发里最常用的一组SPEL 指令API 常见方法轨迹适用场景GoGoPTP 最快路径点胶、搬运的点间移动MoveMove直线插补涂胶、焊接等需要直线轨迹的工艺JumpJump弧线抬起再落下上下料绕开工件和夹具ArchArch带中间点的抬升轨迹高障碍绕行参数上最值得注意两点。第一Jump(P1, P2, 高度)的高度参数是相对 P1 起点的增量不是绝对坐标写反了会把机械臂拖到工件表面。第二Move的直线插补速度在 API 侧一般不单独设置速度规划仍然由控制器里 SPEL 程序的Speed指令决定API 传坐标就行。不要试图在 API 里复刻运动学那不是 PC 端该做的事。下面这段 SPEL 代码展示点表定义和速度规划的常见写法它会被下载到控制器里API 只负责触发执行Function Main P0 XY(300, 0, 100, 0, 0, 0) P1 XY(300, 200, 100, 0, 0, 0) Speed 50 Jump P0, P1, 50 FendXY的六个参数是 X、Y、Z、U、V、W前三个是位置后三个是姿态角Speed 50把速度百分比设为 50Jump的第三个参数 50 是跳跃高度单位毫米。这段代码解决的是“API 调用 Go 后机械臂没按预期轨迹走”的问题很多时候不是 API 配置错而是点表里坐标和速度参数写错了。4.2 I/O 读写与等待逻辑机器人对外交互最多的不是运动而是输入输出信号。API 里读输入、写输出通常长这样bool sensorOk ctrl.GetInput(1); // 读 1 号输入 ctrl.SetOutput(3, true); // 置位 3 号输出 ctrl.SetOutput(4, false); // 复位 4 号输出信号编号对应控制器端子上印刷的编号不是数组下标这是新人最容易搞混的地方。如果 RC 7.0 里把某个 IO 点分配给了安全功能API 侧的读写会被控制器拒绝报错的 ErrorID 能在 RC 的 I/O 监控页里看到对应原因。等待逻辑我一般不放循环里干等而是让控制器里的 SPEL 任务用Wait指令阻塞外部系统只需要把请求发进去例如Function WaitInput Wait In(1) 1 Fend这样 PC 端的 API 线程不会被拖住节拍计算也更准。反过来如果你想在 PC 侧等输出变化用轮询方式读GetInput间隔保持在 50ms 以上控制器的网络应答周期通常在 16ms 左右间隔太短只会把你的线程和控制器网卡都跑满。注意IO 编号以控制器端子丝印为准与 RC 7.0 IO 监控页一致不是数组下标。4.3 状态读取与错误码处理联调现场出现最多的问题不是连不上而是“命令下了但不知道发生什么”。我习惯在每次 API 调用后读状态对象至少包含 ErrorID、控制器运行状态、当前坐标三个字段。读取代码如下int err ctrl.ErrorID; bool running ctrl.IsRunning(1); double[] pose ctrl.GetPose(1); if (err ! 0) { // 把 err 和现场操作写入本地日志 }IsRunning检查 1 号机械臂当前是否有运动任务在跑返回true时强行发 Go 会被控制器拒绝正确做法是等待或先 Stop。GetPose返回的是当前末端在世界坐标系下的 X、Y、Z、U、V、W。常见错误码分成两类连接层错误多表现为负值或固定错误号运动层错误则是控制器 SPEL 任务抛出的API 只是透明传回来。排查时先看 RC 7.0 控制器的 Error List 窗口那里有时间戳和上下文比 PC 端日志准确得多。把错误码和现场日志对应起来存成一条记录是后期稳定产线最划算的投资。5. 仿真切真机的连接排查从网络参数到 API 调用失败5.1 真机接入前的网络侧确认仿真器上跑通之后切到真机总会遇到一类奇怪的“时好时坏”。我的固定流程是先用 RC 7.0 的 Controller Setup 确认控制器 IP 和端口再把 PC 网卡 IP 改成同网段固定地址最后用 PowerShell 实测端口。下面三个命令按顺序执行哪一步失败就先解决哪一步ping 192.168.0.100 Test-NetConnection -ComputerName 192.168.0.100 -Port 3795 Get-NetTCPConnection -LocalPort 3795ping只验证 ICMP 通很多工控环境下 ICMP 被关ping 不通不代表 TCP 不通所以要接着看端口测试。第三条命令用于检查本机是否已经有程序占用了 API 要用的本地端口多网卡环境里这个坑特别常见USB 转网卡的优先级会把连接路由到错误的接口上。另外真机调试时我建议给控制器配上固定 IP别用 DHCP机器人控制器重启后 IP 变了上位机里写死的连接地址会直接失效产线半夜出这种问题最难受。5.2 常见连接类错误与处理方法把 API 调用失败摊开看绝大多数逃不出下面这张表现象原因处理Connect 超时网段不通或防火墙拦截按 5.1 顺序逐项排查Connect 被拒绝端口错或频繁连接触发保护核对端口等 1 分钟再试调用无响应ErrorID 不变控制器任务未运行确认 SPEL Main 任务已启动运动指令报错急停、安全门、超程触发解除安全条件控制器端复位间歇性失败网线松动、EMI 干扰换屏蔽网线检查接地双机同时连不上会话数超限杀掉残留进程增加超时时间处理原则是先控制器端、后 PC 端。控制器端打开 RC 7.0 的 Monitor 页面能看到当前运动状态、急停状态和错误历史PC 端再配合异常堆栈定位。有一个细节经常被忽略控制器如果连接了外部安全 PLC急停回路被 PLC 拉掉时API 层表现为随机错误这时候查机器人本体是永远查不到原因的得顺着安全回路一路找。5.3 让 API 调用失败更快暴露加跟踪日志真机联调最怕现象复现不出来。我一般会在 API 封装层加一个开关把每次调用的方法名、参数、耗时、错误码写进日志文件打开方式像下面这样[2025-05-20 14:03:22.101] Connect 192.168.0.100:3795 - ok 12ms [2025-05-20 14:03:22.118] Home(1) - err 9001这里的err 9001是举例用的格式真实错误码以控制器 Error List 为准但日志格式值得照抄时间、方法、参数、结果、耗时各占一列。这样当现场人员说“刚才又出错了”你直接翻日志能找到时间点再把同一时刻的 RC 控制器日志拉出来比对。如果怀疑是网络层丢包可以在 PC 上抓包过滤条件按控制器的通信端口写例如tcp.port 3795看是否有 TCP 重传。重传率超过 5% 就能基本断定线缆或交换机端口有问题。6. 进阶技巧用 API 把机器人位置和 I/O 状态写进生产数据库6.1 后台轮询任务的最小实现联调稳定之后很多产线需要一个简单的数据采集机器人当前坐标、输出信号、错误状态按固定周期写进数据库供 MES 或质量追溯查询。API 调用频率不必高我用一个后台线程跑循环200ms 读一次状态批量写入 SQLite代码骨架如下while (!cancelToken.IsCancellationRequested) { var status new RobotStatus { Time DateTime.Now, ErrorID ctrl.ErrorID, X ctrl.GetPose(1)[0], Y ctrl.GetPose(1)[1], Out3 ctrl.GetOutput(3) }; InsertStatus(status); // 先写本地缓冲200ms 后下一轮 Thread.Sleep(200); }GetPose每次调用会重新从控制器读取坐标间隔 200ms 对控制器网络负载很小GetOutput读输出状态返回值是布尔量。要注意的是数据库写入不要放在 API 调用同一个线程里IO 抖动会阻塞下一次读取让采集时间戳变形。代码里的 InsertStatus 可以用一个内存队列加定时落库实现200ms 的采集周期完全够用。6.2 验证结果的方法跑起来之后用三种方式验证数据链路是通的。第一开着 RC 7.0 的 Controller Monitor 手动移动机械臂观察数据库里 X、Y 坐标是否跟着变化偏差应该在毫米级。第二在控制器端临时把 3 号输出打开确认数据库里 Out3 变成 true这能同时验证 I/O 映射和 API 读取。第三停掉控制器再跑采集程序这时候应该看到 ErrorID 非 0但程序不能崩溃下一轮循环继续执行。最后留一个具体参数建议轮询周期不要小于 100ms。EPSON 控制器的网络服务更新周期在 16ms 量级API 调用本身有握手和应答开销实际测得 50ms 间隔就会出现偶尔的重试100ms 是稳定区间200ms 适合长期后台运行。真要把这个采集程序放到 7x24 的产线上再加一段重连逻辑就好检测到 ErrorID 非 0 时Disconnect 后等 5 秒重新 Connect。本文还有配套的精品资源点击获取