前言
AUTOSAR作为一个主流的汽车软件架构被广泛应用,在AUTOSAR开发时常会使用到arxml文件作为数据的载体,一般其数据量比较大,当有对arxml文件修改的需求时,使用python可快速完成其修改。
需求
在AUTOSAR的RTE中,可对输入的CAN信号进行数据转换,当数据转换特别复杂时,在RTE中不进行CAN信号的数据转换,转而在RTE之上的中间模块进行数据转换,此时需要将客户导入的arxml中的属性COMPU-NUMERATOR全部修改为1,即direct-mapping,不做数据转换。
使用步骤
1.引入库
代码如下(示例):
import xml.etree.ElementTree as ET
2.函数设计
代码如下(示例):
class GeneratorOfArxmlNew:
def __init__(self):
pass
def Arxml_Updated(self, arxml_name:str):
i = []
V = []
index = 0
ET.register_namespace('', "http://autosar.org/schema/r4.0")
tree = ET.parse(arxml_name)
root = tree.getroot()
#print(root.tag)
for i in root.iter('{http://autosar.org/schema/r4.0}COMPU-NUMERATOR'):
for V in i:
if index%2 == 0:
V.text = str('0.0')
else:
V.text = str('1.0')
index = index + 1
tree.write(arxml_name)
对导入的arxml,从root上查找所有COMPU-NUMERATOR属性,当找到时修改其内容。
3.调用函数
代码如下(示例):
arxml = "D:\\111.arxml" #arxml path
print("***Start Generation***")
app = GeneratorOfArxmlNew()
app.Arxml_Updated(arxml)
print("****End Generation****")
运行脚本,即可完成对arxml的修改。
修改前arxml内容(arxml局部)
<CATEGORY>LINEAR</CATEGORY>
<COMPU-INTERNAL-TO-PHYS>
<COMPU-SCALES>
<COMPU-SCALE>
<LOWER-LIMIT INTERVAL-TYPE="CLOSED">0</LOWER-LIMIT>
<UPPER-LIMIT INTERVAL-TYPE="CLOSED">65535</UPPER-LIMIT>
<COMPU-RATIONAL-COEFFS>
<COMPU-NUMERATOR>
<V>-2048.0</V>
<V>0.0625</V>
</COMPU-NUMERATOR>
<COMPU-DENOMINATOR>
<V>1</V>
</COMPU-DENOMINATOR>
</COMPU-RATIONAL-COEFFS>
</COMPU-SCALE>
</COMPU-SCALES>
</COMPU-INTERNAL-TO-PHYS>
脚本运行后arxml内容(arxml局部)
<CATEGORY>LINEAR</CATEGORY>
<COMPU-INTERNAL-TO-PHYS>
<COMPU-SCALES>
<COMPU-SCALE>
<LOWER-LIMIT INTERVAL-TYPE="CLOSED">0</LOWER-LIMIT>
<UPPER-LIMIT INTERVAL-TYPE="CLOSED">65535</UPPER-LIMIT>
<COMPU-RATIONAL-COEFFS>
<COMPU-NUMERATOR>
<V>0.0</V>
<V>1.0</V>
</COMPU-NUMERATOR>
<COMPU-DENOMINATOR>
<V>1</V>
</COMPU-DENOMINATOR>
</COMPU-RATIONAL-COEFFS>
</COMPU-SCALE>
</COMPU-SCALES>
</COMPU-INTERNAL-TO-PHYS>
总结
以上通过一个简单的python脚本,示例了如何对AUTOSAR的RTE的输入文件arxml进行修改。