slcoverage.SFcnSelector 类
命名空间: slcoverage
选择 S-Function 标准作为过滤规则
描述
使用 slcoverage.SFcnSelector 类的对象来指定过滤器规则的 S-Function 选择准则。
slcoverage.SFcnSelector 类是 handle 类。
创建对象
sel = slcoverage.SFcnSelector(type,id) 根据 S-Function 模块 SFcnSelector 创建指定 type 的 id 对象,并设置 Type 和 Id 属性。
sel = slcoverage.SFcnSelector(type,id,fileName) 根据指定的 C 或 C++ SFcnSelector 创建 fileName 对象,并设置 FileName 属性。
sel = slcoverage.SFcnSelector(type,id,fileName,functionName) 根据指定文件中的指定 C 或 C++ SFcnSelector 创建 functionName 对象并设置 FunctionName 属性。
sel = slcoverage.SFcnSelector(type,id,fileName,functionName,expr,exprIndex) 根据指定的表达式和 SFcnSelector 创建 exprIndex 对象并设置 Expr 和 ExprIndex 属性。
sel = slcoverage.SFcnSelector(type,id,fileName,functionName,expr,exprIndex,outcomeIndex) 根据指定的覆盖率结果创建一个 SFcnSelector 对象并设置 OutcomeIndex 属性。
sel = slcoverage.SFcnSelector(type,id,fileName,functionName,expr,exprIndex,outcomeIndex,parentExprIndex) 根据指定的覆盖率结果创建一个 SFcnSelector 对象,其父对象是 parentExprIndex 指定的另一个表达式,并设置 DecOrCondIndex 属性。
属性
要选择的 S-Function 类型,指定为 slcoverage.SFcnSelectorType 类的枚举:
slcoverage.SFcnSelectorType.SFcnName选择指定的 S-Function。slcoverage.SFcnSelectorType.SFcnInstanceCppFileName选择该模块生成的代码文件。将此输入参量与fileName参量一起使用。slcoverage.SFcnSelectorType.SFcnInstanceCppFunction选择 C 或 C++ 函数的实例。将此输入参量与fileName和functionName参量一起使用。slcoverage.SFcnSelectorType.SFcnInstanceCppCondition在指定的代码中选择一个条件。将此输入参量与fileName、functionName、expr和exprIndex参量一起使用。slcoverage.SFcnSelectorType.SFcnInstanceCppDecision在指定的代码中选择一个决策。将此输入参量与fileName、functionName、expr和exprIndex参量一起使用。slcoverage.SFcnSelectorType.SFcnInstanceCppDecisionOutcome在指定的代码中选择一个决策结果。将此输入参量与fileName、functionName、expr、exprIndex和outcomeIndex参量一起使用。slcoverage.SFcnSelectorType.SFcnInstanceCppConditionOutcome在指定的代码中选择一个条件结果。将此输入参量与fileName、functionName、expr、exprIndex和outcomeIndex参量一起使用。如果拥有结果的表达式由父决策拥有,则也使用parentExprIndex参量。slcoverage.SFcnSelectorType.SFcnInstanceCppMCDCOutcome在指定的代码中选择 MCDC 结果。将此输入参量与fileName、functionName、expr、exprIndex和outcomeIndex参量一起使用。slcoverage.SFcnSelectorType.SFcnInstanceCppRelationalBoundaryOutcome在指定的代码中选择关系边界结果。将此输入参量与fileName、functionName、expr、exprIndex和outcomeIndex参量一起使用。如果关系运算符结果由决策内部的条件拥有,则也使用parentExprIndex参量。
数据类型: slcoverage.SFcnSelectorType
模型元素标识符,指定为元素的属性名称、元素的句柄或元素的 Simulink 标识符。对选择实例的选择器类型使用句柄或 ID。使用属性名称(例如模块的 'BlockType' 属性的值)来选择多个模型元素。
属性
SetAccess | 受保护 |
数据类型: char | string | handle | integer
要选择的 C 或 C++ 文件,指定为字符数组或字符串数组。
示例: 'myfile.c'
属性:
SetAccess | 受保护 |
数据类型: char | string
要选择的 C 或 C++ 函数,指定为字符数组或字符串数组。
示例: 'counterbusFcn'
属性:
SetAccess | 受保护 |
数据类型: char | string
要选择的表达式,指定为字符数组或字符串数组。
示例: 'inputGElower'
属性:
SetAccess | 受保护 |
数据类型: char | string
表达式索引,指定为整数。如果您正在过滤结果,此属性就是拥有该结果的表达式的索引。如果您正在过滤表达式,则此属性是函数主体内该表达式的索引。
示例: 2
属性:
SetAccess | 受保护 |
数据类型: single | double | int
要选择的结果索引,指定为整数:
对于布尔表达式,输入
1表示F结果,或者输入2表示T结果。对于类型
slcoverage.SFcnSelectorType.SFcnInstanceCppMCDCOutcome,请输入表达式内的条件的索引号。对于 switch/case 语句,第一个 case 输入
1,第二个 case 输入2,依此类推。对于关系边界
整数类型:
输入
1作为类型-1。输入
2作为类型+1。输入
3作为类型0。
浮点类型:
输入
1替换[-tol 0]或[-tol 0)。输入
2得到(0 tol]或[0 tol]则结果为2
有关关系边界覆盖率的更多信息,请参阅关系边界覆盖率。
示例: 2
属性
SetAccess | 受保护 |
数据类型: single | double | int
父表达式索引,指定为整数。使用此输入来过滤父决策或条件所拥有的表达式;这是相对于函数的父决策或条件的索引。
示例: 2
属性
SetAccess | 受保护 |
数据类型: single | double | int
选择器的描述,以字符向量形式返回。Simulink Coverage™ 根据选择器创建描述。
属性:
GetAccess | public |
SetAccess | 受保护 |
用于创建此选择器对象的代码,以字符向量形式返回。
属性:
GetAccess | public |
SetAccess | 受保护 |
方法
allSelectors | 模型或代码元素的选择器 |
示例
此示例展示如何创建 S-Function 选择器。
使用 load_system 加载模型。
load_system('slvnvdemo_covfilt');
使用 slcoverage.SFcnSelector 创建一个 S-Function 选择器。要根据名称选择 S-Function,请输入 slcoverage.SFcnSelectorType.SFcnName 作为第一个输入。第二个输入是 S-Function 的路径。
sel = slcoverage.SFcnSelector(slcoverage.SFcnSelectorType.SFcnName,... 'slvnvdemo_covfilt/Mode Logic/ SFunction')
sel =
SFcnSelector with properties:
FileName: ''
FunctionName: ''
Expr: ''
OutcomeIndex: []
DecOrCondIndex: []
Description: 'N/A'
Type: SFcnName
Id: 'slvnvdemo_covfilt/Mode Logic/ SFunction'
ConstructorCode: 'slcoverage.SFcnSelector(slcoverage.SFcnSelectorType.SFcnName, 'slvnvdemo_covfilt/Mode Logic/ SFunction')'
此示例展示如何使用 slcoverage.SFcnSelector 类为 S-Function 创建选择器。
在此示例中,您的模型有一个名为 RejectDoublePress_sfun 的 S-Function。在 S-Function 中,假设条件 rtb_AccelResSwOUT 永远不会为 false,并且您想要在覆盖率报告中申述这个 false 结果。

