10.27-运用操作者框架架设控制中心软件架构

构建思路,走通一条路

  • 手柄控制,控制机器人动作,机器人同时传回数据,主操作者根据传回的数据更新地图。

更新地图

  • 主操作者初始化地图
  • A操作者发消息
  • 主操作者更新(坐标示例:100,-50
    • 主操作者收到数据就更新
    • 主操作者发现数据不一样才更新
  • 主操作者更新,是在核心中计算并更新UI还是在消息类中计算,在核心中更新?
    • 如果在核心中计算
      • A操作者每隔一个时间间隔发送消息,主操作者接受到消息的DO仅仅是将消息写入到robot position cluster控件中,(更新坐标数据)而由核心函数进行计算和更新
      • 这样的好处是,所有计算都在主操作者核心中,不用设计主操作者类的数据成员。不足是核心函数将变得很庞大
      • 而且while循环更新频率不知道怎么确定
    • 如果在消息处理函数DO中计算
      • DO中需要处理主操作者类的数据成员,即所有关于地图的计算数据都要放入到主操作者类中,这个有点麻烦,而且程序不可读。
      • DO中计算完后,只需更新图片控件引用即可
    • 先在核心中计算吧,简单一些

在核心中计算

  • 修改A核心函数
    • 调用了主操作者的LOG EVENT MESSAGE 消息的 send 函数,需要传入robot position cluster 数据
    • 修改主操作者的消息类的数据结构,添加robot position cluster
    • 修改此消息的 send 函数,此时会发现消息自动解绑,多了一个 robot positon cluster
    • 调用此消息的 send 函数
    • 至此,发送端已经构造完毕
    • 注意:A核心函数中确保调用“读取调用方待入队列”函数;
    • 注意:已知问题会产生。当A操作者和B操作者同时发送同一消息时,比如send log event.vi,会导致主操作者UI结束后,其他操作者程序不能结束。
  • 修改主操作者核心
    • 主操作者收到消息后会调用DO.VI,所以会修改DO.VI
    • DO.VI调用成员函数 log event.vi 函数
    • 修改DO.VI,添加 robot position cluster 数据的解绑
    • 修改主操作者的数据结构,创建UI控件及引用
      • 在主操作者核心中创建robot position cluster 控件
      • 在主操作者数据结构中添加引用
        • 怎样创建控件的引用
        • 在函数面板上创建簇控件的引用,右击簇引用的输出端口,创建输出控件,然后右击生成的输出控件,转换为输入控件
        • 到前面板,将这个输入控件剪切到*.ctl
    • 修改LOG EVENT.VI ,用输入的robot position 来修改UI控件
      • 利用“引用”功能
      • 复制引用的“value”属性,直接将输入簇的值写入引用的value属性中,达到修改的目的
  • 此时可以收到不断改变的坐标数据,在主操作者UI上添加一个循环,更新地图即可
    • 先在TEST.VI上面做一个试验,再将程序框图复制到主操作者核心函数中
    • 使用局部变量读取收到的robot position cluster 数据,在循环中更新地图控件
  • 改进
    • 使用通知器来同步线程,而不是用两个高速循环,这样太消耗计算机资源
    • 考虑在子操作者中完成计算任务,主操作者只是将子操作者的前面板载入
    • 到底是在DO中完成计算任务,还是在核心函数中完成计算任务?

下一步作业

2015/10/29 9:35

规划

  • 主操作者不作UI显示,只作为数据决策和消息传递(传递子操作者发送过来的数据)
    • 主操作者只作传递消息只用,不做UI显示,可能会做一点点初始化的运算(命令解释?)。
    • 在下文中,当我们讲某子操作者传递消息到某子操作者中,都隐含地通过了主操作者
  • 子操作者作为计算和显示的地方
    • 比如有下列子操作者:手柄,先锋机器人,地图显示器
    • 手柄操作者不断发送布尔指令,将消息发送到先锋机器人,先锋机器人响应此消息并做出动作
      • 响应此消息,是通过消息的DO函数逐个处理消息还是通过核心函数循环接受消息?还是通过通知器等线程运行控制手段?
    • 先锋机器人操作者在运行过程中循环发送坐标数据到地图显示器
    • 地图显示器DO处理这个消息并更新地图数据
      • 注意:可在地图显示器的核心函数中做地图的初始化!
    • 将地图显示器操作者的前面板打开,这样可以同时看到多个操作者的显示界面,扩充了视野
  • 计划
    • 制作地图显示器操作者,将功能移到子操作者中去
      • 主操作者循环发送消息到地图显示器操作者,使其能够更新地图,并能够查看其前面板
    • 制作手柄操作者,使其能够发送布尔消息,制作模拟的坐标变换工作
      • 使手柄操作能够控制地图更新,即按上按钮,点能够向上运动
    • 制作先锋机器人操作者,先锋机器人既要响应动作,又要循环发送消息
  • 分析工作
    • 消息种类,消息设计
    • 消息的数据结构,优先级和其他必须的信息
  • 远景规划
    • 子操作者还应该能够通过网络连接与远程计算机系统连接
    • 打造一个计算性能好,可维护性好的分布式集群机器人控制系统!

猜你喜欢

转载自www.cnblogs.com/lizhensheng/p/11241955.html