标签:基本 cmak 系统设计 处理 平面 大小 component media 继承
一、概述
本文章主要针对工程实践《基于阿里云的MESH网络数据采集平台》,对其进行软件系统分析与设计,最终形成软件系统概念原型。
ESP-MESH 是建立在 Wi-Fi 协议之上的网络协议。ESP-MESH 允许散布在较大物理区域(室内 和室外)中的众多设备(以下称为节点)在单个 WLAN(无线局域网)下互连。ESP-MESH 具 有自组织性和自修复性,意味着可以自主构建和维护网络。通过MESH网络构建的数据采集平台能够满足多场景的应用需求,解决现有数据采集网络的结构问题。
二、软件设计方案
软件产品庞大复杂,设计类图只是其中一个用例得到的设计结果,我们需要对每一个用例进行分析和设计,最终再将各用例得到的设计结果综合成一个软件产品的整体设计方案。其中涉及两个基本的方法:分析(analysis)和综合(synthesis)。
分析是分解大问题变成易于理解的小问题。比如用例建模是将错综复杂的需求分解成一个一个的用例。在分析的过程中除了“分而治之”的切分分解的方法外,抽象方法的运用是一个关键。
综合是将一个个小问题的解决方案组合起来构建软件的整体解决方案。我们对每一个用例的关键步骤进行对象交互建模逐步形成了用例对应的解决方案,如何将多个用例的小解决方案组合起来构建软件整体设计方案?这在软件设计中是一个非常有挑战性的问题,一般我们通过参考已有的软件设计模式提供一个思路从而综合出一个软件整体解决方案。
1.软件结构特点
(1)设计模式
设计模式的本质是面向对象设计原则的实际运用总结出的经验模型。对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解的基础上才能准确理解设计模式。
常用的设计模式有:单例模式、原型模式、建造者模式、代理模式、适配器模式、装饰模式、外观模式、享元模式、策略模式、命令模式。
由于此工程实践是对MESH网络结构的研究与应用,项目所应用的设计模式为建造者模式。
建造者(Builder)模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。主要应用于复杂对象中的各部分的建造顺序相对固定或者创建复杂对象的算法独立于各组成部分。
将ESP-MESH自组网这一较为复杂的功能,分为信号检测、节点选择、路由表构建、故障处理等多个相对简单的部分,分别实现其子功能,最后协同构成自组网这一复杂功能。
(2)软件架构风格与策略
软件架构模型是在高层抽象上对系统中关键要素的描述,而且表现出抽象的层次结构。常见的软件架构有:三层架构、MVC架构、MVVN架构
三层架构:层次化架构是利用面向接口编程的原则将层次化的结构型设计模式作为软件的主体结构
MVC架构:MVC架构即软件的整体结构主要表现为MVC模式(Model-View-Controller)
MVVM架构:MVVM即 Model-View-ViewModel
较为复杂的系统中的软件单元,仅仅从平面展开的角度进行模块化分解是不够的,还需要从垂直纵深的角度将软件单元按层次化组织,每一层为它的上一层提供服务,同时又作为下一层的客户。
本系统采用的MESH节点就是采用的就是层次化的软件架构风格,如同通信网络中的OSI参考模型。在OSI参考模型中每一层都将相邻底层提供的通信服务抽象化,隐藏它的实现细节,同时为相邻的上一层提供服务。
2.接口API
①路由表API:
- esp_err_t esp_mesh_get_routing_table(mesh_addr_t *mac, int len, int *size) //获取一个节点的路由表
- int esp_mesh_get_routing_table_size(void) //获取一个路由表的大小
- esp_err_t esp_mesh_get_subnet_nodes_num(constmesh_addr_t *child_mac, int *nodes_num) //获取子路由表的大小
- esp_err_t esp_mesh_get_subnet_nodes_list(constmesh_addr_t *child_mac, mesh_addr_t *nodes, int nodes_num) //获取某个子节点的子路由表
②指定根节点API:
- esp_err_tesp_mesh_fix_root(bool enable) //启用网络固定根节点设置
- esp_err_t sp_mesh_set_parent(const wifi_config_t *parent, constmesh_addr_t *parent_mesh_id, mesh_type_t my_type, int my_layer) //为设备设置一个指定的父级节点
③根节点切换API:
- esp_err_tesp_mesh_waive_root(constmesh_vote_t *vote, int reason) //使根设备放弃其网格根状态
④信道切换API:
- esp_err_tesp_mesh_switch_channel(const uint8_t *new_bssid, int csa_newchan, int csa_count) //切换信道
三、软件概念原型
1.分解视图 Decomposition View
分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构(breakdown structure)特点
将MESH网络数据采集系统分解为三个子系统,再逐一细分,具体如下图所示:
2.依赖视图 Dependencies View
依赖视图展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。
以MESH根节点为例,分析根节点模块与其他MESH功能模块的依赖关系,如下图所示:
3.执行视图 Execution View
执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。
4.实现视图 Implementation View
实现视图是描述软件架构与源文件之间的映射关系。比如软件架构的静态结构以包图或设计类图的方式来描述,但是这些包和类都是在哪些目录的哪些源文件中具体实现的呢?一般我们通过目录和源文件的命名来对应软件架构中的包、类等静态结构单元,这样典型的实现视图就可以由软件项目的源文件目录树来呈现。
5.部署视图 Deployment View
部署视图是将执行实体和计算机资源建立映射关系。这里的执行实体的粒度要与所部署的计算机资源相匹配,比如以进程作为执行实体那么对应的计算机资源就是主机,这时应该描述进程对应主机所组成的网络拓扑结构,这样可以清晰地呈现进程间的网络通信和部署环境的网络结构特点。当然也可以用细粒度的执行实体对应处理器、存储器等。
6.工作任务分配视图 Work-assignment View
工作分配视图将系统分解成可独立完成的工作任务,以便分配给各项目团队和成员。工作分配视图有利于跟踪不同项目团队和成员的工作任务的进度,也有利于在个项目团队和成员之间合理地分配和调整项目资源,甚至在项目计划阶段工作分配视图对于进度规划、项目评估和经费预算都能起到有益的作用。
四、软件系统运行环境和技术选型
1.硬件设施
本系统运行在乐鑫科技的ESP-WROVER-KIT开发板上。ESP-WROVER-KIT 可满足4.5MB内存和双核240兆赫兹CPU的高性能要求,搭载先进的多协议通用串行总线桥(FTDI FT2232HL),允许开发人员直接通过 USB接口,使用 JTAG 对 ESP32 进行调试,无需额外的 JTAG 调试器。ESP-WROVER-KIT还提供板载高速微显卡接口、VGA摄像头接口,以及3.2英寸SPI液晶面板和输入/输出扩展功能。旨在协助用户快速开发物联网 (IoT) 应用,可满足用户对 Wi-Fi、蓝牙、低功耗等方面的要求。
2.软件
FreeRTOS是驱动 ESP32双核的操作系统,提供了任务创建、任务间通信(信号量、信息队列、互斥量)、中断和定时器等机制。ESP-IDF建立在FreeRTOS基础之上,是乐鑫物联网开发框架,可为在 Windows、Linux 和 macOS 系统平台上开发 ESP32 应用程序提供工具链、API、组件、工作流和开发示例的支持。
3.开发工具
C、Python、Git、交叉编译器、CMake 和 Ninja 编译工具
五、系统概念原型的核心工作机制
概念原型是一种虚拟的、理想化的软件产品形式。
软件架构代表了软件系统的整体设计结构,是所有这些视图的集合。我们通过结合不同角度的视图之间的映射关系和重叠部分,从而深刻理解软件架构内在的一致性和完整性,这就是系统概念原型。
通过以上对此工程实践进行的软件设计分析,可以总结出此项目的概念原型:MESH节点通过自组网的方式构建MESH网络,各节点将获取的数据传输给MESH网的MESH根节点,根节点通过连接路由器和云平台进行信息交互,,以达到数据的远程展示和对节点设备的远程控制功能。
六、总结
此次博客是基于对软件系统设计与分析的学习,针对本人工程实践总结形成软件系统概念原型。由于项目是MESH网络协议在嵌入式MESH节点下的应用与研究,加之本人对这方面的学习尚有很多不足,无法进行较好的分析。望能指出文章中的错误。在深入学习后必将加以改正,谢谢指导。
软件系统设计方案——基于阿里云的MESH网络数据采集平台
标签:基本 cmak 系统设计 处理 平面 大小 component media 继承
原文地址:https://www.cnblogs.com/jtwup/p/14208028.html