connect

Connect signals of dmss model(s)

Contents

Syntax

sys = connect(sys) Connect an appended system based on signal names

sys = connect(sys, stateConnections, algebraicConnections, booleanConnections, similarInputs) Connect an appended system based on indexes (state-input-/ algebraic-inputs-/ boolean-input-connections and similar inputs). Indexes are parsed as connection matrices with input indexes in the first column and the variable indices in the following columns [inputIdx, variableIdx, ...; ...]. If more then 2 values are in a row a additional (linear) connection equation will be added: u = var(1) + var(2) + ... If a variable index is parsed as negative value it is subtracted in the connection equation: u = -var(1) ...

sys = connect(sys1, sys2, ..., sysN): Connect multiple systems based on signal names

Examples

Connect via index matrices: simplified HVAC system

The supplied room of an HVAC system can be modelled by its power and transport balance, as well as the enthalpy equation for the humid air.

powerBalance = ["0 = -m*dx1 + u1 + u2"];
transportBalance = ["0 = -m*dx2 + u3"];
enthalpy = ["x1 = c_d * y1 + c_v * y1 * x2 + r0 * x2"];
room = sym2dmss([powerBalance; transportBalance; enthalpy], 0, ["dx", "x", "u", "y"]);

where x1 is the room air enthalpy, x2 is the absolute room air humidity, dx1 and dx2 are their derivatives, y1 is the room temperature, u1 is the heat transfered by the air flow of the air conditioning system (either heating or cooling the room air), u2 is the heat loss to the environment and u3 is the water vapor mass flow transfered by the air flow of the air conditioning system (either humidifying or dehumidifying the room air).

The energy and humidity transfer by the air conditioning system can be modelled by the following equations

airConditioning = ["y1 = c_d*u1*u2 + c_v*u1*u2*u3 + r0*u1*u3 - u1*u4";...
                    "y2 = u1*u3 - u1*u5"];
airConditioning = sym2dmss(airConditioning, 0, ["dx", "x", "u", "y"]);
Reduced by 1 column(s) and 0 equation(s) with trivial Reduction due to duplications.

where y1 corresponds to the heat transfered by the air flow of the air conditioning system, y2 to the water vapor mass flow transfered by the air flow of the air conditioning system, u1 to the supplied mass flow of air, u2 to the supply temperature, u3 to the supply humidity, u4 to the rooms enthalpy and u5 to the rooms absolute humidity.

Additionally the heating loss to the environment can be calculated by

loss = ["y1 = k*A*(u1-u2)"];
loss = sym2dmss(loss, 0, ["dx", "x", "u", "y"]);

where y1 is the heat loss, u1 is the ambient temperature and u2 is the rooms temperature.

The component models can be appended to obtain an overall model of the system

sys = append(room, airConditioning, loss);
disp(sys.symbolicEquations)
Unable to perform assignment because value of type 'sym' is not convertible to 'double'.

Error in dmss/append/insertDiagonally (line 146)
        Mout.c(idxRows, idxCols) = M2.c;

Error in dmss/append (line 92)
    sysOut.H.phi.equality = insertDiagonally(sysOut.H.phi.equality, sys2.H.phi.equality, nEqi+1:nEqi+sys2.nEq, Ri+1:Ri+R2);

Error in connectDoc (line 57)
sys = append(room, airConditioning, loss);

Caused by:
    Error using mupadengine/feval2char
    Unable to convert expression containing symbolic variables into double array. Apply 'subs' function first to substitute values for variables

Due to the appending the number of variables as well as their index is increasing accordingly.

The input and output signals can be connected by using connection matrices, where the first column corresponds to the input index and the second column to the state/algebraic signal index.

stateInputConnection = [7 1; 8 2];
algebraicInputConnection = [9 1; 1 2; 3 3; 2 4];
similarInputs = [];
sys = sys.connect(stateInputConnection, algebraicInputConnection, [], similarInputs);

disp(sys.symbolicEquations)

Connect via signal names: simplified HVAC system

Anopther way of connecting the sub-models is via signal names. Therefor the signal names need to be set accordingly. For the naming it is important that there are no duplicats in the states and algebraic variable names. If there are duplicats in the input names, they will be set as similar inputs.

room.stateName = ["room enthalpy", "room humidity"];
room.algebraicName = ["room temperature"];
room.inputName = ["heat transfer by air conditioning", "heat loss", "humidity transfer by air conditioning"];

airConditioning.algebraicName = ["heat transfer by air conditioning", "humidity transfer by air conditioning"];
airConditioning.inputName = ["air flow", "supply temperature", "supply humidity", "room enthalpy", "room humidity"];

loss.algebraicName = ["heat loss"];
loss.inputName = ["ambient temperature", "room temperature"];

sys = connect(room, airConditioning, loss);

disp(sys.symbolicEquations)

References

See also

dmss, append, sym2dmss, replaceSymbolicParameters

Author(s): Torben Warnecke