• 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处理这个消息并更新地图数据
        • 注意:可在地图显示器的核心函数中做地图的初始化!
      • 将地图显示器操作者的前面板打开,这样可以同时看到多个操作者的显示界面,扩充了视野
    • 计划
      • 制作地图显示器操作者,将功能移到子操作者中去
        • 主操作者循环发送消息到地图显示器操作者,使其能够更新地图,并能够查看其前面板
      • 制作手柄操作者,使其能够发送布尔消息,制作模拟的坐标变换工作
        • 使手柄操作能够控制地图更新,即按上按钮,点能够向上运动
      • 制作先锋机器人操作者,先锋机器人既要响应动作,又要循环发送消息
    • 分析工作
      • 消息种类,消息设计
      • 消息的数据结构,优先级和其他必须的信息
    • 远景规划
      • 子操作者还应该能够通过网络连接与远程计算机系统连接
      • 打造一个计算性能好,可维护性好的分布式集群机器人控制系统!

  • 相关阅读:
    Window 服务安装
    SQL
    vb To c# or c# To vb
    CacheHelper-缓存
    让Linq的OrderBy支持动态字段
    哪些列上适合建立索引???
    如何查看Oracle数据库中无效的对象,约束,触发器和索引
    如何查看Oracle中被锁定的表
    ORACLE ASM
    WebLogic Server
  • 原文地址:https://www.cnblogs.com/lizhensheng/p/11241955.html
Copyright © 2020-2023  润新知