AUTOSAR配置工具开发教程 – 改造篇(属性扩展)

本文介绍了在ARXML自动解析库的基础上,如何进行修改以支持配置工具的使用,包括自动生成代码的优化(如将Object[]转换为ObservableCollection),增加INotifyPropertyChanged接口以支持界面更新,以及为配置模型和数据类添加新特性,如属性和路径跟踪功能。
摘要由CSDN通过智能技术生成

1、目的

本文介绍在ARXML的自动解析库基础上如何进行修改,以支持配置工具的操作。

2、自动生成的代码

2.1 ARPACKAGE 

       /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(TypeName="AR-PACKAGE", Namespace="http://autosar.org/schema/r4.0")]
    public partial class ARPACKAGE {

     
        /// <remarks/>
        // ......
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCDEFINITIONCOLLECTION), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCMODULECONFIGURATIONVALUES), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCMODULEDEF), IsNullable=false)]
        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCVALUECOLLECTION), IsNullable=false)]
        // ......

        public Object[] ELEMENTS
        {
           get {
                return this.eLEMENTSField;
            }
            set {
                this.eLEMENTSField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayAttribute("AR-PACKAGES")]
        [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)]
        public ARPACKAGE[] ARPACKAGES {
            get {
                return this.aRPACKAGESField;
            }
            set {
                this.aRPACKAGESField = value;
            }
        }
    }

ELEMENTS属性就是ARXML很关键的部分,很多模版定义都是在这个下面的。

例如:ECUCMODULEDEF(配置模型), ECUCMODULECONFIGURATIONVALUES(配置数据)

ARPACKAGES 属性是一个嵌套结构,后续我们需要对其特殊处理。

2.2 手动改写自动生成的C#代码

微软的SDK中的xsd.exe生成的集合类使用的数组形式,后续操作不太方面;需要手动改成ObservableCollection。当然也有更强大的工具,如xsd++,但是有license。

如:使用 ObservableCollection<Object> 替换Object[]

3、增加新的特性

3.1 界面更新 INotifyPropertyChanged

ECUCMODULEDEF,ECUCPARAMCONFCONTAINERDEF等,前面章节介绍的配置模版,配置数据类型都需要增加。

3.2 属性增加

以下是几个常用的属性需要增加,我们可以新建个文件,这样就不用管原来自动代码生成的那个很长的文件了:

3.3.1 ECUCMODULEDEF 

public partial class ECUCMODULEDEF : INotifyPropertyChanged
{
        private ECUCCONFIGURATIONVARIANTENUM cONFIGURATIONCLASSField;

        [System.Xml.Serialization.XmlIgnore]
        public ECUCCONFIGURATIONVARIANTENUM CONFIGURATIONCLASS
        {
            get { return cONFIGURATIONCLASSField; }
            set { cONFIGURATIONCLASSField = value; }
        }

        // 关联配置值模块 => ECUCMODULECONFIGURATIONVALUES
        private ECUCMODULECONFIGURATIONVALUES cONFIGURATIONVALUESField;

        [System.Xml.Serialization.XmlIgnore]
        public ECUCMODULECONFIGURATIONVALUES CONFIGURATIONVALUES
        {
            get { return cONFIGURATIONVALUESField; }
            set { cONFIGURATIONVALUESField = value; }
        }

        // Paramter Definition Short Name
        private string pARAMTER_DEF_SHORT_NAMEField;

        [System.Xml.Serialization.XmlIgnore]
        public string PARAMTER_DEF_SHORT_NAME
        {
            get { return pARAMTER_DEF_SHORT_NAMEField; }
            set { pARAMTER_DEF_SHORT_NAMEField = value; }
        }

        // Paramter Data Path
        private string pARAMTER_DATA_FULL_URL_PATHField;

        [System.Xml.Serialization.XmlIgnore]
        public string PARAMTER_DATA_FULL_URL_PATH
        {
            get { return pARAMTER_DATA_FULL_URL_PATHField; }
            set { pARAMTER_DATA_FULL_URL_PATHField = value; }
        }

        // Paramter Definition Path
        string pARAMTER_DEF_FULL_URL_PATHField;

        [System.Xml.Serialization.XmlIgnore]
        public string PARAMTER_DEF_FULL_URL_PATH
        {
            get { return pARAMTER_DEF_FULL_URL_PATHField; }
            set { pARAMTER_DEF_FULL_URL_PATHField = value; }
        }
    }

