CS机器人Interpreter Mode解释器模式
  • CS系列支持Python脚本运行,并且脚本分为sec脚本与def脚本,脚本功能介绍如下。
    • def脚本为主程序脚本,一次仅支持一个def脚本运行,如果在第一个def脚本运行过程中,下发第二个def脚本,则会强制停止第一个运行中的def脚本,去执行新收到的def脚本。
    • sec脚本可以与def脚本同时运行,不会导致def脚本停止,但sec脚本不支持运动指令,并且不允许运行耗时指令(如sleep、串口、socket的超时操作等),有一定的限制。
  • 由于def脚本与sec脚本的定义,导致目前的python运行过程中,无法实现一些动态的脚本插队运行,比如用户在自己的上位机程序,实时计算出一些运行点位脚本,用户无法在程序运行的过程中,将一些实时计算的脚本插队到当前运行的任务当中。存在一定的使用限制。
  • 针对上述需求,CS控制软件开发了Interpreter Mode(解释器模式)功能,用于在一定的条件下,实现用户脚本的插队运行。

功能介绍:

系统进入解释器模式后,允许编程人员在任务运行时发送并插队运行脚本语句,只需要脚本语句为有效的python语句即可,用户可以将脚本语句通过30020端口,发送到控制器,控制器解收之后,会根据当前的状态,对语句进行编译运行。发送到30020端口的脚本语句,会已队列的方式存储在控制软件内部,并按顺序执行,脚本语句必须为单行语句,并以\n作为结束符,如 set_tcp([0,0,0,0,0,0])\n

解释器模式回复:

解释器模式接收到可执行的脚本语句后,将会通过返回以下格式信息,告知客户端。
ack: <id>: <statements>
id为接受的语句被分配的唯一id,后续的一些状态命令字返回值,会以该id信息返回。
如果任务未处于运行状态,或脚本语句发生编译错误,解释器会返回命令抛弃信息以及抛弃原因,格式如下。
discard: <reason>: <statement>

解释器模式脚本命令:

解释器模式的脚本命令均为标准python脚本函数,可以任务中或者解释器脚本队列中排队等待调用。

  • interpreter_mode(clearQueueOnEnter = True, clearOnEnd = True)
    • 该函数用于是任务进入解释器模式,其为阻塞函数,并且该函数仅可以在主线程调用,不支持嵌套调用。
      clearQueueOnEnter:为True时,会在进入解释器模式时,清除所有进入之前收到的脚本队列。
      clearOnEnd:为True时,会在退出解释器模式时,清除所以还未执行的脚本队列中的脚本内容。
  • end_interpreter()
    • 该函数用于关闭任务的解释器模式,此时阻塞的interpreter_mode函数会退出,该函数可以在任务的子线程中调用,也可以通过30020,发送到解释器模式中,在脚本队列中等待调用。
  • clear_interpreter()
    • 该函数用于清除解释器脚本队列,并且该函数也会进入到脚本队列中,等待调用,调用后,会将该函数执行前接收到的脚本队列清除,在其之后解收的脚本则不受影响。

解释器模式关键字命令:

解释器模式的关键字命令,为非python脚本函数,此类命令会在接收到后,马上被执行,不会进入脚本队列等待执行。

  • skipbuffer
    • 该命令可以让脚本队列跳过已经接收到,但还未执行的所有脚本命令(正在执行的命令不会结束,会继续正常运行到命令结束)。

解释器模式状态命令:

  • statelastexecuted

    • 该命令会返回最后执行过(或正在执行)的命令id,返回格式如下:
      state: <id>: statelastexecuted
  • statelastinterpreted

    • 该命令会返回最新解收的已经解析完成的脚本命令id,返回格式如下:
      state: <id>: statelastinterpreted
  • statelastcleared

    • 该命令会返回最后的被清除(调用clear_interpreter或解释器模式退出)的命令id,返回格式如下:
      state: <id>: statelastcleared

    • stateunexecuted

    • 该命令会返回当前队列中还未执行的脚本命令(已skipbuffer的命令不会计数在内),返回格式如下:
      state: <#unexecuted>: stateunexecuted

点击显示全文
赞同0
发表评论
分享

手机扫码分享
0
215
收藏
举报
收起
登录
  • 密码登录
  • 验证码登录
还没有账号,立即注册
还没有账号,立即注册
注册
已有账号,立即登录
选择发帖板块
举报
请选择举报理由
举报
举报说明