AUTOSAR ARXML处理 - C#的解析代码(一)

1、目的

本文介绍通过AUTOSAR组织提供的xsd文件,自动生成对应的C#解析代码的框架。

自动生成方法:Microsoft SDKs\Windows\v7.0A\bin\xsd.exe

命令:xsd.exe AUTOSAR_4-0-3.xsd /c /l:CS /n:AUTOSAR4

AUTOSAR_4-0-3.xsd 是需要生成代码的xsd文件。

在C#环境下固定几个版本没有问题,其他AUTOSAR版本的xsd会在生成过程中产生循环组引用错误,不能生成代码。

2、适用版本

AUTOSAR版本 XSD生成的C#库文件
4.0.3

【免费】AUTOSAR4.0.3的ARXML文件解析资源-CSDN文库

4.2.2 【免费】AUTOSAR4.2.2的ARXML文件解析资源-CSDN文库
4.4.0 【免费】AUTOSAR4.4.0的ARXML文件解析资源-CSDN文库

3、解析库的使用方法

// XmlFilePath: ARXML 文件路径
public static AUTOSAR ReadXmlToClass(string XmlFilePath)
{
    XmlSerializer xs = new XmlSerializer(typeof(AUTOSAR));
    using (FileStream fs = new FileStream(XmlFilePath, FileMode.Open))
    {
         return (AUTOSAR)xs.Deserialize(fs);
    }
}

4、生成的代码

4.1 代码头

以下是生成的代码头部部分,我们后续需要用到这个命名空间和类。当然直接生成的代码还是需要做补充,修改等操作。后续篇章会陆续进行介绍。

//------------------------------------------------------------------------------
// 
//     此代码由工具生成。
//     运行库版本:2.0.50727.3082
//
//     对此文件的更改可能会导致不正确的行为,并且如果
//     重新生成代码,这些更改将会丢失。
// 
//------------------------------------------------------------------------------

// 
// This source code was auto-generated by xsd, Version=2.0.50727.3038.
// 
namespace AUTOSAR4 
{
    using System.Xml.Serialization;
    using System.Collections.ObjectModel;
    using System;
    /// 
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://autosar.org/schema/r4.0")]
    [System.Xml.Serialization.XmlRootAttribute(Namespace="http://autosar.org/schema/r4.0",IsNullable=false)]
    [System.Xml.Serialization.XmlSchemaProvider("http://autosar.org/schema/r4.0 AUTOSAR_4-0-3.xsd")]

    public partial class AUTOSAR {
    # 代码较大,此处省略.....
    }
}

4.3 ARXML框架

4.3.1 配置模版


    
        
            
                
                    
                        
                            
                                <参数类对应的标签>
                            
                                
                                
                                    

4.3.2 配置数据


    
        
            
                
                    
                        
                            
                                <参数值类对应的标签>
                            
                                
  

4.2 配置模版关键类

AUTOSAR的ECU配置分成两个模型,即用来定义配置模版(M1)和配置数据(M0)。每个应用代码都是用配置数据来表示,配置数据里会引用到配置模版中。配置数据的解析在后续章节说明

如下图所示,这个配置数据是参考标准库的配置模版进行使用的。

        
          CanIf
          /AUTOSAR/EcucDefs/CanIf

4.2.1 配置模版:模块 MODULE (ECUCMODULEDEF,

该类用于处理模块,如CanIf, Com等。

    /// 
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(TypeName="ECUC-MODULE-DEF", Namespace="http://autosar.org/schema/r4.0")]
    public partial class ECUCMODULEDEF {
        /// 
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCCHOICECONTAINERDEF), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCPARAMCONFCONTAINERDEF), IsNullable=false)]
        # 容器集合,保护多个配置集;可以是参数容器,也可以是选择容器
        public object[] CONTAINERS {
            get {
                return this.cONTAINERSField;
            }
            set {
                this.cONTAINERSField = value;
            }
        }
    }

4.2.2 配置模版:参数容器(ECUCPARAMCONFCONTAINERDEF,

相当于配置的文件夹

    /// 
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(TypeName="ECUC-PARAM-CONF-CONTAINER-DEF", Namespace="http://autosar.org/schema/r4.0")]
    public partial class ECUCPARAMCONFCONTAINERDEF {

/// 
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCADDINFOPARAMDEF), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCBOOLEANPARAMDEF), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCENUMERATIONPARAMDEF), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCFLOATPARAMDEF), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCFUNCTIONNAMEDEF), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCINTEGERPARAMDEF), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCLINKERSYMBOLDEF), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCMULTILINESTRINGPARAMDEF), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCSTRINGPARAMDEF), IsNullable=false)]
        # 配置参数集合
        public object[] PARAMETERS {
            get {
                return this.pARAMETERSField;
            }
            set {
                this.pARAMETERSField = value;
            }
        }
        
        /// 
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCCHOICEREFERENCEDEF), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCFOREIGNREFERENCEDEF), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCINSTANCEREFERENCEDEF), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCREFERENCEDEF), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCSYMBOLICNAMEREFERENCEDEF), IsNullable=false)]
        # 参考参数集合
        public object[] REFERENCES {
            get {
                return this.rEFERENCESField;
            }
            set {
                this.rEFERENCESField = value;
            }
        }

        /// 
        [System.Xml.Serialization.XmlArrayAttribute("SUB-CONTAINERS")]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCCHOICECONTAINERDEF), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCPARAMCONFCONTAINERDEF), IsNullable=false)]
        # 子容器集合,可以是参数容器,也可以是选择容器
        public object[] SUBCONTAINERS {
            get {
                return this.sUBCONTAINERSField;
            }
            set {
                this.sUBCONTAINERSField = value;
            }
        }
    }

4.2.3 配置模版:选择容器(ECUCCHOICECONTAINERDEF,

可以选择不同类型的参数容器

    /// 
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(TypeName="ECUC-CHOICE-CONTAINER-DEF", Namespace="http://autosar.org/schema/r4.0")]
    public partial class ECUCCHOICECONTAINERDEF {

            /// 
        [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)]
        # 可选的参数容器集合,AUTOSAR配置过程中只能在这个集合中选择一个
        public ECUCPARAMCONFCONTAINERDEF[] CHOICES {
            get {
                return this.cHOICESField;
            }
            set {
                this.cHOICESField = value;
            }
        }
}

你可能感兴趣的:(AUTOSAR配置工具开发教程,AUTOSAR,配置工具,ARXML)