User Tools

Site Tools


bok:eng:mbse:sysml:para

This is an old revision of the document!


Parametric Modeling and Simulations with Modelica

Keywords

Constraints have certain reserved keywords. They are

  • der - Derivative, e.g. der(x)

Common Built-in Variables can be modified in the 'Edit Constraint Block'. Click the 'Edit Built-in Variable' button. If you have more than one then separate them with a ','. Recommend to add: time

Organizing Parametric Modeling

  • Create a package where you want to do your parametric modeling. I've kept it simple and called it 'Modeling'

  • Create a block diagram for this package

  • Inside the BDD insert a Block and give it the name of your parametric model. I've called it 'Water_Quality_Model'

When you want to run the simulation Modelica is relatively harsh when it comes to parsing your model. Make sure to remove spaces and any special characters from your element names.

  • Add to the package relevant Constraint Blocks. Add part association relationships between constraint blocks (source) to the model block (target).

Modelica will assign classes to your Constraint Blocks. If the usage of the block is not assigned a name Sparx EA assigns it 'unnamed element'. Because Modelica doesn't like spaces within name it throws an error therefore you need to assign a name to each Constraint Block instance. Double click the part association relationship to open the Properties editor. In Source tab assign a name without spaces or special characters.

  • Add equations to your Constrain Blocks. If you will use an equation more than once (e.g. Inversion: a = 1/b) add another part association relationship between the Constraint Block and the Model Block. Don't forget to add a name to the additional usage to avoid confusion later.
  • You can't just have equations, you need inputs and outputs. Add to the BDD relevant Blocks that holds these inputs and outputs. Add a reference association relationship between these blocks and the Model Block

If you are linking blocks that reside in a different namespace then you will need to add a Package Import relationship between the Modeling package to the package that contains the elements you want to use

  • With the building blocks ready for your parametric model you need to actually create the parametric relationships between the inputs, outputs and equation variables. Right click the Model Block → Add Child Diagram… → Parametric Diagram
  • In the PAR diagram make sure to use the Binding Connector between variables. If you have a variable that doesn't have a connection it may suggest that you've missed something

This should be a Warning and not an Error. E.g. if you have a summation equation that is 'a=b+c+d' but you only want to add 2 variables, b and c then d doesn't have a connection.

  • Making PAR diagrams look presentable is hard and probably takes as long if not longer than making all the connections. If you have a coffee break and looking for something to do then get to making your parametric model look presentable. Welcome to the churn!

Customized Functions

The below is largely based on Creating a Parametric Model: Simulation Functions by Sparx Enterprise Architect which can be found here.

  • Unfortunately SysML or Sparx EA doesn't have any mathematical functions, like 'min()' to return minimum value of a set, out of the box. That's where you come in.
  • Insert a Constraint Block, call it 'Minimum' (it doesn't have to be the same name of your function).
  • Add an Operation (right click → Features → Operations…). Click 'New Operation…'
  • Give it the same name as your intended function (here I've given it 'min').
  • In Parameters give each parameter a name, type and direction.

Need at least one input and one output.

  • The Return Type is the same as the output. I've always kept Scope Public.
  • In Stereotype if you can't find 'SimFunction' then just create it
  • With the Features window still visible right click your newly minted operation and choose Properties…
  • In the code section add the following code and save it.
min_output := 

if min_input_1 <= min_input_2 then 
	min_input_1
else 
	min_input_2;

Note that you have more code writing options if you click on the 'Code Editor…' button and ostensibly you can change the language. However I found that the chosen language is ignored and Modelica must be using its own interpreter to interpret your code.

  • Now that the min() operation has been defined you can use it in your equations.

Can I use this function in other constraint blocks?

Troubleshooting

  • If you are getting a 'parameter x of constrain y does not have an input or output relationship' when it appears to be then check the model tree. It has been known that parameters are replicated (so it looks like you have 2 parameter x where only one should be)
  • Are your blocks in a different namespace to the package that contains your simulation artifact? If so then add a package import relationship to the namespace that contains these blocks
  • Always use Binding Connector to connect parameters
  • Models, parameters, constraints and blocks name can not have any special characters, including space
bok/eng/mbse/sysml/para.1595909962.txt.gz · Last modified: 2020/07/28 04:19 by 116.236.117.198