PARAMTER_DATA_FULL_URL_PATH: 记录当前配置数据的XML树路径,这些路径是由SHORTNAME构成的,方便后续的操作。

PARAMTER_DEF_FULL_URL_PATH: 是配置模型的XML树路径

如:/AUTOSAR/EcucDefs/CanIf/CanIfInitCfg/CanIfInitCfgSet

3.3.2 ECUCCONFCONTAINERDEFBase作为ECUCPARAMCONFCONTAINERDEF, ECUCCHOICECONTAINERDEF的基类

public class ECUCCONFCONTAINERDEFBase : INotifyPropertyChanged
    {
        // 关联配置子容器 => ECUCCONTAINERVALUE
        private ECUCCONTAINERVALUE cONFIGURATIONVALUESField;

        public ECUCCONTAINERVALUE CONFIGURATIONVALUES
        {
            get { return cONFIGURATIONVALUESField; }
            set { cONFIGURATIONVALUESField = value; }
        }

        // Paramter Definition Short Name
        private string pARAMTER_DEF_SHORT_NAMEField;

        [System.Xml.Serialization.XmlIgnore]
        public string PARAMTER_DEF_SHORT_NAME
        {
            get { return pARAMTER_DEF_SHORT_NAMEField; }
            set { pARAMTER_DEF_SHORT_NAMEField = value; }
        }

        private string pARAMTER_DATA_PARENT_FULL_URL_PATHField;

        [System.Xml.Serialization.XmlIgnore]
        public string PARAMTER_DATA_PARENT_FULL_URL_PATH
        {
            get { return pARAMTER_DATA_PARENT_FULL_URL_PATHField; }
            set { pARAMTER_DATA_PARENT_FULL_URL_PATHField = value; }
        }


        // Paramter Definition Path
        string pARAMTER_DEF_FULL_URL_PATHField;


        public string PARAMTER_DEF_FULL_URL_PATH
        {
            get { return pARAMTER_DEF_FULL_URL_PATHField; }
            set { pARAMTER_DEF_FULL_URL_PATHField = value; }
        }
}

3.2.1 ECUCPARAMERSDEFBase 作为配置模型的参数类的基类

public class ECUCPARAMERSDEFBase : INotifyPropertyChanged
    {
        private string pARAMTER_DATA_SET_VALUEField;
        private string pARAMTER_DATA_BACKUP_VALUEField;

        [System.Xml.Serialization.XmlIgnore]
        public string PARAMTER_DATA_SET_VALUE
        {
            get { return pARAMTER_DATA_SET_VALUEField; }
            set 
            {
                pARAMTER_DATA_BACKUP_VALUEField = pARAMTER_DATA_SET_VALUEField;
                pARAMTER_DATA_SET_VALUEField = value;
                if (!Validate())
                {
                    pARAMTER_DATA_SET_VALUEField = pARAMTER_DATA_BACKUP_VALUEField;
                }
                OnPropertyChanged("PARAMTER_DATA_SET_VALUE");
            }
        }

        // Paramter Data Path
        private string pARAMTER_DATA_FULL_URL_PATHField;

        [System.Xml.Serialization.XmlIgnore]
        public string PARAMTER_DATA_FULL_URL_PATH
        {
            get { return pARAMTER_DATA_FULL_URL_PATHField; }
            set { pARAMTER_DATA_FULL_URL_PATHField = value; }
        }


        // Paramter Definition Path
        string pARAMTER_DEF_FULL_URL_PATHField;

        [System.Xml.Serialization.XmlIgnore]
        public string PARAMTER_DEF_FULL_URL_PATH
        {
            get { return pARAMTER_DEF_FULL_URL_PATHField; }
            set { pARAMTER_DEF_FULL_URL_PATHField = value; }
        }
}

PARAMTER_DATA_SET_VALUE:用来保存当前配置工具的配置值。也就是我们后续的配置工具显示是以配置模型的设计为基础,配置数据的对象仅仅用来保存输出ARXML文件。

保存: 配置模型转换为配置数据,通过序列化配置数据对象为ARXML文件

打开:解析配置数据,查找对应的配置模版,加载配置数据的值到配置模版的对象中。

新建: 选择配置模版,根据模版中的嵌套属性创建配置模版的一个实例,再根据配置需求,增加多个配置项实例。

具体参考后续介绍。

3.3 System.Xml.Serialization.XmlIgnore

[System.Xml.Serialization.XmlIgnore] 是为了防止新增的属性在序列化输出ARXML文件时,额外生成相关属性内容,而这些内容并不是AUTOSAR标准定义的。

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值