0%

对控制驱动的改进

之前在制作控制程序的时候,有一些不够优雅的地方,今天决定对这些问题进行修正

事件驱动

之前的工作是通过不断地询问实现的,我们要实现与串口交互的部分不断询问,而上层则是通过事件去驱动,这样可以极大程度简便工作流程,并且为未来处理碰撞等问题提供解决方案.

对于电机

电机输入一个MoveControlCallbacksBase,其中规定了三种可能的情况:状态更新,碰撞和坐标更新

这些函数只有在值改变的时候才会调用

这样的话MoveControl类只留下了一个接受命令并阻塞运行的run方法(在阻塞运行时,坐标会更新),并且保留了两个公开可修改属性

  1. refreshtime:控制多久刷新一次坐标信息
  2. feed_rate:控制移动速度

对于控制器

计划将控制器的构造函数的参数不出现有关移动控制和测量控制的函数,这样可以保证更好的封装

然后和电机保持一样的回调控制方式

对于控制器,则保留四种情况的回调:

  1. status_refresh_call控制器状态刷新
  2. coordinate_refresh_call坐标状态刷新
  3. measure_refresh_call测量结果刷新
  4. no_command_call无后续命令

并且保留了两个公开方法add_cmdchange_motor_settings

属性中保留cmd_list进行读取待进行指令,cmd_now为当前执行指令

以及move_start控制是否开始测量

1.31更新

如果单纯的使用一个cmd来同时管理电机,测量和显示,这无疑是非常浪费的,而且这样操作如果未来需要修改命令格式以支持其他功能也是非常不妥当的,因此,我们需要对cmd进行预处理操作.

我们添加了一个_cmd_parser指令,这个指令可以独立地去处理数据,目前可以处理两类:

  1. 一次移动,一次测量
  2. 多次移动一起,一次测量

为了更好的适配2,我们在电机控制中添加了_send_cmd_sync这个命令,可以更高效处理曲折的路径

同时,我们在回调函数中添加了cmd_refresh_call,避免用户去访问cmd_now属性造成混乱

测量驱动修改

应用了MPS010602,将相关文件打包成一个weel再安装,这个留到另外一篇文章讲