AUTOSAR开发中Arxml自动生成脚本

原创 汽车ECU开发 2025-06-11 08:38
在做autosar的开发的时候,通常都自称为配置工程师,每天就是在Vector或者是ETAS或者是普华的工具上导一下dbc,改改配置,这种活干多了,挺无聊的。
因此我们可能就会想,既然工具都是基于基于标准的arxml文件识别,那是不是咱可以python自动生成arxml文件,这样可以节约很多时间,干点其他活,比如精进一下编程技术啥的,或者是摸会鱼。网上查了下资料,以及翻了一下标准的autoar文档,自动生成arxml其实是可以做到的,也有不少同行这么做过。
刚好基于最近做了部分诊断相关的自动生成脚本,主要做当前最费时间的DTC开发,工具是基于ETAS的实现的,下面把脚本分享给大家,应该还有很多是可以优化的,仅供参考。
#!/usr/bin/env python# Author: # Log:# dcm demimport openpyxl
try:    import xml.etree.cElementTree as ETexcept ImportError:    import xml.etree.ElementTree as ET
###################################################################def tagname(Tag):    return '{http://autosar.org/schema/r4.0}' + Tag####################################################################整理成arxml文件,增加缩进def pretty_arxml(element, indent, newline, level = 0): #elemnt为传进来的Elment类,参数indent用于缩进,newline用于换行      if element:  #判断element是否有子元素          if element.text == None or element.text.isspace(): #如果element的text没有内容            element.text = newline + indent * (level + 1)        else:            element.text = newline + indent * (level + 1) + element.text.strip() + newline + indent * (level + 1)    #else:  #此处两行如果把注释去掉,Element的text不会另起一行          #element.text = newline + indent * (level + 1) + element.text.strip() + newline + indent * level    temp = list(element) #将elemnt转成list    for subelement in temp:        if temp.index(subelement) < (len(temp) - 1): #如果不是list的最后一个元素,说明下一个行是同级别元素的起始,缩进应一致              subelement.tail = newline + indent * (level + 1)        else:  #如果是list的最后一个元素,说明下一行是母元素的结束,缩进应该少一个            subelement.tail = newline + indent * level          pretty_arxml(subelement, indent, newline, level = level + 1# 对子元素进行递归操作####################################################################创建Dcm_Dsp类#parent:该节点的父节点#number:did 十六进制#status:did读写状态#length:did参数长度#level :did访问安全等级###################################################################class DcmModule_config():    def __init__(self,parent,number,status,length,level):        self.parent = parent        self.number = number        self.status = status        self.length = length        self.level  = level#创建dcmdsp_data信息    def createDcmDspDid_DataSublement(self):        ECUC_CONTAINER = ET.SubElement(self.parent,'ECUC-CONTAINER-VALUE')        shortname = ET.SubElement(ECUC_CONTAINER,'SHORT-NAME')        shortname.text = 'DcmDspData_DID_'+self.number
        definitionref = ET.SubElement(ECUC_CONTAINER,'DEFINITION-REF')        definitionref.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspData'        definitionref.attrib = {'DEST':'ECUC-PARAM-CONF-CONTAINER-DEF'}
        parametervalues = ET.SubElement(ECUC_CONTAINER,'PARAMETER-VALUES')
        ecucnumerical = ET.SubElement(parametervalues,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_size = ET.SubElement(ecucnumerical,'DEFINITION-REF')        definitionref_size.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspData/DcmDspDataSize'        definitionref_size.attrib = {'DEST':'ECUC-INTEGER-PARAM-DEF'}        value = ET.SubElement(ecucnumerical,'VALUE')        value.text = str((int(self.length))*8)
        ecuctextual_type = ET.SubElement(parametervalues,'ECUC-TEXTUAL-PARAM-VALUE')        definitionref_type = ET.SubElement(ecuctextual_type,'DEFINITION-REF')        definitionref_type.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspData/DcmDspDataType'        definitionref_type.attrib = {'DEST':'ECUC-ENUMERATION-PARAM-DEF'}        value_type = ET.SubElement(ecuctextual_type,'VALUE')        if int(self.length)*8 == 8:            value_type.text = 'UINT8'        else:            value_type.text = 'UINT8_N'
        ecuctextual_port = ET.SubElement(parametervalues,'ECUC-TEXTUAL-PARAM-VALUE')        definitionref_port = ET.SubElement(ecuctextual_port,'DEFINITION-REF')        definitionref_port.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspData/DcmDspDataUsePort'        definitionref_port.attrib = {'DEST':'ECUC-ENUMERATION-PARAM-DEF'}        value_port = ET.SubElement(ecuctextual_port,'VALUE')        value_port.text = 'USE_DATA_SENDER_RECEIVER'
        #read DID function        ecuctextual_readfnc = ET.SubElement(parametervalues,'ECUC-TEXTUAL-PARAM-VALUE')        definitionref_readfnc = ET.SubElement(ecuctextual_readfnc,'DEFINITION-REF')        definitionref_readfnc.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspData/DcmDspDataReadFnc'        definitionref_readfnc.attrib = {'DEST':'ECUC-FUNCTION-NAME-DEF'}        value_readfnc = ET.SubElement(ecuctextual_readfnc,'VALUE')        value_readfnc.text = 'DcmDspDataReadFnc_DID_'+self.number        if self.status == 'R/W':            #write DID function            ecuctextual_writefnc = ET.SubElement(parametervalues,'ECUC-TEXTUAL-PARAM-VALUE')            definitionref_writefnc = ET.SubElement(ecuctextual_writefnc,'DEFINITION-REF')            definitionref_writefnc.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspData/DcmDspDataWriteFnc'            definitionref_writefnc.attrib = {'DEST':'ECUC-FUNCTION-NAME-DEF'}            value_writefnc = ET.SubElement(ecuctextual_writefnc,'VALUE')            value_writefnc.text = 'DcmDspDataWriteFnc_DID_'+self.number####################################################################创建didinfos的信息    def createDcmDspDid_InfosSublement(self):        ECUC_CONTAINER = ET.SubElement(self.parent,'ECUC-CONTAINER-VALUE')        shortname = ET.SubElement(ECUC_CONTAINER,'SHORT-NAME')        shortname.text = 'DcmDspDidInfo_DID_'+self.number
        definitionref = ET.SubElement(ECUC_CONTAINER,'DEFINITION-REF',attrib = {'DEST':'ECUC-PARAM-CONF-CONTAINER-DEF'})        definitionref.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDidInfo'
        parametervalue = ET.SubElement(ECUC_CONTAINER,'PARAMETER-VALUES')        ecucnumrical = ET.SubElement(parametervalue,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_parameter = ET.SubElement(ecucnumrical,'DEFINITION-REF',attrib = {'DEST':'ECUC-BOOLEAN-PARAM-DEF'})        definitionref_parameter.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDidInfo/DcmDspDidDynamicallyDefined'        value_parameter = ET.SubElement(ecucnumrical,'VALUE')        value_parameter.text = '0'
        subcontainers = ET.SubElement(ECUC_CONTAINER,'SUB-CONTAINERS')        if self.status == 'R/W':            #read            ecuccontainer_read = ET.SubElement(subcontainers,'ECUC-CONTAINER-VALUE')            shortname_read = ET.SubElement(ecuccontainer_read,'SHORT-NAME')            shortname_read.text = 'DcmDspDidRead_DID_'+self.number            #read,default_session            definitionref_read = ET.SubElement(ecuccontainer_read,'DEFINITION-REF',attrib = {'DEST':'ECUC-PARAM-CONF-CONTAINER-DEF'})            definitionref_read.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDidInfo/DcmDspDidRead'            referencevalues_read = ET.SubElement(ecuccontainer_read,'REFERENCE-VALUES')
            ecucreferencevalue_read = ET.SubElement(referencevalues_read,'ECUC-REFERENCE-VALUE')            definitionrefsession_read = ET.SubElement(ecucreferencevalue_read,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})            definitionrefsession_read.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDidInfo/DcmDspDidRead/DcmDspDidReadSessionRef'            valueref_read = ET.SubElement(ecucreferencevalue_read,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})            valueref_read.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dcm/DcmConfigSet/DcmDsp/DcmDspSession/DEFAULT_SESSION'            #read,extended_session            ecucreferencevalue_readext = ET.SubElement(referencevalues_read,'ECUC-REFERENCE-VALUE')            definitionrefsession_readext = ET.SubElement(ecucreferencevalue_readext,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})            definitionrefsession_readext.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDidInfo/DcmDspDidRead/DcmDspDidReadSessionRef'            valueref_readext = ET.SubElement(ecucreferencevalue_readext,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})            valueref_readext.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dcm/DcmConfigSet/DcmDsp/DcmDspSession/EXTENDED_DIAGNOSTIC_SESSION'
           #security level1           #ecucreferencevalue_sal1 = ET.SubElement(referencevalues_read,'ECUC-REFERENCE-VALUE')           #definitionref_sal1 = ET.SubElement(ecucreferencevalue_sal1,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})           #definitionref_sal1.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDidInfo/DcmDspDidRead/DcmDspDidReadSecurityLevelRef'           #valueref_sal1 = ET.SubElement(ecucreferencevalue_sal1,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})           #valueref_sal1.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dcm/DcmConfigSet/DcmDsp/DcmDspSecurity/DcmDspSecurityRow_ReqSeedLEV_L1'
            #write            ecuccontainer_write = ET.SubElement(subcontainers,'ECUC-CONTAINER-VALUE')            shortname_write = ET.SubElement(ecuccontainer_write,'SHORT-NAME')            shortname_write.text = 'DcmDspDidWrite_DID_'+self.number            #write default_session            definitionref_write = ET.SubElement(ecuccontainer_write,'DEFINITION-REF',attrib = {'DEST':'ECUC-PARAM-CONF-CONTAINER-DEF'})            definitionref_write.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDidInfo/DcmDspDidWrite'            referencevalues_write = ET.SubElement(ecuccontainer_write,'REFERENCE-VALUES')
            ecucreferencevalue_write = ET.SubElement(referencevalues_write,'ECUC-REFERENCE-VALUE')            definitionrefsession_write = ET.SubElement(ecucreferencevalue_write,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})            definitionrefsession_write.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDidInfo/DcmDspDidWrite/DcmDspDidWriteSessionRef'            valueref_write = ET.SubElement(ecucreferencevalue_write,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})            valueref_write.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dcm/DcmConfigSet/DcmDsp/DcmDspSession/DEFAULT_SESSION'            #write extended_session            ecucreferencevalue_writext = ET.SubElement(referencevalues_write,'ECUC-REFERENCE-VALUE')            definitionrefsession_writext = ET.SubElement(ecucreferencevalue_writext,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})            definitionrefsession_writext.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDidInfo/DcmDspDidWrite/DcmDspDidWriteSessionRef'            valueref_writext = ET.SubElement(ecucreferencevalue_writext,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})            valueref_writext.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dcm/DcmConfigSet/DcmDsp/DcmDspSession/EXTENDED_DIAGNOSTIC_SESSION'        elif self.status == 'R':            #read            ecuccontainer_read = ET.SubElement(subcontainers,'ECUC-CONTAINER-VALUE')            shortname_read = ET.SubElement(ecuccontainer_read,'SHORT-NAME')            shortname_read.text = 'DcmDspDidRead_DID_'+self.number            #read,default_session            definitionref_read = ET.SubElement(ecuccontainer_read,'DEFINITION-REF',attrib = {'DEST':'ECUC-PARAM-CONF-CONTAINER-DEF'})            definitionref_read.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDidInfo/DcmDspDidRead'            referencevalues_read = ET.SubElement(ecuccontainer_read,'REFERENCE-VALUES')
            ecucreferencevalue_read = ET.SubElement(referencevalues_read,'ECUC-REFERENCE-VALUE')            definitionrefsession_read = ET.SubElement(ecucreferencevalue_read,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})            definitionrefsession_read.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDidInfo/DcmDspDidRead/DcmDspDidReadSessionRef'            valueref_read = ET.SubElement(ecucreferencevalue_read,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})            valueref_read.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dcm/DcmConfigSet/DcmDsp/DcmDspSession/DEFAULT_SESSION'            #read,extended_session            ecucreferencevalue_readext = ET.SubElement(referencevalues_read,'ECUC-REFERENCE-VALUE')            definitionrefsession_readext = ET.SubElement(ecucreferencevalue_readext,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})            definitionrefsession_readext.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDidInfo/DcmDspDidRead/DcmDspDidReadSessionRef'            valueref_readext = ET.SubElement(ecucreferencevalue_readext,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})            valueref_readext.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dcm/DcmConfigSet/DcmDsp/DcmDspSession/EXTENDED_DIAGNOSTIC_SESSION'####################################################################创建dids信息           def createDcmDspdids_Sublement(self):        ECUC_CONTAINER = ET.SubElement(self.parent,'ECUC-CONTAINER-VALUE')        shortname = ET.SubElement(ECUC_CONTAINER,'SHORT-NAME')        shortname.text = 'DcmDspDids_DID_'+self.number
        definitionref = ET.SubElement(ECUC_CONTAINER,'DEFINITION-REF',attrib = {'DEST':'ECUC-PARAM-CONF-CONTAINER-DEF'})        definitionref.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDid'
        parametervalues = ET.SubElement(ECUC_CONTAINER,'PARAMETER-VALUES')        ecucnumerical = ET.SubElement(parametervalues,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_para = ET.SubElement(ecucnumerical,'DEFINITION-REF',attrib = {'DEST':'ECUC-INTEGER-PARAM-DEF'})        definitionref_para.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDid/DcmDspDidIdentifier'        value_para = ET.SubElement(ecucnumerical,'VALUE')        value_para.text = str(int(self.number,16))
        referencevalue_infos = ET.SubElement(ECUC_CONTAINER,'REFERENCE-VALUES')        ecucreference_infos = ET.SubElement(referencevalue_infos,'ECUC-REFERENCE-VALUE')        definitionref_infos = ET.SubElement(ecucreference_infos,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})        definitionref_infos.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDid/DcmDspDidInfoRef'        value_infos = ET.SubElement(ecucreference_infos,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})        value_infos.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dcm/DcmConfigSet/DcmDsp/'+'DcmDspDidInfo_DID_'+self.number
        subcontainer = ET.SubElement(ECUC_CONTAINER,'SUB-CONTAINERS')        ecuccontainer = ET.SubElement(subcontainer,'ECUC-CONTAINER-VALUE')        shortname_signal = ET.SubElement(ecuccontainer,'SHORT-NAME')        shortname_signal.text = 'DcmDspDidSignal_DID_'+self.number        definitionref_signal = ET.SubElement(ecuccontainer,'DEFINITION-REF',attrib = {'DEST':'ECUC-PARAM-CONF-CONTAINER-DEF'})        definitionref_signal.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDid/DcmDspDidSignal'        parametervalue_signal = ET.SubElement(ecuccontainer,'PARAMETER-VALUES')        ecucnumerical_signal = ET.SubElement(parametervalue_signal,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_subsignal = ET.SubElement(ecucnumerical_signal,'DEFINITION-REF',attrib = {'DEST':'ECUC-INTEGER-PARAM-DEF'})        definitionref_subsignal.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDid/DcmDspDidSignal/DcmDspDidDataPos'        value_signal = ET.SubElement(ecucnumerical_signal,'VALUE')        value_signal.text = '0'
        reference_data = ET.SubElement(ecuccontainer,'REFERENCE-VALUES')        ecucreference_data = ET.SubElement(reference_data,'ECUC-REFERENCE-VALUE')        definitionref_data = ET.SubElement(ecucreference_data,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})        definitionref_data.text = '/AUTOSAR_Dcm/EcucModuleDefs/Dcm/DcmConfigSet/DcmDsp/DcmDspDid/DcmDspDidSignal/DcmDspDidDataRef'        valueref_data = ET.SubElement(ecucreference_data,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})        valueref_data.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dcm/DcmConfigSet/DcmDsp/DcmDspData_DID_'+self.number
