做工业机器人上位机开发的朋友,几乎都逃不开“多品牌适配”的噩梦。
今天项目用ABB,要啃PC SDK;明天换安川,又得从头研究MotoPlus;后天客户指定发那科,整套控制逻辑又要推翻重写。每个厂商的SDK命名风格、调用方式、坐标体系、异常处理全不一样,运动控制、IO读写、状态监控各写一套,项目里一半代码都是重复的适配逻辑,换个品牌等于半套重构,维护起来苦不堪言。
之前做一条汽车零部件产线,现场同时有ABB码垛、安川焊接、发那科上下料三台机器人。一开始三套控制逻辑各写各的,光运动控制函数就有九个版本,改个超时逻辑要在三份代码里各改一遍,还经常改漏。后来痛下决心重构,抽象出一套统一的机器人控制层,把三大品牌的SDK差异全部抹平,上层业务代码完全不用关心底层是什么机器人。上线后代码量减了一半,后续新增品牌也只需要加一套实现,业务逻辑零改动。
今天就把这套抽象层的设计思路、核心实现和踩过的坑完整分享出来。
一、整体架构设计:分层解耦,接口先行
核心思路和工业通信框架一脉相承:面向接口编程,做到“一套接口,多种实现”。业务层只依赖抽象接口,不耦合任何厂商SDK;切换机器人品牌只需要改配置,不用动一行业务代码。
整个架构自上而下分为四层,各司其职,边界清晰: