基于PREEvision的UML设计

众所周知,PREEvision是一款强大的电子电气架构协同开发及管理软件,可以很好地帮助架构工程师完成架构开发工作,其功能包括需求管理、定义功能逻辑、系统软件开发、网络设计、线束设计及整体工程的产品线管理和变形管理等。随着工程师们越来越重视系统工程分析,PREEvision也逐渐丰富 UML相关设计语言。UML(Unified Modeling Language)统一建模语言,可用于系统分析和设计,是辅助工程师进行思考和沟通的工具。

在软件行业,UML系统开发初期需要做需求获取、需求分析等工作,这里面的需求获取是系统设计的源头,需求分析是对系统设计前期的验证和过渡,包含业务用例、概念用例等分析,但是对于整车功能的设计而言,输入多为制定好的功能列表,前期的需求已经相对明确,架构工程师只要从系统分析阶段入手就可以了。

接下来我们将以“后视镜折叠功能”为例,了解在PREEvision中是如何应用UML进行分析建模的。

定义用例

作为系统需求分析的起点,通常以功能为用例,例如后视镜折叠是一个功能,而折叠方式是功能的实现方式,可以把手动折叠后视镜和自动折叠后视镜作为后视镜折叠功能的继承,如图所示:

描述用例

描述系统用例有两种方式:1.用例规约 2.用例场景(活动图)

用例规约是对用例的具体描述,包括触发条件、执行步骤等,可以在Use Case构件的Description或自定义属性中描述,如下图对“自动折叠后视镜”用例进行描述:

也可以用活动图去描述用例,该种方式更为直观,能够体现功能的执行流程。同样,根据“自动折叠后视镜”用例画出活动图。因为自动折叠后视镜的前提是完成锁车,所以我们分为两个活动图去设计,也便于锁车活动被其他功能调用,如图所示:

左侧自动折叠后视镜活动图中的“执行锁车”Action可以关联右侧的遥控闭锁活动图;在PREEvision中可以找到两者的调用关系,如图所示:

假设自动折叠后视镜功能组成部分为“钥匙”、“锁系统”、“后视镜”、“后视镜控制”,那么可以将活动图分泳道显示,如图所示:

这里的泳道叫做Activity Partition,可以将其与逻辑模块/软件模块/Class进行关联,代表Partition的提供者。

类图设计

类图用于描述系统中各类之间的交互关系,帮助工程师简化对系统的理解,实现系统的结构化设计。从上面的活动图分析中可以得到相关的类及其属性参数,如图所示:

定义逻辑模块

针对类图的分析,可以整理规划出逻辑模块,并根据类的属性方法、类之间的交互关系定义逻辑接口。该部分工作类似于UML设计中的类到组件的映射,但PREEvision已经有非常完备的逻辑图,逻辑模块可以代表类和接口的集合,也可以用软件层的SWC去承接设计,但是个人比较习惯用逻辑层进行初步的接口定义,到软件层再进行细化设计。

接着上面“自动折叠后视镜”功能继续分析,在逻辑层有三种常用逻辑类型,输入(Sense)、控制(Logical Function)、输出(Actuation),我们把上面的Class按照这三种类型进行分类,“门”、“钥匙”、“电源模式”、“锁”都为Sense,“门锁控制”、“后视镜控制”属于Logical Function,“后视镜”由于既有状态监控又有驱动执行,所以可以把它拆分为Sense和Actuation两个逻辑模块,如图所示:

其实在前面类的分析时也可以把后视镜传感和执行分别设计成两个类,门和锁也可以划为一个逻辑模块,这个就取决于工程师个人的设计思路了。

设计逻辑图

将定义好接口的逻辑模块整理连接,得到逻辑框图,如图所示:

软件架构设计

根据逻辑框图建立SWC,创建其接口信息和映射关系,完成软件架构设计,如图所示:

软件架构设计完成后就可以映射到ECU,通过信号路由生成信号,通讯工程师可以基于此进行通讯设计,这里就不展开叙述了。

状态机设计

在PREEvision中可以针对某一个逻辑/软件模块分析其不同状态的转换关系,这里我们对软件模块“Rearview mirror control”进行状态分析。确认好模块所有的状态,并定义模块之间的现态/次态关系以及转换的触发事件、监护条件、执行动作等信息,完成模型如图所示:

