系 统 概 要 设 计


  1. 主要相关设备:

    1. 触发区 / 触发器

      一个由人脚踩踏触发的设备,或者围绕特定区域的光栅栏设备组;一旦被触发,即向节点计算机发送“被触发了”信号。

    2. 靶单元

      分为以下两种情况考虑:

      1. 采用智能光电靶

        智能光电靶和出靶收靶控制机构组成;
        出靶收靶控制机构根据来自节点计算机的“出靶”、“收靶”信号执行出靶、收靶动作;
        智能光电靶根据来自节点计算机的“出靶”、“收靶”信号而开始工作和结束工作。

        工作中的智能光电靶上出现光点时,智能光电靶自动判定是否命中和命中的环数,将此结果发送给节点计算机

      2. 采用哑靶

        哑靶、出靶收靶控制机构和摄像头组成;
        出靶收靶控制机构根据来自节点计算机的“出靶”、“收靶”信号执行出靶、收靶动作;
        摄像头根据来自节点计算机的“出靶”、“收靶”信号而开始工作和结束工作。

        摄像头在工作期间源源不断地把哑靶的图像发送给节点计算机

    3. 节点计算机

      一台储存射击数据、运行设计控制程序的计算机。

      储存、管理时序配置数据和成绩记录数据;
      在整个局域网中提供可由松耦合客户端设备访问的管理界面;
      触发区 / 触发器启动控制出靶、收靶;
      如果采用哑靶方案,则还需要分析来自摄像头的哑靶图像,判定命中效果。

    4. 松耦合客户端设备

      顾客的计算机或其他带有浏览器的设备,节点计算机接入同一个局域网后可用浏览器查看射击成绩记录,无需编写和安装专用客户端软件。

  2. 设备关系示意:

    本图中连接各设备的黑色实线仅用于表明设备间的逻辑关系,不代表实际的连接方式、线路,也不包含线路类型信息。
    系统简图

  3. 节点计算机分系统设计:

    1. 信息管理分系统:

      系统数据管理与展示。

      如果此分系统主要由 TCL 方面设计和制作,考虑现有开发能力,将用 Java 编写、在 JVM 上运行。
      所需的技术、半成品程序组件和用于参考的程序组件已基本具备;但为最大程度避免因做错方向而返工,需要待详细设计完成才可开工。

      初步设计:

      1. 用户登录与权限管理系统:

        用于记录人员、功能、以及在不同人员之中分配包括信息管理和射击在内的各种功能的使用权。

        可以一个已经存在的用户登录与权限管理系统为起点,做如下改造:

        1. 操作界面全面中文化。

        2. 增加一个设置项,用于在大部分时候隐藏过于详细的操作结果报告。

        3. 设法“改良”现有界面,令其易于在移动设备上操作。

        4. (远期) 另外制作一套与功能耦合程度较低的界面,从开始编写时就注意其在移动设备上的显示、操作效果。

        5. (远期) 操作界面完全多语言化。

      2. 配置信息管理系统:

        在用户登录与权限管理系统下新编写若干功能,用于管理各硬件的时序、动作配置数据。

      3. 射击数据管理系统:

        在用户登录与权限管理系统下新编写若干功能,用于管理射击过程中生成的各种数据。

      4. 射击成绩展示等杂项功能:

        在用户登录与权限管理系统下新编写若干功能,查询射击过程中产生的数据、生成展示某人某次射击的结果,包括最终成绩和过程细节。

    2. 外部设备交互分系统:

      触发区 / 触发器靶单元的操控;可能包含图像判靶逻辑。

      1. 可能涉及的技术要点:

        如果此分系统主要由 TCL 方面设计和制作,考虑现有开发能力,顶层逻辑将用 Java 编写、在 JVM 上运行;但因为以下原因,几乎确定会调用本地 .so 或 .dll 模块:

        1. 图像判靶逻辑复杂,速度要求也很高,此处用 Java 编写未必合适,可能要由 .so 或 .dll 模块代替。

        2. 图像判靶模块可能由合作伙伴提供,最可能以 .so 或 .dll 模块的形式出现。

        3. 外部设备驱动程序最可能以 .so 或 .dll 模块的形式出现。

        以下技术有较大可能用上,但目前尚未具备,需要重点研究:

        1. Java 通过 scoket 与他计算机或设备交互。

        2. Java 程序调用本地 .so 或 .dll 模块。

        3. Java 程序通过 libusb 库与 USB 设备交互。

        追加考虑:

        1. “本局开始”、“本局暂停”、“本局结束”等开关由用户操作还是由专门的靶场管理员操作?

        2. “本局开始”点击后、“本局结束”点击前,需要改变一个状态量,表明目前射击分系统正在被占用;再有其他用户或管理员试图使用射击分系统时会被此状态量阻止。

        3. 如果因为某种意外导致状态量在“本局结束”后不能自动复原,需要有一个功能供管理员手动复原。

      2. 分系统主要功能划分及主要流程设计:

        1. 人进入 (某个) 射击区域触发靶单元群,按时序控制“出靶”、“收靶”:

          • → 本机输入:

            选取关 / 场景;输入新射击人信息。

          • → 外界输入:

            来自某个触发区 / 触发器的信号;
            此信号表明触发区 / 触发器已“被触发”;可能包含该触发区 / 触发器的 ID ;
            信号传输方式待定。(USB ?以太网?专用板卡?其他?……)

          • ← 本机输出:

            生成、并由本机 IO 储存如下记录:
             数据 ID 
             (开局 ID) 
             射击人 
             开局时间戳 
             …… 


          • → 本机输入:

            由本机 IO 读取时序、动作配置文件。

          • ↓ 本机处理:

            根据 关 / 场景 ID 选出相应的时序、动作配置数据,针对各靶顺次进行如下处理,直到被来自此靶的“命中”事件打断:

            1. ← 对外输出:

              向相应的靶单元发送“出靶”信号;
              信号传输方式待定。(USB ?以太网?专用板卡?其他?……)

            2. ↓ 本机处理:

              监听来自此靶单元的“命中”信号,或持续收取来自此靶单元的图像信息;
              为不同的靶单元使用不同的端口,或者靶单元回传信号中带有 ID 。

            3. ← 本机输出:

              生成、并由本机 IO 储存如下记录:
               数据 ID 
               开局 ID 
               靶单元 ID 
               动作标志:“出靶” 
               (标靶弹出) 
               时间戳 
               …… 


            4. ← 对外输出:

              向相应的靶单元发送“开火”信号,令靶单元发出闪烁或声响动作;
              信号传输方式待定。(USB ?以太网?专用板卡?其他?……)

            5. ← 本机输出:

              生成、并由本机 IO 储存如下记录:
               数据 ID 
               开局 ID 
               靶单元 ID 
               动作标志:“开火” 
               (开始声光效果) 
               时间戳 
               …… 


            6. ← 对外输出:

              向相应的靶单元发送“停火”信号,令靶单元停止闪烁或声响动作。
              信号传输方式待定。(USB ?以太网?专用板卡?其他?……)

            7. ← 本机输出:

              生成、并由本机 IO 储存如下记录:
               数据 ID 
               开局 ID 
               靶单元 ID 
               动作标志:“停火” 
               (停止声光效果) 
               时间戳 
               …… 


            8. ↓ 本机处理:

              停止对此靶单元的监听。

            9. ← 对外输出:

              向相应的靶单元发送“收火”信号,令靶单元收起。
              信号传输方式待定。(USB ?以太网?专用板卡?其他?……)

            10. ← 本机输出:

              生成、并由本机 IO 储存如下记录:
               数据 ID 
               开局 ID 
               靶单元 ID 
               动作标志:“收靶” 
               (标靶收纳) 
               时间戳 
               …… 


        2. 判定命中并“收靶”:

          1. 如果采用智能光电靶

            • ↓ 本机处理:

              循环监听,等待来自某个靶单元的“命中”信号。
              信号传输方式待定。(USB ?以太网?专用板卡?其他?……)

            • → 外界输入:

              来自此靶单元的信号 / 数据。
              信号传输方式待定。(USB ?以太网?专用板卡?其他?……)

            • ← 本机输出:

              生成、并由本机 IO 储存如下记录:
               数据 ID 
               开局 ID 
               靶单元 ID 
               动作标志:“命中” 
               时间戳 
               …… 


            • ← 对外输出:

              向相应的靶单元发送“停火”信号,令靶单元停止闪烁或声响动作。
              信号传输方式待定。(USB ?以太网?专用板卡?其他?……)

            • ← 本机输出:

              生成、并由本机 IO 储存如下记录:
               数据 ID 
               开局 ID 
               靶单元 ID 
               动作标志:“停火” 
               (停止声光效果) 
               时间戳 
               …… 


            • ↓ 本机处理:

              停止对此靶单元的监听。

            • ← 对外输出:

              向相应的靶单元发送“收火”信号,令靶单元收起。
              信号传输方式待定。(USB ?以太网?专用板卡?其他?……)

            • ← 本机输出:

              生成、并由本机 IO 储存如下记录:
               数据 ID 
               开局 ID 
               靶单元 ID 
               动作标志:“收靶” 
               (标靶收纳) 
               时间戳 
               …… 


          2. 如果采用哑靶

            • ↓ 本机处理:

              循环监听,持续收取来自某个靶单元的图像。
              信号传输方式待定。(USB ?以太网?专用板卡?其他?……)

            • → 外界持续输入:

              来自此靶单元的图像;可能包含该靶单元的 ID 。
              信号传输方式待定。(USB ?以太网?专用板卡?其他?……)

            • ↓ 本机处理:

              每收到一幅图片,即时检判图像中是否有光点、光点是否在靶上、光点对应的击中效果(四肢 / 躯干 / 头部 / 环数)。

            • ← 本机输出:

              生成、并由本机 IO 储存如下记录:
               数据 ID 
               开局 ID 
               靶单元 ID 
               动作标志:“命中” 
               时间戳 
               …… 


            • ← 对外输出:

              向相应的靶单元发送“停火”信号,令靶单元停止闪烁或声响动作。
              信号传输方式待定。(USB ?以太网?专用板卡?其他?……)

            • ← 本机输出:

              生成、并由本机 IO 储存如下记录:
               数据 ID 
               开局 ID 
               靶单元 ID 
               动作标志:“停火” 
               (停止声光效果) 
               时间戳 
               …… 


            • ↓ 本机处理:

              停止对此靶单元的监听。

            • ← 对外输出:

              向相应的靶单元发送“收火”信号,令靶单元收起。
              信号传输方式待定。(USB ?以太网?专用板卡?其他?……)

            • ← 本机输出:

              生成、并由本机 IO 储存如下记录:
               数据 ID 
               开局 ID 
               靶单元 ID 
               动作标志:“收靶” 
               (标靶收纳) 
               时间戳 
               …… 


  4. 未归纳:

    1. 触发区 / 触发器 - 靶单元关系、时序管理:

      暂定为 java 方向,在节点计算机上通过命令行操作,或由松耦合客户端设备通过浏览器向节点计算机发送操作请求;
      在此方向下,所需的数据管理组件、配置文件读写组件及相关技术均已具备,待详细设计后即可实施。

      主要数据行内容:
       数据 ID 
       关 / 场景 ID 
       触发区 / 触发器 ID 
       靶单元 ID 
       动作标志 
       (“出靶”、“收靶”、“开火”、“停火”等) 
       动作时刻 
       …… 

    2. 射击人、射击成绩管理与查看:

      // TODO

    3. 为射击人生成、记录射击成绩:

      // TODO