跳到主要内容

15.4.22 中断指令

15.4.22.1 IRegister — 注册中断

说明: 注册中断,确定中断是否可以单次触发、是否可调试(单步、单步暂停下触发中断),以及中断号、触发信号、触发类型。一个触发源只能绑定一个中断函数。

定义:

IRegister([\SINGLE,][\DEBUG,][\LOGIC,] int_num, signal, trigger_type, trap_function);
//[]内为可选项
  • int_num:数据类型:中断号变量,用作中断的标识。

  • signal:寄存器信号/DI 信号。

  • trigger_type:触发方式。

    • DI 信号触发方式:

    • \Posflank :上升沿触发

    • \Negflank :下降沿触发

    • \Highlevel :高电平触发

    • \Lowlevel :低电平触发

    • 注意:高低电平触发会持续触发中断

    • 寄存器(int\bool\bit\byte)触发方式:0 代表低电平,非 0 代表高电平。

  • trap_function:中断函数名。

  • \SINGLE:单次触发,可选项。

  • \DEBUG:可调试,可选项,添加此参数后可在单步、单步暂停状态触发中断。

  • \LOGIC:逻辑中断,可选项,添加此参数后,触发中断后不会打断机器人运动。

示例:

IRegister(\SINGLE, \DEBUG, intnum0, DI1_0, \Posflank, "trapfun1");
//注册中断,当DI 信号DI1_0 发生上升沿变化时,执行trapfun1 函数,触发一次后不再响应此中断;此中断可在单步和单步暂停状态触发;intnum0 为此中断的标识符,用于IEnable、IDisable、GetTrapData 指令

15.4.22.2 IVRegister — 注册变量中断

说明: 指定一个被监控变量并绑定中断,当变量变化或变化为指定值时,则触发中断。

定义:

IVRegister([\SINGLE,][\DEBUG,][\LOGIC,] int_num, varname, TrigMode, [specific_value], trap_function);
  • int_num:数据类型:中断号变量,用作中断的标识。

  • varname:变量名。

  • TrigMode:触发方式。

    • \CHANGE:变量发生变化时触发。

    • \SPECIFICVALUE:变量变化为指定值时触发。

  • specific_value:比较值,需要与 varname 相同类型,可选项,跟随 \SPECIFICVALUE 使用。

  • trap_function:中断函数名。

  • \SINGLE:单次触发,可选项。

  • \DEBUG:可调试,可选项,添加此参数后可在单步模式未运行状态触发中断。

  • \LOGIC:逻辑中断,可选项,添加此参数后,触发中断后不会打断机器人运动。

变量可选范围:

  • 需要是全局变量(变量列表中)。

  • bool、byte、double、int 类型。

说明:

  • 如果变量被快速修改,可能会丢失一些次数的中断;如果在执行中断程序读取变量数值时,无法确保读取的数值就是引起中断的数值。

示例:

IVRegister \SINGLE, \DEBUG, intnum1, global_var, \CHANGE, "trapfun2";
// 注册变量中断,当 global_var 发生变化时,执行 trapfun2 函数,触发一次后不再响应此中断;此中断可在单步模式未运行状态触发

15.4.22.3 ITRegister — 注册定时中断

说明: 给定一个周期时间 $t$,让程序周期性地触发中断。

定义:

ITRegister([\SINGLE,][\DEBUG,][\LOGIC,] int_num, time_gap, trap_function);
  • int_num:数据类型:中断号变量,用作中断的标识。

  • time_gap:时间间隔,int 类型。

  • trap_function:中断函数名。

  • \SINGLE:单次触发,可选项。

  • \DEBUG:可调试,可选项,添加此参数后可在单步模式未运行状态触发中断。

  • \LOGIC:逻辑中断,可选项,添加此参数后,触发中断后不会打断机器人运动。

说明:

  • 不能严格根据定时时间触发,会有延迟,延迟来自计时函数本身的误差和调用消耗。

示例:

ITRegister intnum0, 3, "trapfun1";
// 注册中断,每过三秒,执行 trapfun1 函数

15.4.22.4 IGRegister — 注册GI信号中断

说明: 注册 GI 信号触发中断,当 GI 信号发生变化时触发中断。

定义:

IGRegister([\SINGLE,][\DEBUG,][\LOGIC,] int_num, signal, trap_function);
  • int_num:数据类型:中断号变量,用作中断的标识。

  • signal:GI 信号。

  • trap_function:中断函数名。

  • \SINGLE:单次触发,可选项。

  • \DEBUG:可调试,可选项,添加此参数后可在单步、单步暂停状态触发中断。

  • \LOGIC:逻辑中断,可选项,添加此参数后,触发中断后不会打断机器人运动。

示例:

IGRegister intnum0, GI1, "trapfun1";
// 注册中断,当 GI 信号 GI1 发生变化时,执行 trapfun1 函数

15.4.22.5 IEnable — 激活中断

说明: 激活被 IDisable 禁用的中断,前瞻触发(IRegister 后默认是激活的)。

定义:

IEnable(int_num);
  • int_num:数据类型:中断号变量, 用作中断的标识

示例:

IEnable(intnum0);
// 激活 intnum0 对应的中断,激活后可被绑定的信源触发

15.4.22.6 IDisable — 禁用中断

说明: 禁用某个中断,前瞻触发。需要注意的是选择单次触发的中断,在被 IDisable 后收到中断信号,仍视为单次触发结束。

定义:

IDisable(int_num);
  • int_num:数据类型:中断号变量, 用作中断的标识

示例:

IDisable(intnum0);
// 禁用 intnum0 对应的中断,禁用后不可被绑定的信源触发

15.4.22.7 GetTrapData — 获取中断信息

说明: 获取某中断的信息,前瞻触发。

定义:

GetTrapData(int_num, str);
  • int_num:数据类型:中断号变量, 用作中断的标识

  • str:数据类型:接收中断信息的字符串。

示例:

GetTrapData(intnum0, string0);
//获取int num0 对应的中断信息,将信息放入string0