This demo shows one way to check a model to ensure that the prelook-up blocks have breakpoint data lengths that match the corresponding dimensions of table data for connected interpolation blocks. (Open the model: matlab:sldemo_bpcheck)
The PreLook-Up Index Search block allows you to minimize the number of index searches performed across a set of look-up tables and also to mix clipping, extrapolation, and index search algorithms within one table calculation.
mdl = 'sldemo_bpcheck';
open_system(mdl)
This capability introduces a need to ensure that the breakpoint array length in the prelook-up blocks matches the corresponding table dimension in the connected interpolation block(s). The M-function matlab:edit('slcheckprelookups.m') can analyze a model and report on any mismatches it encounters between prelookup and interpolation blocks.
Errors have been deliberately introduced in the model to illustrate the use of a breakpoint checking tool that analyzes the model and ensures the breakpoint lengths match the table dimensions.
chkblks = slcheckprelookups('sldemo_bpcheck')
Checked 5 interpolation blocks, found 4 issues to review. Index list: 1, 2, 6, 10 chkblks = 1x10 struct array with fields: interpBlkName interpBlkPort interpBlkParam interpBlkDimSize prelookupName prelookupParam prelookupSize mismatch errorMsg
This model has 3 blocks with data inconsistencies. Note that it is possible to have up to one inconsistency per dimension, so a 3-D table could have up to 3 inconsistencies. Here is the set of mismatched items from the full set of checked blocks, along with details on the first mismatch in the list:
mismatches = find([chkblks.mismatch] == true) chkblks(mismatches(1))
mismatches = 1 2 6 10 ans = interpBlkName: [1x86 char] interpBlkPort: 1 interpBlkParam: 'reshape([1:300], [10,6,5])' interpBlkDimSize: 10 prelookupName: [1x54 char] prelookupParam: '[0:10:100]' prelookupSize: 11 mismatch: 1 errorMsg: ''
[Close the model to reset the screen capture]
close_system(mdl)
The interpolation blocks with mismatch issues can be highlighted using Simulink's hilite_sytem() command:
open_system(mdl) for k = 1:length(mismatches) hilite_system( chkblks(mismatches(k)).interpBlkName, 'error' ); end
NOTE: you can remove highlighting from a model using the View / Remove highlighting menuitem or this command:
set_param(mdl,'HiliteAncestors','none')