Excel管理Simulink SWC中的标定量与观测量之观测量

前言

在之前的一篇关于Simulink标定量与观测量的文章中,传送门:Excel管理Simulink SWC中的标定量与观测量之标定量

主要介绍了基于Excel的标定量m文件自动生成。对于观测量来说,若是采用Simulink Signal方式,生成起来更加简单。本文将详细介绍观测量的m文件自动生成。

观测量的格式

通过Simulink手动建立一个Signal,主要参数界面如下:


导出的m文件如下:

Sig1 = Simulink.Signal;
Sig1.CoderInfo.StorageClass = 'ExportedGlobal';
Sig1.CoderInfo.Identifier = '';
Sig1.CoderInfo.Alignment = -1;
Sig1.Description = 'test';
Sig1.DataType = 'uint16';
Sig1.Min = 0;
Sig1.Max = 65535;
Sig1.DocUnits = 's';
Sig1.Dimensions = -1;
Sig1.DimensionsMode = 'auto';
Sig1.Complexity = 'real';
Sig1.SampleTime = -1;
Sig1.InitialValue = '0';

主要的参数如下:

MeasureName:观测量名

StorageClass:存储类,都设置为ExportedGlobal,即全局变量

DataType:数据类型

Min:最小值,在A2L导入标定工具测量时会有影响

Max:最大值,在A2L导入标定工具测量时会有影响

DocUnits:单位

Dimensions:维度,如果测量的是多个数据,需要设定该值
Complexity:实数or虚数,基本都是实数

Description:描述信息

Excel表格式

以单个观测量和数组观测量为例,设定参数如上图所示。

观测量暂时没有用到多维的,初始值也按一个值处理。

maltab脚本解析Excel信息

解析观测量参数所在列

与标定量类似,先找到观测量参数所在列

Measurementcolumn = {'MeasureName','DataType','InitialValue','Min',...
    'Max','Unit','Dimensions','StorageClass','Complexity','Description'};
[~,Sheet_Cell] = xlsfinfo(Excel_Name)
...
[~,~,Measurement]  = xlsread(Excel_Name,Sheet_Cell{ii})%获取观测量表中的信息
        Measurecolumn_num = size(Measurement,2);%获取列数
        Measurerow_num = size(Measurement,1);%获取行数
        %获取参数在表中的列数
        for j = 1:Measurecolumn_num
            for jj = 1:length(Measurementcolumn)
                if strcmpi(Measurement{1,j},Measurementcolumn{jj})
                    Measurement_column_num(j) = jj;%Parameter所在列
                    break;
                else
                    Measurement_column_num(j) = 0;
                end 
                
            end
        end
        for ii = 1:Measurecolumn_num%找不到对应列名称时报错
            if Measurement_column_num(ii) == 0
                    error('not find Measurementcolumn:%s',Measurementcolumn{ii});
            end
        end

循环写Measurement参数信息

对于Measurement来说,不需要特别处理。部分代码如下:

        output_m_file = 'Model_Measurement.m';
        fid = fopen(output_m_file,'wt');
        for row = 2:Measurerow_num 
            if ~isnan(Measurement{row,Measurement_column_num(1)})           
                MeasurementName = Measurement{row,Measurement_column_num(1)};
                MeasurementDataType = Measurement{row,Measurement_column_num(2)};
                MeasurementInitialValue = Measurement{row,Measurement_column_num(3)};
                MeasurementInitialValue = num2str(MeasurementInitialValue);

                outputMeasurement_str = strcat(MeasurementName,' = ','Simulink.Signal',';\n');
                fprintf(fid,outputMeasurement_str);
                outputMeasurement_str = strcat(MeasurementName,'.CoderInfo.StorageClass',' = ','''ExportedGlobal''',';\n');
                fprintf(fid,outputMeasurement_str);
                outputMeasurement_str = strcat(MeasurementName,'.DataType',' = ','''',MeasurementDataType,'''',';\n');
                fprintf(fid,outputMeasurement_str);
                outputMeasurement_str = strcat(MeasurementName,'.InitialValue',' = ','''',MeasurementInitialValue,'''',';\n');
                fprintf(fid,outputMeasurement_str);
                fprintf(fid,'\n');
            end
        end
        fclose(fid);

数字需要转为字符串,其他正常写入就好了。

生成的m文件

MyMeasurement =Simulink.Signal;
MyMeasurement.CoderInfo.StorageClass ='ExportedGlobal';
MyMeasurement.Description ='this is my measurement';
MyMeasurement.DataType ='uint16';
MyMeasurement.Min =0;
MyMeasurement.Max =65535;
MyMeasurement.DocUnits ='mm';
MyMeasurement.Dimensions =1;
MyMeasurement.Complexity ='real';
MyMeasurement.InitialValue ='0';

MyMeasurement1 =Simulink.Signal;
MyMeasurement1.CoderInfo.StorageClass ='ExportedGlobal';
MyMeasurement1.Description ='this is my measurement1';
MyMeasurement1.DataType ='boolean';
MyMeasurement1.Min =0;
MyMeasurement1.Max =1;
MyMeasurement1.DocUnits ='

运行m文件后生成的Measurement

总结

关于Excel管理Simulink标定量和观测量,基本的已经实现了。后面如果有扩展会继续加入。

此处引入一个新的问题,若是之前就已经做好了sldd,再手动建立excel也是十分费时间的,虽然说sldd也可以转m文件,但是仍需要推送到Excel中去管理。所以sldd转m文件后应该可以导入到excel中,得到我们期望格式的Excel。此处比较麻烦的仍然是标定量的一维表和二维表,为了改起来方便,需要按我们之前设定的Excel Map格式进行转换。有时间的话将在后面的文章中介绍。


若你觉得本文对你有帮助,欢迎点赞,关注,收藏,转发~~~

你的鼓励是对小弟的最大支持~~~

建了一个WX公众号,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新~

  • 2
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赞哥哥s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值