3. 机器人程序导入与结构解析

在ROBOGUIDE中完成工作单元建模后,真正决定离线验证价值的,是能否把实际控制器里的程序"原样"搬进仿真环境。导入不是简单复制文件,而是一次结构还原:控制器中的程序模块、例行程序、位置寄存器、IO配置以及它们之间的依赖关系,都必须在ROBOGUIDE中一一对应,否则仿真跑出来的轨迹和逻辑就与实际不符。本节围绕"导入—识别—解析—校验"这条主线,讲清每一步该看什么、怎么判断导入是否成功。

一、导入前的准备:明确来源与格式

ROBOGUIDE导入程序主要有两条路径:一是通过虚拟机器人备份(.TP文件集合)导入,二是通过ASCII程序(.LS/.TP文本)导入。前者保留完整的系统结构,后者便于查看和编辑。实际操作中,建议先从实际控制器做一次All of Above备份,得到包含程序、寄存器、IO配置的完整目录,再在ROBOGUIDE中通过 File → Import → Robot Program 或 Virtual Robot → Load Program 载入。

导入前需要确认三件事:控制器型号与ROBOGUIDE中虚拟机器人型号一致(如R-2000iC/165F对应同型号);系统软件版本匹配,避免因版本差异导致指令无法识别;程序中的用户坐标系、工具坐标系编号与仿真环境一致。若不一致,导入后位置会整体偏移,这是最常见的"导入成功但轨迹错误"的原因。

二、程序模块与例行程序的结构识别

导入完成后,在ROBOGUIDE的Program Tree中可以看到程序被组织为若干程序模块(Program Module),每个模块下包含多个例行程序(Routine)。典型结构如下:

MAIN_PROG (程序模块)
├── MAIN (主例行程序, 类型: Program)
├── PICK_PART (例行程序, 类型: Program)
├── PLACE_PART (例行程序, 类型: Program)
└── CALC_OFFSET (例行程序, 类型: Macro)

识别时重点关注三类信息:例行程序类型(Program/Macro/Subroutine)、调用关系(谁调用谁)、参数传递(是否带AR参数)。例如 CALL PICK_PART 表示主程序调用拾取例行程序;CALL CALC_OFFSET(1,2) 则说明该宏带两个参数。ROBOGUIDE会在程序树中以不同图标区分类型,双击可查看具体指令。

若导入后程序树中例行程序显示为灰色或带问号,通常表示该例行程序依赖的位置寄存器或IO信号未定义,需要先补齐依赖再运行。

三、位置寄存器与IO配置的解析

位置寄存器(Position Register, PR)是程序中的"变量坐标",实际控制器里常用来存储示教点或计算结果。导入后应在 Data → Position Registers 中核对每个PR的编号、注释和当前值。例如 PR[1] 可能存储抓取点,PR[2] 存储放置点。若PR值为全零或明显异常,说明导入时未同步寄存器数据,需要从备份中单独恢复。

IO配置包括数字IO(DI/DO)、组IO(GI/GO)、模拟IO(AI/AO)以及机器人IO(RI/RO)。导入后进入 I/O → Digital 查看信号分配表,重点核对:信号名称是否与程序中的 WAIT DI[1]=ON、DO[2]=ON 一致;机架(Rack)、插槽(Slot)、起始点(Start)是否与控制器实际接线匹配。若名称对不上,程序中的逻辑判断就会失效。

四、依赖关系与导入校验

程序能否在ROBOGUIDE中正常运行,取决于依赖是否完整。主要依赖包括:工具坐标系(UTOOL)、用户坐标系(UFRAME)、位置寄存器、IO信号、其他被调用程序。校验方法是:在ROBOGUIDE中执行 Compile 或直接运行主程序,观察Error Log。常见报错及处理如下:

报错信息含义处理方式
Undefined Position RegisterPR未定义从备份恢复PR数据或手动创建
Undefined I/OIO信号未配置在I/O配置中补全信号
Program not found被调用程序缺失导入缺失的例行程序
Tool frame not set工具坐标系未设定设置UTOOL编号与数据

校验通过后,建议先单步运行主程序,观察机器人是否按预期到达各示教点。若轨迹偏移,优先检查UFRAME和UTOOL;若逻辑卡住,优先检查IO信号状态。只有结构、数据、依赖三者全部对齐,离线验证才具备可信度。

机器人程序导入与结构解析关系图 实际控制器备份 程序模块 (.TP) 位置寄存器 (PR) IO配置 (DI/DO/GI) 工具/用户坐标系 系统变量 ($) 依赖程序文件 导入与解析 Import Compile Error Log 单步运行 轨迹校验 ROBOGUIDE 程序结构 Program Tree MAIN_PROG ├─ MAIN (Program) ├─ PICK_PART (Program) ├─ PLACE_PART (Program) └─ CALC_OFFSET (Macro) 位置寄存器 PR[1] 抓取点 PR[2] 放置点 PR[3] 安全位 IO配置 DI[1] 工件检测 DO[2] 夹爪控制 GI[1] 码垛计数 依赖校验结果 ✓ UTOOL[1] 已设定 ✓ UFRAME[1] 已设定 ✗ PR[4] 未定义 → 需恢复 备份 解析 导入成功 ≠ 可运行:需完成结构识别、数据核对与依赖校验三步

上图把导入过程拆成"控制器备份→导入解析→ROBOGUIDE结构"三段,右侧程序树、位置寄存器、IO配置和依赖校验结果对应了本节要识别的四类核心对象。可以看到,PR[4]未定义这类问题只有在依赖校验阶段才会暴露,因此导入后不能直接运行,必须先完成结构核对。

五、实操建议与常见问题

实际导入时,建议按以下顺序操作:先导入程序模块,再导入位置寄存器数据,最后配置IO和坐标系。若程序量较大,可先用ASCII格式导入主程序,确认调用关系后再批量导入子程序。遇到"程序能打开但无法运行"的情况,优先检查Error Log中的第一条报错,它往往指向最根本的依赖缺失。

不要忽略程序中的注释和寄存器注释。实际控制器里,PR[1]的注释可能是"抓取点_工件A",导入后若注释丢失,后续调试时很难判断该寄存器用途。建议导入后立即核对注释完整性。

完成导入与解析后,ROBOGUIDE中的程序结构应与实际控制器保持一致。此时可以进入下一步——在仿真环境中运行程序并观察轨迹,验证离线程序是否满足节拍、可达性和逻辑正确性。导入质量直接决定后续验证的可信度,这一步值得花时间做扎实。