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配置的解析
位置寄存器(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 Register | PR未定义 | 从备份恢复PR数据或手动创建 |
| Undefined I/O | IO信号未配置 | 在I/O配置中补全信号 |
| Program not found | 被调用程序缺失 | 导入缺失的例行程序 |
| Tool frame not set | 工具坐标系未设定 | 设置UTOOL编号与数据 |
校验通过后,建议先单步运行主程序,观察机器人是否按预期到达各示教点。若轨迹偏移,优先检查UFRAME和UTOOL;若逻辑卡住,优先检查IO信号状态。只有结构、数据、依赖三者全部对齐,离线验证才具备可信度。
上图把导入过程拆成"控制器备份→导入解析→ROBOGUIDE结构"三段,右侧程序树、位置寄存器、IO配置和依赖校验结果对应了本节要识别的四类核心对象。可以看到,PR[4]未定义这类问题只有在依赖校验阶段才会暴露,因此导入后不能直接运行,必须先完成结构核对。
五、实操建议与常见问题
实际导入时,建议按以下顺序操作:先导入程序模块,再导入位置寄存器数据,最后配置IO和坐标系。若程序量较大,可先用ASCII格式导入主程序,确认调用关系后再批量导入子程序。遇到"程序能打开但无法运行"的情况,优先检查Error Log中的第一条报错,它往往指向最根本的依赖缺失。
PR[1]的注释可能是"抓取点_工件A",导入后若注释丢失,后续调试时很难判断该寄存器用途。建议导入后立即核对注释完整性。完成导入与解析后,ROBOGUIDE中的程序结构应与实际控制器保持一致。此时可以进入下一步——在仿真环境中运行程序并观察轨迹,验证离线程序是否满足节拍、可达性和逻辑正确性。导入质量直接决定后续验证的可信度,这一步值得花时间做扎实。