3. INFORM程序结构与基本语法

INFORM 是 MOTOMAN 机器人控制柜(如 DX200、YRC1000 等)使用的专用编程语言。它不像通用高级语言那样自由,而是围绕“机器人动作 + 外围设备时序”这一核心任务设计的。理解 INFORM 的程序结构,是后续能读懂示教器里已有程序、能自己写出可运行作业程序的前提。本节从程序文件的整体骨架讲起,再落到每一行的语法构成,最后把指令按功能分类梳理清楚。

一、程序文件的整体骨架

一个 INFORM 程序(JOB)在示教器上打开后,从上到下大致是这样一个结构:程序头信息、若干条指令行、注释、标签,以及程序结束标记。程序头并不是可执行代码,而是这个作业的“身份信息”,通常包含作业名称、控制轴组(如 R1 单机器人,或 R1+S1 带外部轴)、注释说明等。作业名在同一个控制柜内必须唯一,调用时就是靠这个名字。控制轴组决定了这个程序能驱动哪些轴,如果程序里写了 S1 相关指令但作业头没有配置外部轴,运行时会报错。

指令行是程序的主体,每一行是一条可执行语句。INFORM 的指令行有固定的书写格式,一般由行号(可选)、指令助记符、操作数、以及行末的注释组成。注释用单引号 ' 引导,从引号到行尾的内容都不参与执行,只给人看。标签(LABEL)用于标记程序中的某个位置,配合跳转指令使用,写法是标签名后跟一个冒号,例如 L10:。程序结束用 END 指令表示,执行到 END 时该作业正常终止。

下面是一个结构完整的示例程序,便于对照理解各部分的相对位置:

' JOB: PICK_01   ROBOT: R1
' 用途:从取料台抓取工件放到传送带
NOP
MOVJ P001 VJ=50.00
WAIT IN#(1)=ON
CALL JOB:GRIP_CLOSE
MOVL P002 V=300.0
DOUT OT#(10) ON
L10:
JUMP *L10 IF IN#(2)=OFF
END

可以看到,前两行是注释,说明作业名和用途;NOP 是空操作,常放在程序开头;随后是运动指令、I/O 等待、子程序调用、输出指令;L10: 是标签,配合 JUMP 构成循环;最后 END 收尾。

二、指令行的语法构成

一条典型的 INFORM 指令行可以拆成几个字段。以 MOVJ P001 VJ=50.00 为例:MOVJ 是指令助记符,表示关节插补运动;P001 是示教位置变量,存储了各轴的关节角度;VJ=50.00 是速度参数,VJ 表示关节速度百分比,50.00 即 50%。不同指令的操作数数量和类型不同,但基本遵循“指令 + 目标/对象 + 参数”的顺序。

位置变量 P 是 INFORM 里非常关键的一类数据。P 变量保存的是机器人各轴的姿态,可以在示教时直接记录。除了 P,还有用于寄存器的 B、I、D、R 等变量类型,分别对应字节、整数、双精度、实数等,用于存放计数、坐标偏移量、I/O 状态等。写程序时要注意变量类型匹配,例如把实数赋给整数寄存器会丢失小数部分。

注释虽然不执行,但在工程现场极其重要。建议在程序头写清作业用途、作者、日期,在关键指令行后写清该步动作意图,例如 MOVL P002 V=300.0 '移动到传送带上方。这样别人接手或自己隔一段时间再维护时,能快速看懂。

三、指令的功能分类

INFORM 指令数量不少,但按功能可以归为三大类,这也是本节要重点建立的知识框架。

运动指令负责让机器人动起来,核心是插补方式的选择。MOVJ 是关节插补,各轴同时运动到目标点,速度快、路径不一定是直线,适合大范围空走;MOVL 是直线插补,工具尖端沿直线运动,适合焊接、涂胶、直线搬运;MOVC 是圆弧插补,需要起点、经过点、终点三个位置,用于圆弧轨迹;MOVS 是自由曲线插补。运动指令通常还带速度、加速度、工具号等参数,速度单位在 MOVJ 下是百分比,在 MOVL 下是 mm/s。

I/O 指令负责与外围设备交互。DOUT 用于输出信号,例如打开夹爪、启动气缸;DIN 用于读入信号;WAIT 用于等待某个输入条件成立,例如等待工件到位信号;PULSE 用于输出一个脉冲信号。I/O 指令是机器人动作与外部设备动作衔接的关键,写程序时必须确认信号编号与电气接线一致。

控制指令负责程序的流程与逻辑。JUMP 实现跳转,可配合标签和条件;CALL 调用子程序,实现模块化;IF 实现条件判断;WAIT 也可归入控制类,用于同步;END 结束程序;PAUSE 暂停;RET 从子程序返回。控制指令让程序不再是简单的顺序执行,而能根据传感器状态做出分支和循环。

为了更直观地看清这三类指令在程序中的分工与衔接关系,下面用一张结构图表示:

INFORM 程序结构与指令分类 程序头 作业名 / 控制轴组 / 注释说明 (非执行信息) 指令行主体 运动指令 MOVJ 关节插补 MOVL 直线插补 MOVC 圆弧插补 I/O 指令 DOUT 输出 DIN 读入 WAIT 等待 / PULSE 脉冲 控制指令 JUMP 跳转 / CALL 调用 IF 条件 / RET 返回 PAUSE 暂停 / END 结束 注释 ' ... 不执行,仅说明用途 标签 L10: 配合 JUMP 构成循环/分支 END 程序结束 执行方向 ↓

这张图把程序头、三类指令、注释与标签、程序结束的相对位置和功能分工放在一起,可以看出:程序头是静态信息,指令主体按执行顺序排列,注释和标签穿插其中,END 收尾。实际写程序时,运动指令和 I/O 指令往往交替出现,控制指令则负责把它们组织成有逻辑的流程。

四、写程序时的几个实用要点

第一,程序头一定要写清楚作业名和用途。现场一个控制柜里可能有几十个 JOB,名字混乱会直接导致调用错误。第二,运动指令的速度参数要结合工艺选:空走段用 MOVJ 高百分比,工艺段用 MOVL 并给出合适的 mm/s,太快会影响轨迹精度,太慢影响节拍。第三,I/O 指令的信号编号必须与电气图纸核对,尤其是 WAIT 等待的信号,如果编号写错,程序会一直停在那里等一个永远不会来的信号。第四,标签名不要重复,JUMP 的目标标签必须存在,否则运行时报错。第五,善用 CALL 把重复动作(如抓取、放置)写成子程序,主程序只负责调度,这样修改一处即可全局生效。

建议在示教器上新建 JOB 后,先写程序头和注释,再逐条示教位置并插入运动指令,最后补 I/O 和控制指令。这样结构清晰,也便于中途检查。