####################################################################创建Dem类#parent :该节点的父节点#DTCname:故障名字#DTCpriority:故障优先级#DTC:DTC的值###################################################################class DemModule_Config():    def __init__(self,parent,DTCname,DTCpriority,DTC):        self.parent = parent        self.DTCname = DTCname        self.DTCpriority = DTCpriority        self.DTC = DTC        #配置component#    def DemComponent_config(self):        ECUC_CONTAINER = ET.SubElement(self.parent,'ECUC-CONTAINER-VALUE')        shortname = ET.SubElement(ECUC_CONTAINER,'SHORT-NAME')        shortname.text = 'DemComponent_'+ self.DTCname        definitionref = ET.SubElement(ECUC_CONTAINER,'DEFINITION-REF',attrib = {'DEST':'ECUC-PARAM-CONF-CONTAINER-DEF'})        definitionref.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemComponent'
        parametervalue_priority = ET.SubElement(ECUC_CONTAINER,'PARAMETER-VALUES')        ecucnumerical_priority = ET.SubElement(parametervalue_priority,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_priority = ET.SubElement(ecucnumerical_priority,'DEFINITION-REF',attrib = {'DEST':'ECUC-BOOLEAN-PARAM-DEF'})        definitionref_priority.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemComponent/DemComponentIgnoresPriority'        value_priority = ET.SubElement(ecucnumerical_priority,'VALUE')        value_priority.text = 'true'
        ecucnumerical_allowed = ET.SubElement(parametervalue_priority,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_value = ET.SubElement(ecucnumerical_allowed,'DEFINITION-REF',attrib = {'DEST':'ECUC-INTEGER-PARAM-DEF'})        definitionref_value.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemComponent/DemRbComponentAllowedRecoveries'        value = ET.SubElement(ecucnumerical_allowed,'VALUE')        value.text = '5'
    def DemDTCAttributes_config(self):        ECUC_CONTAINER = ET.SubElement(self.parent,'ECUC-CONTAINER-VALUE')        shortname = ET.SubElement(ECUC_CONTAINER,'SHORT-NAME')        shortname.text = 'DemDTCAttributes_'+self.DTCname        definitionref = ET.SubElement(ECUC_CONTAINER,'DEFINITION-REF',attrib = {'DEST':'ECUC-PARAM-CONF-CONTAINER-DEF'})        definitionref.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCAttributes'        parametervalue = ET.SubElement(ECUC_CONTAINER,'PARAMETER-VALUES')        #老化允许配置#        ecucnumerical_agingallowed = ET.SubElement(parametervalue,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_agingallowed = ET.SubElement(ecucnumerical_agingallowed,'DEFINITION-REF',attrib = {'DEST':'ECUC-BOOLEAN-PARAM-DEF'})        definitionref_agingallowed.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCAttributes/DemAgingAllowed'        value_agingallowed = ET.SubElement(ecucnumerical_agingallowed,'VALUE')        value_agingallowed.text = 'true'        #老化门槛配置#        ecucnumerical_counterthreshold = ET.SubElement(parametervalue,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_counterthreshold = ET.SubElement(ecucnumerical_counterthreshold,'DEFINITION-REF',attrib = {'DEST':'ECUC-INTEGER-PARAM-DEF'})        definitionref_counterthreshold.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCAttributes/DemAgingCycleCounterThreshold'        value_counterthreshold = ET.SubElement(ecucnumerical_counterthreshold,'VALUE')        value_counterthreshold.text = '40'        #DTC优先级配置#        ecucnumerical_DTCpriority = ET.SubElement(parametervalue,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_DTCpriority = ET.SubElement(ecucnumerical_DTCpriority,'DEFINITION-REF',attrib = {'DEST':'ECUC-INTEGER-PARAM-DEF'})        definitionref_DTCpriority.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCAttributes/DemDTCPriority'        value_DTCpriority = ET.SubElement(ecucnumerical_DTCpriority,'VALUE')        value_DTCpriority.text = self.DTCpriority        #事件重要度配置#        ecucnumerical_significance = ET.SubElement(parametervalue,'ECUC-TEXTUAL-PARAM-VALUE')        definitionref_significance = ET.SubElement(ecucnumerical_significance,'DEFINITION-REF',attrib = {'DEST':'ECUC-ENUMERATION-PARAM-DEF'})        definitionref_significance.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCAttributes/DemDTCSignificance'        value_significance = ET.SubElement(ecucnumerical_significance,'VALUE')        value_significance.text = 'DEM_EVENT_SIGNIFICANCE_FAULT'        #是否立即存储#        ecucnumerical_nvstorage = ET.SubElement(parametervalue,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_nvstorage = ET.SubElement(ecucnumerical_nvstorage,'DEFINITION-REF',attrib = {'DEST':'ECUC-BOOLEAN-PARAM-DEF'})        definitionref_nvstorage.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCAttributes/DemImmediateNvStorage'        value_nvstorage = ET.SubElement(ecucnumerical_nvstorage,'VALUE')        value_nvstorage.text = 'true'        #引用配置#        referencevalue = ET.SubElement(ECUC_CONTAINER,'REFERENCE-VALUES')
        ecucrefrence_agingcycleref = ET.SubElement(referencevalue,'ECUC-REFERENCE-VALUE')        definitionref_agingcycleref = ET.SubElement(ecucrefrence_agingcycleref,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})        definitionref_agingcycleref.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCAttributes/DemAgingCycleRef'        value_agingcycleref = ET.SubElement(ecucrefrence_agingcycleref,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})        value_agingcycleref.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dem/DemGeneral/''DemOperationCycle_0'  #配置老化循环参考
        ecucrefrence_freezeframe = ET.SubElement(referencevalue,'ECUC-REFERENCE-VALUE')        definitionref_freezeframe = ET.SubElement(ecucrefrence_freezeframe,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})        definitionref_freezeframe.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCAttributes/DemFreezeFrameClassRef'        value_freezeframe = ET.SubElement(ecucrefrence_freezeframe,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})        value_freezeframe.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dem/DemGeneral/''Set1_Freeze'    #冻结帧参考
        ecucrefrence_extendeddata = ET.SubElement(referencevalue,'ECUC-REFERENCE-VALUE')        definitionref_extendeddata = ET.SubElement(ecucrefrence_extendeddata,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})        definitionref_extendeddata.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCAttributes/DemExtendedDataClassRef'        value_extendeddata = ET.SubElement(ecucrefrence_extendeddata,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})        value_extendeddata.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dem/DemGeneral/''Set1_Extd'    #扩展数据参考
        ecucrefrence_freezeframerecnum = ET.SubElement(referencevalue,'ECUC-REFERENCE-VALUE')        definitionref_freezeframerecnum = ET.SubElement(ecucrefrence_freezeframerecnum,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})        definitionref_freezeframerecnum.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCAttributes/DemFreezeFrameRecNumClassRef'        value_freezeframerecnum = ET.SubElement(ecucrefrence_freezeframerecnum,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})        value_freezeframerecnum.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dem/DemGeneral/''DemFreezeFrameRecNumClass'    #冻结帧记录数量参考
        ecucrefrence_demmemory = ET.SubElement(referencevalue,'ECUC-REFERENCE-VALUE')        definitionref_demmemory = ET.SubElement(ecucrefrence_demmemory,'DEFINITION-REF',attrib = {'DEST':'ECUC-CHOICE-REFERENCE-DEF'})        definitionref_demmemory.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCAttributes/DemMemoryDestinationRef'        value_demmemory = ET.SubElement(ecucrefrence_demmemory,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})        value_demmemory.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dem/DemGeneral/''DemPrimaryMemory'    #内存参考
    def DemDTCs_config(self):        ECUC_CONTAINER = ET.SubElement(self.parent,'ECUC-CONTAINER-VALUE')        shortname = ET.SubElement(ECUC_CONTAINER,'SHORT-NAME')        shortname.text = 'DemDTC_'+self.DTCname        definitionref = ET.SubElement(ECUC_CONTAINER,'DEFINITION-REF',attrib = {'DEST':'ECUC-PARAM-CONF-CONTAINER-DEF'})        definitionref.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTC'        #DTC严重等级配置#        parametervalues = ET.SubElement(ECUC_CONTAINER,'PARAMETER-VALUES')        ecucdtcseverity = ET.SubElement(parametervalues,'ECUC-TEXTUAL-PARAM-VALUE')        definitionref_dtcseverity = ET.SubElement(ecucdtcseverity,'DEFINITION-REF',attrib = {'DEST':'ECUC-ENUMERATION-PARAM-DEF'})        definitionref_dtcseverity.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTC/DemDTCSeverity'        value_dtcseverity = ET.SubElement(ecucdtcseverity,'VALUE')        value_dtcseverity.text = 'DEM_SEVERITY_CHECK_IMMEDIATELY'        #DTC配置#        ecucnumerical_dtcvalue = ET.SubElement(parametervalues,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_dtcvalue = ET.SubElement(ecucnumerical_dtcvalue,'DEFINITION-REF',attrib = {'DEST':'ECUC-INTEGER-PARAM-DEF'})        definitionref_dtcvalue.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTC/DemDtcValue'        dtcvalue = ET.SubElement(ecucnumerical_dtcvalue,'VALUE')        dtcvalue.text = str(int(self.DTC,16))        #属性参考配置#        referencevalue = ET.SubElement(ECUC_CONTAINER,'REFERENCE-VALUES')        ecucreference_dtcattrib = ET.SubElement(referencevalue,'ECUC-REFERENCE-VALUE')        definitionref_dtcattrib = ET.SubElement(ecucreference_dtcattrib,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})        definitionref_dtcattrib.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTC/DemDTCAttributesRef'        valueref_dtcattrib = ET.SubElement(ecucreference_dtcattrib,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})        valueref_dtcattrib.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dem/DemConfigSet/DemDTCAttributes_'+self.DTCname     #对事件进行配置#       def DemEvent_config(self):        ECUC_CONTAINER = ET.SubElement(self.parent,'ECUC-CONTAINER-VALUE')        shortname = ET.SubElement(ECUC_CONTAINER,'SHORT-NAME')        shortname.text = 'Event_'+self.DTCname        definitionref = ET.SubElement(ECUC_CONTAINER,'DEFINITION-REF',attrib = {'DEST':'ECUC-PARAM-CONF-CONTAINER-DEF'})        definitionref.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter'
        parametervalues = ET.SubElement(ECUC_CONTAINER,'PARAMETER-VALUES')        #事件有效性配置#        ecucnumerical_eventavailable = ET.SubElement(parametervalues,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_eventavailable = ET.SubElement(ecucnumerical_eventavailable,'DEFINITION-REF',attrib = {'DEST':'ECUC-BOOLEAN-PARAM-DEF'})        definitionref_eventavailable.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemEventAvailable'        value_eventavailable = ET.SubElement(ecucnumerical_eventavailable,'VALUE')        value_eventavailable.text = '1'        #计数门槛设置#        ecucnumerical = ET.SubElement(parametervalues,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_threshold = ET.SubElement(ecucnumerical,'DEFINITION-REF',attrib = {'DEST':'ECUC-INTEGER-PARAM-DEF'})        definitionref_threshold.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemEventFailureCycleCounterThreshold'        value_threshold = ET.SubElement(ecucnumerical,'VALUE')        value_threshold.text = '1'        #事件类型配置#        ecuctextual_eventkind = ET.SubElement(parametervalues,'ECUC-TEXTUAL-PARAM-VALUE')        definitionref_eventkind = ET.SubElement(ecuctextual_eventkind,'DEFINITION-REF',attrib = {'DEST':'ECUC-ENUMERATION-PARAM-DEF'})        definitionref_eventkind.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemEventKind'        value_eventkind = ET.SubElement(ecuctextual_eventkind,'VALUE')        value_eventkind.text = 'DEM_EVENT_KIND_SWC'        #预存储配置#        ecucumerical_prestore = ET.SubElement(parametervalues,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_prestore = ET.SubElement(ecucumerical_prestore,'DEFINITION-REF',attrib = {'DEST':'ECUC-BOOLEAN-PARAM-DEF'})        definitionref_prestore.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemFFPrestorageSupported'        value_prestore = ET.SubElement(ecucumerical_prestore,'VALUE')        value_prestore.text = '0'
        referencevalues = ET.SubElement(ECUC_CONTAINER,'REFERENCE-VALUES')        #component参考配置#        ecucreference_component = ET.SubElement(referencevalues,'ECUC-REFERENCE-VALUE')        definitionref_component = ET.SubElement(ecucreference_component,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})        definitionref_component.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemComponentClassRef'        valueref_component = ET.SubElement(ecucreference_component,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})        valueref_component.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dem/DemConfigSet/DemComponent_'+self.DTCname        #demDTC参考配置#        ecucreference_dtcref = ET.SubElement(referencevalues,'ECUC-REFERENCE-VALUE')        definitionref_dtcref = ET.SubElement(ecucreference_dtcref,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})        definitionref_dtcref.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemDTCRef'        value_dtcref = ET.SubElement(ecucreference_dtcref,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})        value_dtcref.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dem/DemConfigSet/DemDTC_'+self.DTCname        #对DTC参考运行循环配置#        ecucreference_cycle = ET.SubElement(referencevalues,'ECUC-REFERENCE-VALUE')        definitionref_cycle = ET.SubElement(ecucreference_cycle,'DEFINITION-REF',attrib = {'DEST':'ECUC-REFERENCE-DEF'})        definitionref_cycle.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemOperationCycleRef'        valueref_cycle = ET.SubElement(ecucreference_cycle,'VALUE-REF',attrib = {'DEST':'ECUC-CONTAINER-VALUE'})        valueref_cycle.text = '/ETAS_Project/EcucModuleConfigurationValuess/Dem/DemGeneral/DemOperationCycle_0'


        #debounce设置#        subcontaniners = ET.SubElement(ECUC_CONTAINER,'SUB-CONTAINERS')        ecuccontainer_debounce = ET.SubElement(subcontaniners,'ECUC-CONTAINER-VALUE')        shortname_debounce = ET.SubElement(ecuccontainer_debounce,'SHORT-NAME')        shortname_debounce.text =  'DemDebounceAlgorithmClass'        definitionref_debounce = ET.SubElement(ecuccontainer_debounce,'DEFINITION-REF',attrib = {'DEST':'ECUC-CHOICE-CONTAINER-DEF'})        definitionref_debounce.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemDebounceAlgorithmClass'        #monitor internal配置#        subcontaniners_intermonitor = ET.SubElement(ecuccontainer_debounce,'SUB-CONTAINERS')        ecuccontainer_intermonitor = ET.SubElement(subcontaniners_intermonitor,'ECUC-CONTAINER-VALUE')        shortname_intermonitor = ET.SubElement(ecuccontainer_intermonitor,'SHORT-NAME')        shortname_intermonitor.text = 'DemDebounceMonitorInternal'        definitionref_intermonitor = ET.SubElement(ecuccontainer_intermonitor,'DEFINITION-REF',attrib = {'DEST':'ECUC-PARAM-CONF-CONTAINER-DEF'})        definitionref_intermonitor.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemDebounceAlgorithmClass/DemDebounceMonitorInternal'        #callback get FDC配置#        subcontainers_callback = ET.SubElement(ecuccontainer_intermonitor,'SUB-CONTAINERS')        ecuccontainer_callback = ET.SubElement(subcontainers_callback,'ECUC-CONTAINER-VALUE')        shortname_callback = ET.SubElement(ecuccontainer_callback,'SHORT-NAME')        shortname_callback.text = 'DemCallbackGetFDC'        definitionref_callback = ET.SubElement(ecuccontainer_callback,'DEFINITION-REF',attrib = {'DEST':'ECUC-PARAM-CONF-CONTAINER-DEF'})        definitionref_callback.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemDebounceAlgorithmClass/DemDebounceMonitorInternal/DemCallbackGetFDC'        parameter_bool = ET.SubElement(ecuccontainer_callback,'PARAMETER-VALUES')        ecucnumerical_bool = ET.SubElement(parameter_bool,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_bool = ET.SubElement(ecucnumerical_bool,'DEFINITION-REF',attrib = {'DEST':'ECUC-BOOLEAN-PARAM-DEF'})        definitionref_bool.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemDebounceAlgorithmClass/DemDebounceMonitorInternal/DemCallbackGetFDC/DemRbGeneralCallbackGetFDCFncUsed'        value_bool = ET.SubElement(ecucnumerical_bool,'VALUE')        value_bool.text = '0'        #Demeventclass配置#        ecuccontainer_eventclass = ET.SubElement(subcontaniners,'ECUC-CONTAINER-VALUE')        shortname_eventcalss = ET.SubElement(ecuccontainer_eventclass,'SHORT-NAME')        shortname_eventcalss.text = 'DemEventClassRB'        definitionref_eventclass = ET.SubElement(ecuccontainer_eventclass,'DEFINITION-REF',attrib = {'DEST':'ECUC-PARAM-CONF-CONTAINER-DEF'})        definitionref_eventclass.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemRbEventClass'        parameter_eventclass = ET.SubElement(ecuccontainer_eventclass,'PARAMETER-VALUES')        ecucnumerical_buffertime = ET.SubElement(parameter_eventclass,'ECUC-NUMERICAL-PARAM-VALUE')        definitionref_buffertime = ET.SubElement(ecucnumerical_buffertime,'DEFINITION-REF',attrib = {'DEST':'ECUC-INTEGER-PARAM-DEF'})        definitionref_buffertime.text = '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemRbEventClass/DemRbEventBufferTime'        value_buffertime = ET.SubElement(ecucnumerical_buffertime,'VALUE')        value_buffertime.text = '0'

