[车联网/计算机网络] Autosar 的 `ARXML` 配置数据库文件协议
序: 缘起 ARXML
概述 : Autosar 的 ARXML
配置数据库文件协议
ARXML 文件
ARXML
文件: AUTOSAR系统描述文件,后缀*.arxml
- 实质是一个
XML
文件,一般通过Autosar
标准的XSD
进行约束- 可用专用工具
Artop
,Systemdesk,Matlab,DaVinci developer,Autosar Explorer…生成。- 和
XML
、DBC
文件一样,ARXML
是一个通用的配置/数据库文件。所以,这里只需了解
ARXML
文件的结构(方便在将ARXML
导入工具前,能够检查一些基本的错误),无需想着用过多的时间手动生成它(生成的工作,专业工具已经帮你做解决了)。
XML
XML简介
XML
: 可扩展标记语言(eXtensible Markup Language
),是是一种非常灵活的标记语言,没有固定的标签,所有的标签,在符合XML命名规则的基础上,都可以自定义,但是在写标签名的时候一定要有含义。
通常,
XML
被用于信息的记录和传递。因此,XML
经常被用来充当“配置文件”和“数据库”。
- 一般可通过“Eclipse”和“网页浏览器”等软件工具打开
XML
文件。
将
ARXML
文件的后缀名修改为XML
,可以通过这些工具打开。
XML 文件数据结构
以下是一个简单Demo
<?xml version="1.0" encoding="utf-8"?>
<books>
<!-- 图书信息 -->
<book id="book_1">
<author>张三</author>
<title>XML高级教程</title>
<description>介绍XML和XML实战</description>
</book>
</books>
- XML文档是树状结构;
- 第1行:XML声明。 必须放在第一行,第一列,声明语句之前,不能有任何的空格和注释。定义了XML版本和编码信息。其中,版本永远都是1.0;编码方式一般都使用UTF-8(该编码支持中文标签),编码信息不区分大小写。
- 第2行:根元素 :
<books>
。XML有且仅有一个根元素。元素由开始标签、元素内容、结束标签组成,没有被其它元素包围的元素称为根元素;- 第3行:注释的写法 :
<!-- 注释内容 -->
,但不能嵌套使用。- 第4行:属性 :
id="book_1"
。属性必有值,值必须使用引号(单引号,双引号)。属性其实是描述标签一些额外的信息,一个标签可以有多个属性。可以将属性看为元素的另一种写法。- 第5~7行:表示元素。
- XML中的标签区分大小写,对应的开始标签和结束标签必须大小写一致。
- 标签命名:普通字符有:字母,数字,-中横线,_下划线,.点号,数字不能作为首字母出现等。大段内容有许多特殊符号内容,使用转义,如下的例子:了看可是ljlkdjlsjd lsksj lsjdlks d]]>
- XML中的标签是成对的,而且要正确嵌套:标签可以嵌套,但不可以交叉嵌套。
- 实际的项目当中,第4~8行这部分经常是重复的。
- 特殊符号使用符号实体:
- 单引号:用
&apos
表示- 双引号:用
"
表示- 空格:用
 