加载模型。
modelName = 'ex_cc_cruise_control_doublepress_sfun';
load_system(modelName)
使用 Simulink.SimulationInput 对象配置覆盖率设置。
covSet = Simulink.SimulationInput(modelName); covSet = covSet.setModelParameter('CovEnable','on'); covSet = covSet.setModelParameter('CovMetricStructuralLevel','ConditionDecision'); covSet = covSet.setModelParameter('CovSFcnEnable','on'); covSet = covSet.setModelParameter('CovSaveSingleToWorkspaceVar','on'); covSet = covSet.setModelParameter('CovSaveName','covData'); covSet = covSet.setModelParameter('SimAnalyzeCustomCode','on');
使用 covSet 作为输入来仿真模型。
simOut = sim(covSet); covData = simOut.covData;
Generating 'RejectDoublePress_sfun.c' ....Please wait
### <a href="matlab:edit('RejectDoublePress_sfun.c')">'RejectDoublePress_sfun.c'</a> created successfully ### <a href="matlab:edit('RejectDoublePress_sfun_wrapper.c')">'RejectDoublePress_sfun_wrapper.c'</a> created successfully ### <a href="matlab:edit('RejectDoublePress_sfun.tlc')">'RejectDoublePress_sfun.tlc'</a> created successfully
### Building S-function 'RejectDoublePress_sfun.c' for ex_cc_cruise_control_doublepress_sfun/RejectDoublePress
MEX Command used: slcovmex('-internalfile', 'RejectDoublePress_sfun.c','-R2018a','RejectDoublePress_sfun.c','RejectDoublePress_sfun_wrapper.c','-I/tmp/Bdoc25a_2864802_2299340/tpc2c76115/slcoverage-ex97019589','-DUSE_PUBLISHED_ONLY') :
mex -R2018a -I/tmp/Bdoc25a_2864802_2299340/tpc2c76115/slcoverage-ex97019589 -DUSE_PUBLISHED_ONLY /tmp/Bdoc25a_2864802_2299340/tp554bd594_48a5_42dd_9de2_a8d476ae23b3/tp2221f631_7dfc_41b4_abac_829772dc5e8d.c /tmp/Bdoc25a_2864802_2299340/tp554bd594_48a5_42dd_9de2_a8d476ae23b3/tp414e9051_813b_46cb_88d4_c354cbb4486b.c -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output RejectDoublePress_sfun
Building with 'gcc'.
MEX completed successfully.
mex -R2018a -I/tmp/Bdoc25a_2864802_2299340/tpc2c76115/slcoverage-ex97019589 -DUSE_PUBLISHED_ONLY /tmp/Bdoc25a_2864802_2299340/tp554bd594_48a5_42dd_9de2_a8d476ae23b3/RejectDoublePress_sfun.c RejectDoublePress_sfun_wrapper.c /tmp/Bdoc25a_2864802_2299340/tp554bd594_48a5_42dd_9de2_a8d476ae23b3/tpcc0762d7_a542_4641_9cf9_4bdb8a9fdc1b.c /tmp/Bdoc25a_2864802_2299340/tp554bd594_48a5_42dd_9de2_a8d476ae23b3/tpa43fee44_69f7_45d2_a8b4_81fd6624b36d.c -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output RejectDoublePress_sfun
Building with 'gcc'.
MEX completed successfully.
使用 slcoverage.SFcnSelector 类为缺失覆盖率的结果创建选择器对象。要在 S-Function 中选择条件结果,请使用 SFcnInstanceCppConditionOutcome 枚举作为第一个输入。第二个输入是 S-Function 的模块 ID 或模块路径。第三个输入是包含表达式的源文件的文件名,RejectDoublePress_sfun_wrapper.c。第四个输入是包含条件的函数名称,RejectDoublePress_sfun_Outputs_wrapper。第五个输入是拥有结果的表达式,即 rtb_AccelResSwOUT && CoastSetSwIn[0],因为这个父决策拥有条件 rtb_AccelResSwOUT。
第六个输入是相对于其父级具有结果的表达式的索引,并且因为 rtb_AccelResSwOUT 是其父级决策中的第一个条件,所以该输入是 1。第七个输入是结果索引,它是 1,因为这是布尔表达式的 F case。最后的输入是父表达式相对于函数的索引,并且因为 rtb_AccelResSwOUT && CoastSetSwIn[0] 是函数中的第二个决策,所以这个输入是 2。
enum = slcoverage.SFcnSelectorType.SFcnInstanceCppConditionOutcome; SFunID = Simulink.ID.getSID([modelName, '/RejectDoublePress']); sel = slcoverage.SFcnSelector(enum,SFunID,'RejectDoublePress_sfun_wrapper.c',... 'RejectDoublePress_sfun_Outputs_wrapper','rtb_AccelResSwOUT && CoastSetSwIn[0]',1,1,2);
创建一个 Filter 对象和一个基于选择器的规则,然后将该规则添加到过滤器。
filt = slcoverage.Filter; rule = slcoverage.FilterRule(sel,'Tested elsewhere',... slcoverage.FilterMode.Justify); addRule(filt,rule); setFilterName(filt,'S-Function Filter')
将过滤器保存为 sfunfilter,并通过将 my_func.c 属性设置为过滤器文件名,将其添加到 filter 的 cvdata 对象中。
save(filt,'sfunfilter'); covData.filter = 'sfunfilter';
生成覆盖率报告。
cvhtml('codeCovReport',covData);
审查报告。点击 S-Function 代码覆盖率结果下的 RejectDoublePress_sfun 链接,查看从覆盖率分析过滤的对象下的过滤结果。
版本历史记录
在 R2017b 中推出您可以使用新的 slcoverage.SFcnSelectorType 枚举来申述代码覆盖率结果,而无需排除整个表达式:
slcoverage.SFcnSelectorType.SFcnInstanceCppDecisionOutcomeslcoverage.SFcnSelectorType.SFcnInstanceCppConditionOutcomeslcoverage.SFcnSelectorType.SFcnInstanceCppMCDCOutcomeslcoverage.SFcnSelectorType.SFcnInstanceCppRelationalBoundaryOutcome
使用新的 slcoverage.SFcnSelectorType 枚举时,使用这些新属性作为可选输入参量:
outcomeIndexDecOrCondIndex
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)