###################################################################if __name__ == '__main__':    #读取源文件    Diagfile = "Diag_EcucValues.arxml"    #xlsfile = "E:\Diag_UDS.xlsx"    #初始化列表    did_number = []    did_status = []    did_length = []    dtc_number = []    dtc_name   = []    flag       = 0    #获取arxml文件的根节点    Diagarxml = ET.parse(Diagfile)    input_root = Diagarxml.getroot()    #print(input_root.tag)    wb = openpyxl.load_workbook(xlsfile)    #wb_dtc = openpyxl.load_workbook(dtcfile)    DIDtable = wb.get_sheet_by_name('DID (0x22&0x2E)')    DTCtable = wb.get_sheet_by_name('DTCTable')    #获取诊断列表中did的信息    for SN in range(1,250):        DIDnumber = DIDtable.cell(row = SN,column = 1#DID number        DIDstatus = DIDtable.cell(row = SN,column = 4#DID status        DIDlength = DIDtable.cell(row = SN,column = 7#DID length
        DTC       = DTCtable.cell(row = SN,column = 3#DTC value        DTCname   = DTCtable.cell(row = SN,column = 7#DTC meaning
        #print(DTCname.value)        #print(len(str(DTC.value)),DTC.value)        #print(DIDnumber.value,DIDstatus.value,DIDlength.value)        if DIDnumber.value != None:            if 'DID' in DIDnumber.value :                print('This is the first line')            else:                did_number.append(DIDnumber.value)                did_status.append(DIDstatus.value)                did_length.append(DIDlength.value)
        if len(str(DTC.value)) == 6:               print(DTC.value)               dtc_number.append(DTC.value)               dtc_name.append(str(DTC.value)+'_'+DTCname.value.title().replace(' ','').replace('-',''))               #dtc_name.append(str(DTC.value).strip())
    #print(int(did_number[1],16))    #print(did_status)    #print(did_length)    #print(len(did_number))    #寻找arxml文件中did配置的位置    for element in input_root.iter():        if element.tag == tagname('SUB-CONTAINERS'):            for subelement in element.iter():                #print(len(element.getchildren()))                #print(element.tag)                for sn in range(len(subelement.getchildren())):                    #print(subelement.getchildren()[sn].text)                    if subelement.getchildren()[sn].text == 'DcmDspSecurity':                        #print(subelement.tag)                        dcmrootelement = element
    for element in input_root.iter():        if element.tag == tagname('ECUC-CONTAINER-VALUE'):            for sn in range(len(element.getchildren())):                if element.getchildren()[sn].text == 'DemConfigSet':                    demrootelement =  element.getchildren()[sn+2]                    print(demrootelement)
    #print(dcmrootelement.tag)    #print(rootelement.getchildren())    #print(rootelement)    #在SUB-CONTAINERS下添加子节点    for cnt in range(len(did_number)):        did_obj = DcmModule_config(dcmrootelement,did_number[cnt].strip(),did_status[cnt].strip(),did_length[cnt],0)#增加去除字符串前后的空格        did_obj.createDcmDspDid_DataSublement()        did_obj.createDcmDspDid_InfosSublement()        #print(int(did_number[cnt],16))        did_obj.createDcmDspdids_Sublement()    #在DemConfigSet下同级的SUB_CONTAINES节点下添加子节点#    for cnt in range(len(dtc_number)):    #for cnt in range(1):#test        dtc_obj = DemModule_Config(demrootelement,dtc_name[cnt].strip(),str(cnt+1),str(dtc_number[cnt]).strip())        dtc_obj.DemComponent_config()        dtc_obj.DemDTCs_config()        dtc_obj.DemEvent_config()        dtc_obj.DemDTCAttributes_config()
    ET.register_namespace(''"http://autosar.org/schema/r4.0")    #整理并输出arxml文件    pretty_arxml(input_root,'\t','\n')    #signalarxml = ET.ElementTree(input_root)    Diagarxml.write('Diag_EcucValues1.arxml',encoding="UTF-8",xml_declaration=True)

汽车ECU开发 专注于汽车电子ECU软件开发,技术分享。
评论
  • 什么是LoRaWAN? LoRaWAN技术及应用LoRaWAN(Long Range Wide Area Network)是一种低功耗、长距离、广域网络通信协议,特别设计用于连接物联网(IoT)设备。LoRaWAN采用无线通信技术,能够覆盖数十公里的范围,提供长时间的电池寿命,适用于智能城市、农业、工业自动化、环境监测,与健康医疗等领域应用。来源: LoRa Alliance一探究竟:LoRaWAN物联网应用优势营运商采用 LoRaWAN 具有多方面的优势,除了长距离覆盖范围及低功耗的特点外,还
    百佳泰测试实验室 2025-07-10 14:51 325浏览
  • 在物联网无线通信领域,随着行业应用场景的不断拓宽,同一频段下的设备通信需求正呈指数级增长,然而这一增长趋势却与频谱资源的有限性形成了鲜明对立,信道拥挤、信号串扰与非线性失真等不良现象所造成的“通信压力”正在持续放大。从智能家居的设备互联到工业物联网的实时控制,从智慧楼宇的广域组网到智慧城市的海量数据传输,有限的频谱资源不仅需要满足不断增长的设备通信需求,还需要适配不同场景对速率、时延与可靠性等差异化要求。在此背景下,如何在有限的频谱资源中实现更为稳定的无线通信质量,已成为物联网行业发展路径中的核
    华普微HOPERF 2025-07-07 16:13 605浏览
  • 本文主要针对分立方案高速输出电路,由于MOS管、稳压管、PCB布局布线都存在一些寄生电容,这些寄生电容都会影响高速输出电路的占空比,所以本文对这些寄生电容的影响进行简单说明。测试工况:电压:24V,负载类型:阻性负载2K,输出频率:200Khz,要求占空比45%~55%;电路拓扑如下图所示:图1寄生电容分布情况:如下图所示,MOS管寄生电容为Cgd、Cgs、Cds,稳压管寄生电容为Cd;图2而MOS管手册常见的参数如下图所示为Ciss、Coss、Crss(为啥是这些参数,而不改成Cgs、Cgd、
    用户1751282873645 2025-07-08 23:58 231浏览
  • 在全球广泛倡导绿色低碳与可持续发展的时代浪潮中,新能源汽车作为实现节能减排的重要载体之一,正受到各国政府与企业的加速培育。在此背景下,为提升新能源汽车的市场渗透率,我国已率先进入充电基础设施建设的加速期,从私人专用充电桩到社区公用充电桩,从高速路网补能节点到城市公用充电桩,汽车补能网络正在急速膨胀中。图源:摄图网(已授权)据中国充电联盟(EVCIPA)最新统计数据显示,截止2025年5月份,我国充电基础设施累计数量为1440万台,同比上升45.1%。其中,在2025年1月~5月期间,我国充电基础
    华普微HOPERF 2025-07-09 16:13 293浏览
  • 工业物联网时代,作为一种普遍应用在汽车电子、工业控制与医疗器械等领域中的串行总线通信技术——CAN(Controller Area Network)总线基于消息广播模式,通过双绞线传输差分信号,是一种多主控(Multi-Master)的总线系统,具备极强的抗干扰能力、极低的传输延迟和高速数据传输性能。一种典型的CAN总线网络示意图在CAN总线通信过程中,CAN收发器作为物理层上的接口芯片,位于CAN控制器(MCU)和CAN总线之间,主要负责将来自CAN控制器(MCU)的数字信号与总线上的差分信号
    华普微HOPERF 2025-07-04 14:44 1961浏览
  • 曾经靠“砍一刀”撕裂传统电商格局的拼多多,如今疲态尽显。数据显示,拼多多今年第一季度实现营收957亿元,同比增长10%,市场预估1016亿元,相比预期低了近60亿元;经营利润为161亿元,相比去年同期下降38%;归属于普通股股东的净利润为147亿元,同比下降47%。与此同时,拼多多市值也坐上了“过山车”。去年市值一度突破 2180 亿美元,力压国内电商巨头阿里,今年(7月1日收盘)市值仅余 1497.59 亿美元,已不足阿里(市值2718.63亿美元)一半
    用户1742991715177 2025-07-05 14:24 423浏览
  • 据知名市场研究机构Counterpoint Research发布的数据概览,2025年第二季度,中国智能手机销量预计将迎来小幅回暖,增长率约为1%。在这场销量微增的背后,华为与苹果两大品牌成为了推动市场前行的核心力量。其中华为手机的表现最为亮眼,数据显示,华为在中国市场的智能手机销量份额实现了12%的同比增长,这一成绩不仅使其成为了当季增长最快的品牌,更助力华为重新夺回销量榜首的位置。相比之下,vivo的表现就有些尴尬了。虽然还是位列第二,但vivo在第二季度的智能手机销量份额同比下降了9%,下
    用户1742991715177 2025-07-09 08:19 243浏览
  • 在数字化、自动化高速发展的今天,光电耦合器正以一种低调却不可或缺的方式,悄然改变着我们的生活。它不仅是电子电路中的“安全卫士”,更是连接信号世界的“桥梁”,凭借出色的电气隔离能力,为各类设备提供稳定可靠的信号传输保障。电气隔离——让系统更安全在工业控制系统中,安全始终是重中之重。光电耦合器通过光信号进行电气隔离,能够有效防止高压电流侵入低压控制电路。例如,在智能电网系统中,它广泛应用于电表与通信模块之间,确保数据传输的安全性,防止电网高压对低压设备造成冲击。在电动汽车的电池管理系统(BMS)中,
    腾恩科技-彭工 2025-07-05 13:56 453浏览
  • 提要:采用LOXIM的微孔雾化专用芯片LX8201,能突破压电陶瓷驱动电压超标(24伏)的技术难题,满足全球市场对喷雾玩具的电压安规认证要求。玩具行业尤其是喷雾玩具行业内人士都知道,喷雾玩具的压电陶瓷驱动电压超标(常需60-100V)与强制安规标准(中国,日本,欧美,都一样)对玩具电压的限制(≤24V)存在根本性冲突,如果采用“多层压电堆叠(MPA)技术“(比如日本TDK公司),成本将增加至现有微孔雾化片的10倍以上,这个矛盾一直没有得到好的解决。喷雾玩具在国内热销(淘宝/抖音),能卖的原因,无
    Loximonline 2025-07-08 10:55 278浏览
  •   几个月前,一个老旧的大风扇的散风圈(俺不知其专业名称)的开关按钮不起作用,就是锁不住了,散风圈也就不转了。今天,有空,就拿到工作台,开始拆解分析故障原因,能修好更好。  看看,用的时间够长了吧!皮肤都变颜色了。看标签,合格品2005年的。  底部四个螺丝固定,很容易拆开了。  看到掉下一个标签圆纸片,拿起来看看,是那个横向摇头的电机的。  找到那个按钮开关位置  应该是开关内部的有缺陷了。把它拆下来,一看就是正规合格品。  拿出我日积月累的分类藏宝盒,呵呵,找到一款螺丝孔位正好合适的。   
    自做自受 2025-07-10 11:16 349浏览
  •   去年底,整理旧物,扔的扔了,留的留了,这不,十四个几十年前留下来的工业级小型排风扇,下图左上角处,又拿出来,下决心把它们再利用发挥余热。  呵呵,这回不是拆而是装了。怎么装呢?组装、固定、机架、接线,简单,也不简单,原则是一切都用手头现有废旧材料,争取做到一个不买!DIY,废物利用,如今时髦的话,以旧换新!摆上台面,找来木条,策划怎么做?  比一比,看一看,觉得合适,按尺寸锯开木条。  咋走线?想到了,在有限空间内弯转,从一个螺丝孔穿出来,整体拼凑整齐。   咋固定风扇呢?找来木片条,锯断,
    自做自受 2025-07-06 21:37 574浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