表示&
符号:用&
表示>
符号:用>
表示<
符号:用<
表示
- 如下根元素下,可以存在多个并列的元素:
<?xml version="1.0" encoding="utf-8"?>
<books>
<!-- 图书信息 -->
<book id="book_1">
<author>张三</author>
<title>XML高级教程</title>
<description>介绍XML和XML实战</description>
</book>
<book id="book_2">
<author>李四</author>
<title>XML中级教程</title>
<description>介绍XML和XML实战</description>
</book>
</books>
有效的XML
XML
首先必须是格式良好的,一般使用DTD
和XSD
(XML Schema
)定义语义约束。ARXML
文件使用XSD
进行约束。
认识DTD
DTD简介
DTD
全称:Document Type Definition
用于约束XML的文档格式,保证XML是一个有效的XML。定义好接口和格式,方便多个人同时开发。
DTD
可以分为两种:内部DTD
;外部DTD
DTD
和XML
之间的关系:
- 类(人类)和对象(我)
- 数据库(表)和行(一条记录)
DTD
的缺点:
DTD
约束XML
的时候,不能对XML
中数据类型做详细的限定。DTD
约束有自己的语法,书写时必须遵守DTD
的语法;- 一个
XML
文件中只能引入一个DTD
约束,而无法通过多个DTD
文件来约束同一个XML
文件。
内部的 DOCTYPE 声明
- 内部DTD的定义,语法如下:
a)
b) 元素声明语法:
<!ELEMENT 元素名 (子元素[,子元素...])>
c) 数量词:
+:表示元素出现至少出现一次
?:表示元素出现0次或1次
*:表示元素出现任意次。举例<!ELEMENT books (book*)>
d) 属性声明语法:
- 属性类型:CDATA,表示字符数据(character data)
- 默认值:
#REQUIRED,表示必须出现
#IMPLIED,表示不是必须出现
- 带内部DTD的完整XML:
<?xml version="1.0" encoding="utf-8"?>
<!-- 声明内部DTD -->
<!DOCTYPE books [
<!ELEMENT books (book+)>
<!ELEMENT book (author, title, description)>
<!ATTLIST book id CDATA #REQUIRED >
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT description (#PCDATA)>
]>
<books>
<!-- 图书信息 -->
<book id="book_1">
<author>张三</author>
<title>XML高级教程</title>
<description>介绍XML和XML实战</description>
</book>
<book id="book_2">
<author>李四</author>
<title>XML中级教程</title>
<description>介绍XML和XML实战</description>
</book>
</books>
外部的 DOCTYPE 声明
- 创建一各独立的外部
DTD
文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<!—声明内部DTD-->
<!ELEMENT books (book+)>
<!ELEMENT book (author, title, description)>
<!ATTLIST book id CDATA #REQUIRED >
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT description (#PCDATA)>
- 在XML中引入外部DTD文件,完整的语法如下:
<!DOCTYPE 根元素 SYSTEM "文件名">
- 带外部DTD的完整XML:
<?xml version="1.0" encoding="utf-8"?>
<!-- 声明外部DTD -->
<!DOCTYPE books SYSTEM "books.dtd">
<books>
<!-- 图书信息 -->
<book id="book_1">
<author>张三</author>
<title>XML高级教程</title>
<description>介绍XML和XML实战</description>
</book>
<book id="book_2">
<author>李四</author>
<title>XML中级教程</title>
<description>介绍XML和XML实战</description>
</book>
</books>
认识XSD
XSD简介
XSD
全称:XML结构定义(XML Schema Definition
),是DTD
的替代者。不仅可以定义
XML
文档的结构,还可以规范XML
文档的内容。XSD
本身也是XML
文档。XSD
采用XML
文档来定义语义约束,比DTD
要复杂一些,但是功能强大的多:
- 定义可出现在文档中的元素;
- 定义可出现在文档中的属性;
- 定义哪个元素是子元素;
- 定义子元素的次序;
- 定义子元素的数目;
- 定义元素是否为空,或者是否可包含文本;
- 定义元素的数据类型;
- 定义元素和属性的默认值以及固定值。
- 允许开发这自定义数据类型
- 可读性强
- 可针对未来需求进行扩展
- 一个XML中可以引入N个Schema进行约束。
- 书写的时候,它遵守XML的语法规则,它的文件扩展名
XSD
。
XSD举例
这一章节仅做了解,无需过多深入。知道XML和XSD的之间的关系就行。
book.xsd
文件
<?xml version="1.0" encoding="utf-8">
<!--
Schema文件中使用W3C对Schema文件的约束信息
不管是XML还是XSD文件,都需要被约束
在根标签上使用xmls属性(xmlns="http://www.w3.org/2001/XMLSchema")引用W3C的约束
在schema中使用
targetNamespace定义当前schema被xml引用是的名称(名称空间);
targetNamespace="http://www.example.org/book"定义当前的schema的名称为:http://www.example.org/book值,这个值可以随便写,用来标识约束文件
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/book"
xmlns:tns="http://www.example.org/book"
elementFormDefault="qualified">
<!--
在Schema文件中使用element标签来定义xml中可以书写的标签名
-->
<element name="books">
<!--
在books中的子标签,需要在Schema中定义的books的标签内部嵌入element来定义。
简单标签:如果一个标签没有子标签,也没有属性,这个标签是一个简单标签。
复杂标签:如果标签拥有属性或者拥有子标签,那么这个标签就是一个复杂标签。
在element标签中
complexType来声明当前element定义的那个标签是一个复杂标签
simpleType来声明当前element定义的那个标签是一个简单标签
-->
<complexType>
<!--在complexType使用sequence定义子标签之间的顺序-->
<sequence>
<element name="book">
<complexType>
<sequence>
<element name="name" type="string"></element>
<element name="price" type="double"></element>
<element name="author" type="string"></element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
book.xml
文件
<?xml version="1.0" encoding="utf-8">
<!--
在根标签上使用xmls属性(xmlns="http://www.example.org/book")引用Schema的约束
当引用多个约束时,需要在xmlns后追加
xmlns:context="***"
xmlns:p="***"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
声明当前的XML文件是schema一个实例(当前这是一个自定义的xml文件,是被某个schema文件约束)
xsi:schemaLocation="http://www.example.org/book book.xsd"引用schema的位置,其中的“http://www.example.org/book”要与XSD中的targetNamespace里的字符串保持一致
-->
<books
xmlns="http://www.example.org/book"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/book book.xsd"
>
<book>
<name>XML高级教程</name>
<price>59</price>
<author>张三</author>
</book>
</books>
应用场景
CASE: 创建一个Classic CAN(经典CAN2.0)的系统描述ARXML文件
参考文献
0 序言
AUTOSAR System Description Network Explorer
是一个文件编辑器,支持可视化和编辑系统描述的AUTOSAR
系统描述文件(.arxml
)和ECU
摘录的通信内容
- 它支持架构版本4.0.3、4.1.2、4.2.1、4.2.2和4.3.0。
- AUTOSAR系统描述(
ARXML
)文件是基于XML的文件格式,描述网络通信的元素基于AUTOSAR系统模板。- 其界面如下:
1 创建一个AUTOSAR系统描述
- 双击“AUTOSAR Explorer 2.0”快捷方式(见图1-1),打开“AUTOSAR System Description Network Explorer”(见图1-2)。
图1-1
图1-2
- 在菜单栏中,依次选择
File
-->New File …
(见图1-3),弹出“Create New File”对话框。接着在该对话框中选择项目需要的“Autosar格式版本”和“物理层的通信方式”,单击“OK” (见图1-4)。
图1-3
图1-4
注意:
- 创建完成后,就无法再修改“Autosar格式版本”。
- 根据所选类型创建一个具有通信Cluster和物理通道的AUTOSAR系统描述文件(见图1-5)。单击“保存”按钮,选择合适的路径,并命名这个描述文件(见图1-6)。
图1-5
图1-6
2 物理层命名以及创建ECU
- 完成第1章后,重新打开
Test_CAN.arxml
(见图2-1),选中通信Cluster,在其右侧的属性视图中,重命名这个Cluster,并设置这个CAN通信的波特率(见图2-2)。
图2-1
图2-2
- 创建ECU方法,有两种:
- 菜单栏中,依次选择“Edit”à“Create Ecu…”(见图2-3);
- 工具栏中,单击“Create ECU”(见图2-4)。
图2-3
图2-4
- 弹出“New ECU”对话框(见图2-5)。
图2-5
- 重命名ECU,单击“OK”(见图2-6)。
图2-6
- 完成后的效果如下(见图2-7):
图2-7
3 新建一个Frame
- 创建Frame方法,有三种:
+先在“导航栏”中选择“Frames”,然后在主视图中鼠标右键,在上下文中选择“Create Frame…”(见图3-1);
图3-1
- 依次在菜单栏中选择“Edit-->“Create Frame…”(见图3-2);
图3-2
- 工具栏中,单击“Create Frame”(见图3-3)。
图3-3
- 弹出“Edit Frame”对话框(见图3-4)。
- “Edit Frame”对话框修改如下(见图3-5)。
图3-5
- 注意:
- 1、“Edit Frame”对话框中的“Name”,可以理解为“DBC中Message名称”;
- 2、“Edit Frame”对话框中的“Length”表示帧的数据域长度,单位Byte;
- 3、“Edit Frame”对话框中的“ID”表示CAN_ID,十六进制表示;
- 4、“Edit Frame”对话框中的“Addressing Mode”有:Standard(标准帧)和Extended(扩展帧)两个选项,表示“帧类型”,可以理解为“DBC中Message里的Type”;
- 5、“Edit Frame”对话框中的“CAN FD Supported”选项:不勾选,表示是经典CAN2.0帧;勾选,表示是CAN FD帧;
- 6、“Edit Frame”对话框中的“Sender/Receiver Relations”用来定义该Frame帧的发送和接收ECU。图3-6表示该Frame帧的发送节点是OBC;图3-7表示该Frame帧的接收节点是OBC。
图3-6
图3-7
- 完成后的效果如下(见图3-8) ,按照此方法可以添加其它的Frame帧:
图3-8
4 新建一个PDU(协议数据单元)
- PDU的概念在DBC中是没有的。
- PDU(Protoco> +Data Unit:协议数据单元)代表在帧上传输的数据单元。
- 它包含在协议栈中交换的有效负载和控制信息。
- 根据PDU的应用和AUTOSAR格式版本,AUTOSAR模型可以区分不同类型的PDU。
- 实际的使用:将Signal信号映射的PDU当中。
- 接着图3-5,在PDU-Frame-Mapping中,选择“Signal-I-PDU” (见图4-1),弹出“Edit Signal-I-PDU”对话框,根据需要编辑相关的信息(见图4-2)。
图4-1
- 注意:常用的有以下PDU。
- Signal-I-PDU:
- N-PDU: 网络层PDU。由传输协议模块用于分段I-PDU;
- NM-PDU:
- XCP-PDU:
- General-Purpose-I-PDU(XCP):
- multiplexed I-PDU: I-PDU在两个COM I-PDU中组装在IpduM模块中, 将Signal-I-PDU映射到静态和动态段。
- DCM-I-PDU:
图4-2
- 注意:
- “Edit Signal-I-PDU”中的信息一般默认不修改。
5 新建一个signal
- 接着图3-5,在Mapped Signals中,选择“Signal” (见图5-1),弹出“Edit Signal”对话框(见图5-2)。
图5-1
图5-2
- 根据需要编辑相关的信息(见图5-3,图5-4,图5-5,图5-6)。
图5-3
图5-4
图5-5
图5-6
- 注意:
- “Edit Signal”对话框中的“Name”,可以理解为“DBC中Signal名称”;
- “Edit Signal”对话框中的“Length”,表示信号的长度,单位Bit;
+“Edit Signal”对话框中的“Data Type Policy”,对于每个ISignal,都有一个DataTypePolicy定义,在大多数情况下将确定信息源。
+“Edit Signal”对话框中的“Position[Bit]”,表示信号的起始位;
+“Edit Signal”对话框中的“Update Bit”,表示信号的更新位;
+“Edit Signal”对话框中的“Byte Order”,表示信号的字节顺序:Intel,Motorola,Opaque;
+“Edit Signal”对话框中的“Transfer Property”,表示信号的触发方式:Pending,Triggered,TriggeredOnChange,TriggeredWithoutRepetition,TriggeredOnChangeWithoutRepetition。相关的解释参加AUTOSAR COM标准;
+“Edit Signal”对话框中的“Sender/Receiver Relations”,表示该信号是接收信号,还是发送信号,或者及不接收也发不发送;
+“Edit Signal”对话框中的“Base Type”,定义了信号的一种编码:数据类型名称,符号类型(是否有符号),长度。当多个信号表示的物理含义相同,且信号长度相同时,可以在下拉框中选择相同的Base Type;
+“Edit Signal”对话框中的“Computation Method”,描述了将信号传输的原始值转换为物理值的转换规则,信号的范围,信号的单位,无效信号的定义
- 完成后的效果如下(见图5-7),按照此方法可以添加其它的Signal信号:
图5-7
自此一个AUTOSAR的系统描述ARXML文件就生成好了。
ARXML 开源项目
Y 推荐文献
- Github 相关项目
https://canmatrix.readthedocs.io/en/latest/installation.html
Converting Can (Controller Area Network) Database Formats .arxml .dbc .dbf .kcd ...
A set of python modules for working with AUTOSAR XML files
主要用例是使Python能够生成ARXML文件,以便在其他(商业)AUTOSAR工具链中导入。它还对解析AUTOSAR XML文件提供了一些支持。
基于Vue+Node JS的纯前端/ARXML可视化项目
This tool aims to visualize ARXML files in human readable form with easy search operations.
X 参考文献
[车联网/计算机网络] Autosar 的 `ARXML` 配置数据库文件协议的更多相关文章
- mongodb配置数据库文件夹,创建服务
配置步骤 1.新建data文件夹,并在data下创建db及log文件夹 2.在mongodb安装目录下新增mongod.cfg文件,配置如下 systemLog: destination: fi ...
- Android通过xml文件配置数据库
之前一段时间自己封装了两个数据库,一个是ORM数据库,另一个是事件流数据库,项目相应的地址如下: ORM数据库:https://github.com/wenjiang/SimpleAndroidORM ...
- 项目那几步走:先配置setting路径文件、创建数据库、执行数据库迁移命令、配置mysql数据库信息、注册app、注释中间件、pymysql替换mysqldb-配置urls路由-继续视图函数-然后HTML页面展示-HTML里面导入css文件、models配置数据库表、
django使用mysql数据库: 首先cmd创建库 1.settings: """Django settings for day42 project. Generate ...
- 在java的xml文件配置数据库URL地址时提示The reference to entity "characterEncoding" must end with the ';' delimiter.错误信息
配置数据库的URL<property name="url" value="jdbc:mysql://127.0.0.1:3306/micro_message&quo ...
- Oracle数据库文件路径变更
环境:RHEL 6.4 + Oracle 11.2.0.3 情景一:只是部分普通数据文件迁移,可以在线操作. 1.将对应表空间offline,移动数据文件到新路径 2.数据文件alter databa ...
- EF里的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射
I.EF里的默认映射 上篇文章演示的通过定义实体类就可以自动生成数据库,并且EF自动设置了数据库的主键.外键以及表名和字段的类型等,这就是EF里的默认映射.具体分为: 数据库映射:Code First ...
- 修改sql数据库文件 物理文件名称
-- 允许配置高级选项 EXEC sp_configure 'show advanced options', 1 GO -- 重新配置 RECONFIGURE GO -- 启用xp_cmdshell ...
- 人人都是 DBA(V)SQL Server 数据库文件
SQL Server 数据库安装后会包含 4 个默认系统数据库:master, model, msdb, tempdb. SELECT [name] ,database_id ,suser_sname ...
- 使用log4j配置不同文件输出不同内容
敲代码中很不注意写日志,虽然明白很重要.今天碰到记录日志,需要根据内容分别输出到不同的文件. 参考几篇文章: 感觉最详细:http://blog.csdn.net/azheng270/article/ ...
- SQL Server代理(4/12):配置数据库邮件
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在以前的文章里我们看到,SQL Serve ...
随机推荐
- HTTP服务七层架构技术探讨
作者: phpkernel 发布时间: 2012-11-26 13:27 阅读: 3998 次 推荐: 8 原文链接 [收藏] 1. 为什么分层? 计算机领域的体系结构普遍采用了分层 ...
- 逆向WeChat(八)
上一篇逆向WeChat(七)是逆向微信客户端本地数据库相关事宜. 本篇逆向微信客户端本地日志xlog相关的事宜. 本篇在博客园地址https://www.cnblogs.com/bbqzsl/p/18 ...
- 使用IDEA一键发布应用
1.编辑Dockerfile from java:8 WORKDIR /usr/local ADD ./target/jpaas-bpm.jar . CMD ["java",&qu ...
- ARCGIS 拓扑检查步骤与修正拓扑错误技巧
转自http://xygszsh.blog.163.com/blog/static/19221517201111831348533/,写得没有说多好,贵在详细. 将数据装载如个人地理数据库,用拓扑功能 ...
- 不求甚解--详解ansible-playbook中roles的用法(二)
前言 本文将详细介绍ansible-playbook中roles的各种用法 环境准备 组件 版本 操作系统 Ubuntu 22.04.4 LTS ansible 2.17.6 基本用法 文件结构 . ...
- Redis应用—1.在用户数据里的应用
大纲 1.社区电商的业务闭环 2.Redis缓存架构的典型生产问题 3.用户数据在读多写少场景下的缓存设计 4.热门用户数据的缓存自动延期机制 5.缓存惊群与穿透问题的解决方案 6.缓存和数据库双写不 ...
- 你应该了解的hooks式接口编程 - useSWR
什么是 useSWR ? 听名字我们都知道是一个 React 的 hooks,SWR 是stale-while-revalidate的缩写, stale 的意思是陈旧的, revalidate 的意思 ...
- Rapid SCADA v6安装常见问题
用了很多年的Rapid SCADA v5,现在官网已经推出了v6,就简单写一下有关v6的安装指南吧. 本指南面向Windows用户,不适用于linux用户 步骤 从官网下载Rapid SCADA最新的 ...
- docker - 将几个目录复制到另一个目录
您如何将多个目录复制到Docker中的目标目录?我不想复制目录内容,而是复制整个目录结构.COPY和ADD命令复制目录内容,展平结构,这是我不想要的.也就是说,如果这些是我的来源: . ├── a │ ...
- Windows 11 下 Virtualbox 6.1.34 出现 End kernel panic - not syncing: attempted to kill the idle task
前言小半年没用 Virtualbox 了,切换到了 VMware,今天又切换回去(无聊),但是安装虚拟机出现这个错误. 解决方法根据 Virtualbox 论坛的讨论[1]和[2],首先明确 系统必须 ...