{"id":102,"date":"2010-09-01T16:18:25","date_gmt":"2010-09-01T16:18:25","guid":{"rendered":"https:\/\/blogs.mathworks.com\/seth\/2010\/09\/01\/model-reference-variants\/"},"modified":"2019-02-20T08:37:19","modified_gmt":"2019-02-20T13:37:19","slug":"model-reference-variants","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/simulink\/2010\/09\/01\/model-reference-variants\/","title":{"rendered":"Model Reference Variants"},"content":{"rendered":"<style type=\"text\/css\">\r\n\/* Publisher style MATLAB code *\/ \r\n\r\npre.codeinput {\r\n  background: #EEEEEE;\r\n  padding: 10px;\r\n}\r\n@media print {\r\n  pre.codeinput {word-wrap:break-word; width:100%;}\r\n} \r\n\r\nspan.keyword {color: #0000FF}\r\nspan.comment {color: #228B22}\r\nspan.string {color: #A020F0}\r\nspan.untermstring {color: #B20000}\r\nspan.syscmd {color: #B28C00}\r\n\r\npre.codeoutput {\r\n  color: #666666;\r\n  padding: 10px;\r\n}\r\n\r\npre.error {\r\n  color: red;\r\n}\r\n<\/style>\r\n\r\n<p><strong>Update February 2019<\/strong><\/p>\r\n\r\n<p><a href=\"https:\/\/www.mathworks.com\/help\/releases\/R2010a\/toolbox\/simulink\/ug\/bsdwnim.html\">Model Reference Variant<\/a> will be deprecated soon. Instead, we recommend that you place the <a href=\"https:\/\/www.mathworks.com\/help\/releases\/R2018b\/simulink\/slref\/model.html\">Model<\/a> block inside a <a href=\"https:\/\/www.mathworks.com\/help\/releases\/R2018b\/simulink\/slref\/variantsubsystem.html\">Variant Subsystem<\/a>, as shown in this image:<\/p>\r\n\r\n<p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/simulink\/2019Q1\/variantMdlRef.png\" alt=\"Model block inside variant subsystem\" \/><\/p>\r\n\r\n<p>To convert your existing models, you can use <a href=\"https:\/\/www.mathworks.com\/help\/releases\/R2018b\/simulink\/slref\/simulink.variantmanager.converttovariant.html\">Simulink.VariantManager.convertToVariant<\/a> or run the Upgrade Advisor check <a href=\"https:\/\/www.mathworks.com\/help\/releases\/R2018b\/simulink\/slref\/simulink-checks_bq6d4aa-1.html#mw_016aa9ea-e529-468e-ab57-2507222dcd5d\">Identify Variant Model blocks and convert those to Variant Subsystem containing Model block choices<\/a>.<\/p>\r\n\r\n<p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/simulink\/2019Q1\/VariantAdvisor.png\" alt=\"Upgrade Advisor\" \/><\/p>\r\n\r\n\r\n\r\n<p>-------------<\/p>\r\n\r\n<p>By <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/31651\">Guy Rouleau<\/a><\/p>\r\n\r\n<p>In a <a href = \"https:\/\/blogs.mathworks.com\/seth\/2008\/12\/05\/the-answer-for-large-scale-modeling-model-reference\">previous post<\/a>, Seth introduced the concept of <a href = \"https:\/\/www.mathworks.com\/help\/releases\/R2010a\/toolbox\/simulink\/ug\/bq_5wvg-1.html\">Model Reference<\/a> and the advantages it brings for dealing with large models. Since MATLAB R2009b, <a href = \"https:\/\/www.mathworks.com\/help\/releases\/R2010a\/toolbox\/simulink\/ug\/bsdwnim.html\">Model Reference Variants<\/a> make it easy to reconfigure your model for different design variants.  <\/p>\r\n\r\n\r\n<p><strong>What are Model Reference Variants?<\/strong><\/p>\r\n\r\n<p>In Model-Based Design, you want your design process to be centered around a single model, however, design variations may require different implementations for different purposes.  For example, imagine that you want to model a vehicle that has three possible engine configurations:<\/p>\r\n<ul>\r\n<li>4 cylinder gas<\/li>\r\n<li>6 cylinder gas<\/li>\r\n<li>4 cylinder diesel<\/li>\r\n<\/ul>\r\n\r\n<p>Using model reference variants, you could implement each engine model as a separate reference model and then switch between them based on the value of some variables in your workspace. <\/p>\r\n\r\n<p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/seth\/2010Q3\/sf_car_variantModel.png\", alt=\"Model Reference Variants allow a single model block to be configured for multiple variants.  This image has Diesel and Gas Variants, 4 and 6 Cylinder\"><\/p>\r\n\r\n<p><strong>How does that work?<\/strong><\/p>\r\n\r\n<p>To begin, drag a <a href = \"https:\/\/www.mathworks.com\/help\/releases\/R2010a\/toolbox\/simulink\/slref\/model.html\">Model block<\/a> from the Simulink Library Browser and double-click on it. Instead of entering the name of one model you want to reference, click the Enable Variants button.<\/p>\r\n\r\n<p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/seth\/2010Q3\/ModelRefDialog.png\" alt=\"Model Reference Block Dialog\"><\/p>\r\n\r\n<p>The Model Reference dialog window will change to enable you to define <a  href = \"https:\/\/www.mathworks.com\/help\/releases\/R2010a\/toolbox\/simulink\/ug\/bsdwnim.html#br6h716-1\">Variant choices<\/a><\/p> \r\n\r\n<p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/seth\/2010Q3\/EngineVariants.png\" alt=\"Model Reference Block Dialog with Variants enabled.\"><\/p>\r\n\r\n<p>For each variant specified in the Model Reference block, create a <a href = \"https:\/\/www.mathworks.com\/help\/releases\/R2010a\/toolbox\/simulink\/slref\/simulink.variant.html\">Simulink.Variant<\/a> object. The Simulink.Variant object specifies a Boolean expression called a variant condition. When running the model, the Model Reference block evaluates the variant conditions of the Simulink.Variant objects to determine which model is active.<\/p>\r\n\r\n<p>For the example described above, define variants for all three options:<\/p>\r\n\r\n\r\n<p><pre class=\"codeinput\">\r\nEng4cGAS = Simulink.Variant(<span class=\"string\">'(cyl==4) && (fuel==1)'<\/span>);\r\nEng6cGAS = Simulink.Variant(<span class=\"string\">'(cyl==6) && (fuel==1)'<\/span>);\r\nEng4cDIESEL = Simulink.Variant(<span class=\"string\">'(cyl==4) && (fuel==2)'<\/span>);\r\n<\/pre><\/p>\r\n\r\n<p>Define variables in the base workspace needed by the variant conditions:<\/p>\r\n\r\n<p><pre class=\"codeinput\">\r\nfuel = 1;\r\ncyl = 4;\r\n<\/pre><\/p>\r\n\r\n<p>In the parent model, the model block displays the name of the active model and an additional icon <img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/seth\/2010Q3\/usesvariants.gif\">.<\/p>\r\n\r\n<p><strong>Now it\u2019s your turn!<\/strong><\/p>\r\n\r\n<p>Are you using the model reference variants?  Leave a comment <a href=\"https:\/\/blogs.mathworks.com\/seth\/?p=102&#comment\">here.<\/a><\/p>\r\n\r\n<p><em><strong>UPDATE - 10\/15\/2013:<\/strong> New capabilities starting in R2013b.<\/em><\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>\r\n\/* Publisher style MATLAB code *\/ \r\n\r\npre.codeinput {\r\n  background: #EEEEEE;\r\n  padding: 10px;\r\n}\r\n@media print {\r\n  pre.codeinput {word-wrap:break-word; width:100%;}\r\n} \r\n\r\nspan.keyword {color:... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/simulink\/2010\/09\/01\/model-reference-variants\/\">read more >><\/a><\/p>","protected":false},"author":40,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[66,16],"tags":[149,441],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/simulink\/wp-json\/wp\/v2\/posts\/102"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/simulink\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/simulink\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/simulink\/wp-json\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/simulink\/wp-json\/wp\/v2\/comments?post=102"}],"version-history":[{"count":5,"href":"https:\/\/blogs.mathworks.com\/simulink\/wp-json\/wp\/v2\/posts\/102\/revisions"}],"predecessor-version":[{"id":8662,"href":"https:\/\/blogs.mathworks.com\/simulink\/wp-json\/wp\/v2\/posts\/102\/revisions\/8662"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/simulink\/wp-json\/wp\/v2\/media?parent=102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/simulink\/wp-json\/wp\/v2\/categories?post=102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/simulink\/wp-json\/wp\/v2\/tags?post=102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}