基于开放式体系架构的组件设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
组件数据的发送、接收
19
自定义服务
IModuleManager
Query(IOtherService::GetUID())
组件管理器 服务注册表 提供者组件 其他服务
RegisterService()
组件通信服务 参数配置服务 其他服务
ICommService IConfigureManager IOtherService
组件
通信服务
17
基本服务:通信服务
DDS通信模块
DDS通信工厂 DDS发送者 DDS接收者 3.打开 1.注册
组件通信服务 通信提供者
DDS:DDS工厂指针 UDP:UDP工厂指针
TRK组件
Recv();
组件通信表
TRK, DDSRecv, owstrk TRK, 320, DSP, UDPSend
void ProcessMessage() { // 异步消息处理 }
架构进程的主线程 调用组件接口
组件创建的线程 执行组件处理
通信服务的处理线程 进行消息处理
31
实现模块接口
继承DSTL提供的 IModule类
使用GUID生成器 生成唯一编号
按需要重写IModule 的接口函数
使用IMPL_DEFAULT_MODULE宏自动生成 GetModuleEntry入口函数,宏参数就是自己的模块类
GetNodeName
GetNodeID RegisterService
UnregisterService
反注册服务,参数与RegisterService相同,但动作相反。
16
接口查询
IQueriable
Query(ICommService::GetUID())
组件管理器
关联 IQueriable ICommService 返回
组 件
事件 信宿 属 性 事件 信源
4
4/23
为组件选一个好的架构 LA(Layer Architecture) SOA(Service-Oriented Architecture) OSGI(Open Service Gateway Initiative) SCA(Service Component Architecture) SCA(Software Communications Architecture ) OSA(Open System Architecture)
14
IModule接口的实现
函数 GetName GetID GetHelper Load Initialize Prepare Start Stop Cleanup Finalize Release 实现功能 返回模块名称 返回模块唯一编号 返回模块附属功能 向组件管理器注册服务;向其它服务注册指定的接口 初始化自身,服务查询 运行期准备 启动工作线程 停止工作线程,与Start相反 运行期清理,与Prepare相反 结束自身功能,与Initialize相反 反注册服务,与Load相反,并释放组件对象 调用阶段
Initialized?
[Successed]
Initialized
PreparedToWork
Started?
/Release(IModuleManager *) [Failed] /Release(IModuleManager *)
[Failed]
Unloaded
运行期
Final
结束期
12
组件设计:接口及服务
5
内容 相关背景介绍 开放式体系架构 组件设计 实例介绍
6
雷达开放式体系架构(ROSA)
7
7/23
开放式软件体系结构——首次设计
可 替 换 模 块 架 构 层 波束调度 雷达控制 实时系统架构 信号处理 并行计算架构 目标跟踪 数据记录 环境分析 显示 监控 配置 管理
数据分发与通讯架构 应用架构
基本接口 IModule IModuleHelper IQueriable IServiceManager IThread ITimer ... 用户自定义 ICommServer IProtocol IConfigure IScript ... 用户自定义
接口
扩展接口
自定义接口 基本服务
服务
扩展服务
初始期
运行期
结束期
15
IServiceManager接口说明
函数 GetArgument 功能说明 获取命令行参数。假设命令行为:DSHost --help -n trk -id=23,则 GetArgument(“--help”) ”true” GetArgument(“-n”) ”trk” GetArgument(“-id”) ”23” GetArgument(“trk”) NULL 对于命令行中没有指定的参数一律返回NULL 每一个DSHost进程叫做一个节点。GetNodeName函数获取节点名称。 节 点 名 由 命 令 行 参 数 “ -n ” 决 定 , 例 如 上 面 的 命 令 行 会 导 致 GetNodeName()”trk” , 若 命 令 行 中 不 指 定 该 参 数 , 则 默 认 返 回 “main” 获取运行节点唯一编号。该编号每次运行都不一样,且保证全局唯一, 一般用于系统动态管理。 注册服务。 sid:服务的唯一编号,一般是服务接口的接口编号。 pService:服务接口指针。 服务注册之后,所有组件都可通过服务接口编号对服务指针进行查询。
24
内容 相关背景介绍 组件 开放式体系架构 组件设计 实例介绍
25
创建组件项目
26
创建组件项目
27
创建组件项目
删除Visual Studio的专用代码,保证代码可移植性。 Dllmain.cpp中的DllMain函数是Windows DLL必需的,不 要删除,但在其它平台上不编译此文件
脚本目录
节点可以是组件,或者分系 统,也可以是其它任何一个 集成概念。 架构优先加载节点自定义的 配置、数据、日志,如果不 存在,则加载通用的。
23
组件化系统的运行模式
DSSignalProc DSTracker DSDisplay
DS
DS
DS
DS
外部网络

多线程、多进程任意组合 自主选举主进程负责本机器的内外通信 主进程异常退出后自动重新选举 主进程可以在业务进程中选择,也可以开启独立程序, 由业务进程的配置决定
Loaded
JustStopped
[Successed]
/Stop(IModuleManager *)
Working
Stopped?
/Initialize(IModuleManager *) /Cleanup(IModuleManager *) /Prepare(IModuleManager *) [Successed] /Start(IModuleManager *)
抽 象 层 系 统 层 硬 件 层
程序语言(C/C++)
Fra Baidu bibliotek
系统调用 平台抽象
通讯协议
操作系统层 硬件抽象 CPU GPU 硬件平台 DSP
硬件抽象层
FPGA
8
8/23
三只队伍并行研究
9
开放式软件体系结构——当前设计
坐标变换 相关处理 滤波处理 组件库 B显 点迹处理 A显 P显 数据记录 时间 管理
30
组件线程
Load(); Initialize(); Prepare(); Start(); Wait(); Stop(); Cleanup; Finalize(); Release();
void MyThread::Execute() { while(!NeedStop()) { // 组件处理 } }
自定义服务
13
基本接口
extern “C” IModule * __cdecl GetModuleEntry (const tchar *name);
class System «interface» IQueriable + + GetRuntimeClass(): const ClassInfo & Query(UID &): IQueriable *
«interface» ModuleHelper «interface» IModule + + + + + + + + + + + CleanUp(IServiceManager *): void Finalize(IServiceManager *): void GetHelper(): IModuleHelper * GetName(): const char * GetUID(): UID Initialize(IServiceManager *): boolean Load(IServiceManager *): void Prepare(IServiceManager *): boolean Release(IServiceManger *): void Start(IServiceManager *): boolean Stop(IServiceManager *): boolean + + + + GetReceiveIDGroup(): list<int> GetSendIDGroup(): list<int> GetVersion(): string PrintHelp(): void
32
实现接口
33
线程接口实现
继承DSTL提供的 Thread类
调用者组件
return Services[IOtherService::GetUID()]
组件之间的功能集成通过服务实现 • 组件数据交互通过组件通信服务实现 • 组件参数配置通过参数配置服务实现
• 组件还可提供其它自定义服务
20
组件描述配置文件
21
组件集成配置文件
22
组件运行部署
组件目录 配置目录 数据目录 节点自定义的配 置、数据、日志 可执行文件目录 日志目录
通信(RapidIO、RS232、RS422、以太网) 内、外存储(文件、数据库)
10/23
内容 相关背景介绍 组件 开放式体系架构 组件设计 实例介绍
11
组件生命周期分析
初始期
Initial 模块状态迁移图
[Failed] [Module is unloaded] /Load(IModuleManager *)
28
配置组件项目
设置包含路径为<DSLIB>\LibDS;<DSLIB>\LibDSTL; 禁用预编译头 本例中<DSLIB>= ..\DS,为相对路径
29
配置组件项目
设置库路径为<DSLIB>\Debug(Debug编译)或<DSLIB>\Release(Release编译) 设置附加库文件为“LibDS.lib;LibDSTL.lib;” 本例中<DSLIB>= ..\DS,为相对路径
应 用 层 集 成 框 架 中 间 件 软 件 环 境 硬 件 设 施
10
任务管理
数据处理
波束控制
显控处理
监控处理
干扰侦察
……
数据集成
组件集成
应用集成
脚本管理
部署管理
组件监控
数据总线(DDS)
服务总线(SBS)
数据库访问
数据记录服务
……
操作系统
数据库管理系统
防病毒软件
驱动程序
……
处理器(X86、PowerPC、龙芯、申微) 图形处理器(ATI、Nvida)
基于开放式体系架构组件设计
内容 相关背景介绍 开放式体系架构 组件设计 实例介绍
2
农村与城市的启示
如何从农村走向城市?
3
软件模块化的追求 降低耦合度,提升内聚性

非直接 耦合 数据 耦合
耦合性
特征 耦合 控制 耦合 公共环 境耦合

内容 耦合

组件引用
模块独立性

提供者 端口
使用者 端口
4.使用 4.使用
Send(320, &track, sizeof(track));
UDP通信模块
UDP通信工厂 UDP发送者 UDP接收者
1.注册 3.打开
2.加载
TRK, 320, DSP:UDP …… OWS, 430, TRK: DDS, owstrk
一致的通信,确保组件的独立
18
基本服务
«interface» IServ iceManager + + + + + GetArgument(char *): const char * GetNodeID(): const UID & GetNodeName(): const char * RegisterService(UID &, IQueriable *): boolean UnRegisterService(UID &, IQueriable *): boolean
相关文档
最新文档