The challenge with analysis of Simulink projects is that the storage format of Simulink .slx models looks a bit different from the user's view when opening the models in the Matlab IDE. Also, Simulink models sometimes refer to non-model files which are relevant for the analysis. This article describes how to avoid some pitfalls when configuring Teamscale analysis of Simulink projects.
The Simulink analyses implemented in Teamscale mainly focus on Simulink models (.slx files). However, Simulink models can refer to other files like Data Dictionaries (.sldd files). Also, Simulink project often contain MATLAB source-code files (.m).
To ensure that Teamscale has access to these files, make sure that they are matched by the Included file names option value in your project's connector configuration. An example option value would be **.mdl, **.slx, **.sldd, *.m (.mdl is an old format for storing Simulink models and was deprecated in 2012).
If you include MATLAB source files (.m), please also enable the language Matlab in your analysis profile.
The Simulink analysis in Teamscale is exclusively based on the information encoded in the analyzed files (.slx, .sldd). For some Simulink block types, this information deviates from the information shown in the MATLAB UI (e.g., block-type names). To configure Simulink analyses correctly, you have to use the block-type names encoded in the .slx files, not the MATLAB-UI names.
For example, our analysis Prohibited Simulink standard blocks inside controllers reports blocks of certain types if they are used in Simulink models. The block types that will be reported can be configured with the analysis-profile option prohibited block types, which accepts a list of block-type names and already contains a useful default list. The block-type names that are given in this option are matched against the "internal" block-types given in the .slx files, not against the "UI" block names shown in the MATLAB IDE.
For example, the block of (internal) type Sum are sometimes shown as Add type in MATLAB. Similarly, the internal type MultiPortSwitch may be shown as Index Vector and DataStoreWrite is shown as Data Store Write. To determine the internal type name for a given block, you can consult the MATLAB documentation consult the MATLAB documentation. This documentation page contains the UI names and the corresponding internal names in parentheses (e.g., Zero-Pole (ZeroPole)) for many standard block types.
Some block types offered in the Simulink library browser are actually links to Subsystems implemented in the Simulink standard library. For example, the block type Transfer Fcn First Order is implemented in simulink/Discrete/Transfer Fcn First Order. When you instantiate this block in a model, MATLAB actually adds a block of type Reference which has a property SourceType with value First Order Transfer Fcn.
Several Teamscale analysis options allow to specify such source types in addition to normal block types (this is documented in the corresponding option descriptions). For example, the option Visually clear block types of our check Check the display attributes of block names lists the Compare To Zero source type (in the default configuration). When the analysis encounters a block of type Reference it tries to match the block's SourceType property against the listed types (instead of the string Reference).