状态转换可以定义的信息如图所示:

状态可定义的信息如图所示:

在系统分析过程中,可能会得到一些新的系统需求,我们可以逐步完善需求库,并做好追溯关系。

系统工程设计有很多的方法和流程,包括OOSEM、Arcadia、Harmony SE、State Analysis、MagicGrid等,但是不同的企业有不同的组织结构和工作流程,所以必然不能照搬硬套,需要结合实际情况去定制化裁剪或者探索出适合自己的系统设计方法。

支持系统工程语言的工具也有很多,比如EA、Rhapsody、Umodel、Agilian等,但是这些工具在汽车电子电气架构设计方面局限性较大,对于整车厂而言需要工具支持的不仅仅是需求分析,还有软件架构设计、硬件设计、整车通讯设计、功能安全、测试管理等,因此需要的是能够覆盖整车开发V流程的工具,那么PREEvision则可以满足以上V流程的设计和管理。

本篇短文只是简单介绍了PREEvision在UML建模方面的应用,若想获取更加详细的建模方法,可以后台留言或将需求发送至东信创智市场邮箱market@dotrustech.com,期待与您进一步沟通。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/943757.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Azure Function 解决跨域问题

这边前端call本地部署的azure function出现了跨域问题,搜索一下解决方案 直接修改local.setting.json,在其中添加CORS配置为通配符”*”,就行了 local.settings.json {"IsEncrypted": false,"Values": {"PYTHON_E…

Ubuntu离线安装Docker容器

前言 使用安装的工具snap安装在沙箱中,并且该沙箱之外的权限有限。docker无法从其隔离的沙箱环境访问外部文件系统。 目录 前言准备环境卸载已安装的Docker环境快照安装的Dockerapt删除Docker 安装docker-compose下载执行文件将文件移到 /usr/local/bin赋予执行权限…

CMake 构建项目并整理头文件和库文件

本文将介绍如何使用 CMake 构建项目、编译生成库文件,并将头文件和库文件整理到统一的目录中以便在其他项目中使用。 1. 项目结构 假设我们正在构建一个名为 rttr 的开源库,初始的项目结构如下: D:\WorkCode\Demo\rttr-master\|- src\ …

JAVA HTTP压缩数据

/*** 压缩数据包** param code* param data* param resp* throws IOException*/protected void writeZipResult(int code, Object data, HttpServletResponse resp) throws IOException {resp.setHeader("Content-Encoding", "gzip");// write到客户端resp…

公路边坡安全监测中智能化+定制化+全面守护的应用方案

面对公路边坡的安全挑战,我们如何精准施策,有效应对风险?特别是在强降雨等极端天气下,如何防范滑坡、崩塌、路面塌陷等灾害,确保行车安全?国信华源公路边坡安全监测解决方案,以智能化、定制化为…

uniapp 微信小程序 数据空白展示组件

效果图 html <template><view class"nodata"><view class""><image class"nodataimg":src"$publicfun.locaAndHttp()?localUrl:$publicfun.httpUrlImg(httUrl)"mode"aspectFit"></image>&l…

41.欠采样技术下变频不能用与跨两个nyquist的情况下

当接收到的信号位于同一nyquist区间时&#xff0c;信号被成功的折叠到了第一Nyquist区间中。 当接收信号位于两个或多个采样区间时&#xff0c;最后多个区间的信号都会被折叠到第一Nyquist区间中造成信号的重叠。

AI新书推荐:深度学习和大模型原理与实践(清华社)

本书简介 在这个信息爆炸、技术革新日新月异的时代&#xff0c;深度学习作为人工智能领域的重要分支&#xff0c;正引领着新一轮的技术革命。《深度学习和大模型原理与实践》一书&#xff0c;旨在为读者提供深度学习及其大模型技术的全面知识和实践应用的指南。 本书特色在于…

Vue项目中env文件的作用和配置

在实际项目的开发中&#xff0c;我们一般会经历项目的开发阶段、测试阶段和最终上线阶段&#xff0c;每一个阶段对于项目代码的要求可能都不尽相同&#xff0c;那么我们如何能够游刃有余的在不同阶段下使我们的项目呈现不同的效果&#xff0c;使用不同的功能呢&#xff1f;这里…

Ubuntu 22.04.5 修改IP

Ubuntu22.04.5使用的是netplan管理网络&#xff0c;因此需要在文件夹/etc/netplan下的01-network-manager-all.yaml中修改&#xff0c;需要权限&#xff0c;使用sudo vim或者其他编辑器&#xff0c;修改后的内容如下&#xff1a; # Let NetworkManager manage all devices on …

NeeView(图像查看器) v42.4

NeeView是一款功能强大的图像查看器&#xff0c;它为用户提供了一种独特的方式&#xff0c;可以像翻阅书籍一样轻松地浏览文件夹中的图像。这款软件支持多种标准的兼容图像格式&#xff0c;包括bmp、jpg、gif、tiff、png、ico、svg以及WIC兼容图像&#xff0c;这意味着用户可以…

动态规划子序列问题系列一>等差序列划分II

题目&#xff1a; 解析&#xff1a; 1.状态表示&#xff1a; 2.状态转移方程&#xff1a; 这里注意有个优化 3.初始化&#xff1a; 4.填表顺序&#xff1a; 5.返回值&#xff1a; 返回dp表总和 代码&#xff1a; public int numberOfArithmeticSlices(int[] nums) {in…

代码随想录Day52 101. 孤岛的总面积,102. 沉没孤岛,103. 水流问题,104.建造最大岛屿。

1.孤岛的总面积 卡码网&#xff1a;101. 孤岛的总面积(opens new window) 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域&#xff0c;且完全被水域单元格…

【高阶数据结构】红黑树模拟实现map、set

红黑树模拟实现map、set 1.源码及框架分析2.模拟实现map和set1.支持 insert 的实现2.支持 iterator 的实现3.map支持 operator [] 的实现 3.总代码1.RBTree.h2.Myset.h3.Mymap.h4.Test.cpp 1.源码及框架分析 SGI-STL30版本源代码&#xff0c;map和set的源代码在map/set/stl_ma…

邮箱手机号脱敏

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 输入框的脱敏&#xff0c;当输入的时候显示正常&#xff0c;失去焦点部分显示**** 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 脱敏可以封装 一下成为一个方法&#xff0c;挂…

基于Oauth2的SSO单点登录---前端

Vue-element-admin 是一个基于 Vue.js 和 Element UI 的后台管理系统框架&#xff0c;提供了丰富的组件和功能&#xff0c;可以帮助开发者快速搭建现代化的后台管理系统。 一、基本知识 &#xff08;一&#xff09;Vue-element-admin 的主要文件和目录 vue-element-admin/ |--…

【Artificial Intelligence篇】AI 携手人类:共铸未来创作新纪元

引言&#xff1a; 随着科技的飞速发展&#xff0c;人工智能已逐渐渗透到各个领域&#xff0c;尤其是在创作领域&#xff0c;其与人类的合作展现出了前所未有的可能性和潜力。从艺术作品的生成到文学作品的创作&#xff0c;从复杂软件的开发到创新设计的构思&#xff0c;AI 正在…

Easy-Trans反向翻译+Excel导入最佳实践

1、概述 实现用户excel上传、解析、对于用户输入的中文翻译为字典码或者id&#xff0c;实现用户输入的参数校验&#xff0c;最后入库。如果用户输入的参数有问题&#xff0c;返回校验结果给前端。 excel解析使用My-Excel组件&#xff0c;校验使用hibernate-validator&#xff…

OpenCV-Python实战(6)——图相运算

一、加法运算 1.1 cv2.add() res cv2.add(img1,img2,dstNone,maskNone,dtypeNone) img1、img2&#xff1a;要 add 的图像对象。&#xff08;shape必须相同&#xff09; mask&#xff1a;图像掩膜。灰度图&#xff08;维度为2&#xff09;。 dtype&#xff1a;图像数据类型…

Leetcode打卡:查询数组中元素出现的位置

执行结果&#xff1a;通过 题目 3159 查询数组中元素出现的位置 给你一个整数数组 nums &#xff0c;一个整数数组 queries 和一个整数 x 。 对于每个查询 queries[i] &#xff0c;你需要找到 nums 中第 queries[i] 个 x 的位置&#xff0c;并返回它的下标。如果数组中 x 的出…