Changes in package Modelica 1.5

New components

Modelica.Blocks.
Continuous.DerDerivative of input (= analytic differentations)
ExamplesDemonstration examples of the components of this package
Nonlinear.VariableLimiterLimit the range of a signal with variable limits
Modelica.Blocks.Interfaces.
RealPortReal port (both input/output possible)
IntegerPortInteger port (both input/output possible)
BooleanPortBoolean port (both input/output possible)
SIMOSingle Input Multiple Output continuous control block
IntegerBlockIconBasic graphical layout of Integer block
IntegerMOMultiple Integer Output continuous control block
IntegerSignalSourceBase class for continuous Integer signal source
IntegerMIBooleanMOsMultiple Integer Input Multiple Boolean Output continuous control block with same number of inputs and outputs
BooleanMIMOsMultiple Input Multiple Output continuous control block with same number of inputs and outputs of boolean type
BusAdaptorsComponents to send signals to the bus or receive signals from the bus
Modelica.Blocks.Math.
RealToIntegerConvert real to integer signals
IntegerToRealConvert integer to real signals
MaxPass through the largest signal
MinPass through the smallest signal
EdgeIndicates rising edge of boolean signal
BooleanChangeIndicates boolean signal changing
IntegerChangeIndicates integer signal changing
Modelica.Blocks.Sources.
IntegerConstantGenerate constant signals of type Integer
IntegerStepGenerate step signals of type Integer
Modelica.Electrical.Analog.Basic.
HeatingResistorTemperature dependent electrical resistor
OpAmpSimple nonideal model of an OpAmp with limitation
Modelica.Electrical.Analog.Ideal.
IdealCommutingSwitchIdeal commuting switch
IdealIntermediateSwitchIdeal intermediate switch
ControlledIdealCommutingSwitchControlled ideal commuting switch
ControlledIdealIntermediateSwitchControlled ideal intermediate switch
IdealOpAmpLimitedIdeal operational amplifier with limitation
IdealOpenerIdeal opener
IdealCloserIdeal closer
ControlledIdealOpenerControlled ideal opener
ControlledIdealCloserControlled ideal closer
Modelica.Electrical.Analog.Lines.
TLine1Lossless transmission line (Z0, TD)
TLine2Lossless transmission line (Z0, F, NL)
TLine2Lossless transmission line (Z0, F)
Modelica.Icons.
FunctionIcon for a function
RecordIcon for a record
EnumerationIcon for an enumeration
Modelica.Math.
tempInterpol2temporary routine for vectorized linear interpolation (will be removed)
Modelica.Mechanics.Rotational.
Examples.LossyGearDemo1Example to show that gear efficiency may lead to stuck motion
Examples.LossyGearDemo2Example to show combination of LossyGear and BearingFriction
LossyGearGear with mesh efficiency and bearing friction (stuck/rolling possible)
Gear2Realistic model of a gearbox (based on LossyGear)
Modelica.SIunits.
ConversionsConversion functions to/from non SI units and type definitions of non SI units
EnergyFlowRateSame definition as Power
EnthalpyFlowRateReal (final quantity="EnthalpyFlowRate", final unit="W")
Modelica.
Thermal.HeatTransfer1-dimensional heat transfer with lumped elements
ModelicaAdditions.Blocks.Discrete.
TriggeredSamplerTriggered sampling of continuous signals
TriggeredMaxCompute maximum, absolute value of continuous signal at trigger instants
ModelicaAdditions.Blocks.Logical.Interfaces.
BooleanMIRealMOsMultiple Boolean Input Multiple Real Output continuous control block with same number of inputs and outputs
RealMIBooleanMOsMultiple Real Input Multiple Boolean Output continuous control block with same number of inputs and outputs
ModelicaAdditions.Blocks.Logical.
TriggeredTrapezoidTriggered trapezoid generator
HysteresisTransform Real to Boolean with Hysteresis
OnOffControllerOn-off controller
CompareTrue, if signal of inPort1 is larger than signal of inPort2
ZeroCrossingTrigger zero crossing of input signal
ModelicaAdditions.
Blocks.Multiplexer.ExtractorExtract scalar signal out of signal vector dependent on IntegerInPort index
Tables.CombiTable1DsTable look-up in one dimension (matrix/file) with only single input

Package-specific Changes

Class-specific Changes

Modelica.SIunits

Removed final from quantity attribute for Mass and MassFlowRate.

Modelica.Blocks.Math.Sum

Implemented avoiding algorithm section, which would lead to expensive function calls.

Modelica.Blocks.Sources

Step

  block Step "Generate step signals of type Real"
    parameter Real height[:]={1} "Heights of steps";
 // parameter Real offset[:]={0} "Offsets of output signals";
 // parameter SIunits.Time startTime[:]={0} "Output = offset for time < startTime";
 // extends Interfaces.MO          (final nout=max([size(height, 1); size(offset, 1); size(startTime, 1)]));
    extends Interfaces.SignalSource(final nout=max([size(height, 1); size(offset, 1); size(startTime, 1)]));
  protected
    parameter Real p_height[nout]=(if size(height, 1) == 1 then ones(nout)*
        height[1] else height);
    parameter Real p_offset[nout]=(if size(offset, 1) == 1 then ones(nout)*
        offset[1] else offset);
    parameter SIunits.Time p_startTime[nout]=(if size(startTime, 1) == 1 then
        ones(nout)*startTime[1] else startTime);
  equation
    for i in 1:nout loop
      outPort.signal[i] = p_offset[i] + (if time < p_startTime[i] then 0 else
        p_height[i]);
    end for;
  end Step;

Exponentials

Replaced usage of built-in function exp by Modelica.Math.exp.

TimeTable

Interface definition changed from

    parameter Real table[:, :]=[0, 0; 1, 1; 2, 4] "Table matrix (time = first column)";

to

    parameter Real table[:, 2]=[0, 0; 1, 1; 2, 4] "Table matrix (time = first column)";

Did the same for subfunction getInterpolationCoefficients.

Bug in getInterpolationCoefficients for startTime <> 0 fixed:

        ...
        end if;
      end if;
      // Take into account startTime "a*(time - startTime) + b"
      b := b - a*startTime;
    end getInterpolationCoefficients;

BooleanStep

  block BooleanStep "Generate step signals of type Boolean"
    parameter SIunits.Time startTime[:]={0} "Time instants of steps";
    parameter Boolean startValue[size(startTime, 1)]=fill(false, size(startTime, 1)) "Output before startTime";
    extends Interfaces.BooleanSignalSource(final nout=size(startTime, 1));
  equation
    for i in 1:nout loop
 //   outPort.signal[i] = time >= startTime[i];
      outPort.signal[i] = if time >= startTime[i] then not startValue[i] else startValue[i];
    end for;
  end BooleanStep;

Modelica.Electrical.Analog

Corrected table of values and default for Beta by dividing them by 1000 (consistent with the values used in the NAND-example model):

Corrected parameter defaults, unit and description for TrapezoidCurrent. This makes the parameters consistent with their use in the model. Models specifying parameter values are not changed. Models not specifying parameter values did not generate trapezoids previously.

Icon layer background changed from transparent to white:

Basic.Transformer: Replaced invalid escape characters '\ ' and '\[newline]' in documentation by '|'.

Modelica.Mechanics

Rotational

Removed arrows and names documentation from flanges in diagram layer

Rotational.Interfaces.FrictionBase

    partial model FrictionBase "Base class of Coulomb friction elements"
      parameter SIunits.AngularVelocity w_small=1
        "Relative angular velocity near to zero (see model info text)";


        // Equations to define the following variables have to be defined in subclasses
      SIunits.AngularVelocity w_relfric
        "Relative angular velocity between frictional surfaces";
      SIunits.AngularAcceleration a_relfric
        "Relative angular acceleration between frictional surfaces";
      SIunits.Torque tau
        "Friction torque (positive, if directed in opposite direction of w_rel)"
        ;
      SIunits.Torque tau0 "Friction torque for w=0 and forward sliding";
      SIunits.Torque tau0_max "Maximum friction torque for w=0 and locked";
      Boolean free "true, if frictional element is not active";

      // Equations to define the following variables are given in this class
      Real sa "Path parameter of friction characteristic tau = f(a_relfric)";

      Boolean startForward(start=false, fixed=true)
        "true, if w_rel=0 and start of forward sliding or w_rel > w_small";
      Boolean startBackward(start=false, fixed=true)
        "true, if w_rel=0 and start of backward sliding or w_rel < -w_small";
      Boolean locked "true, if w_rel=0 and not sliding";

      constant Integer Unknown=3 "Value of mode is not known";
      constant Integer Free=2 "Element is not active";
      constant Integer Forward=1 "w_rel > 0 (forward sliding)";
      constant Integer Stuck=0
        "w_rel = 0 (forward sliding, locked or backward sliding)";
      constant Integer Backward=-1 "w_rel < 0 (backward sliding)";
      Integer mode(
        final min=Backward,
        final max=Unknown,
        start=Unknown,
        fixed=true);
    equation
      /* Friction characteristic
     (locked is introduced to help the Modelica translator determining
      the different structural configurations, if for each configuration
      special code shall be generated)
  */

      startForward = pre(mode) == Stuck and (sa > tau0_max or pre(startForward)
         and sa > tau0) or pre(mode) == Backward and w_relfric > w_small or
        initial() and (w_relfric > 0);
      startBackward = pre(mode) == Stuck and (sa < -tau0_max or pre(
        startBackward) and sa < -tau0) or pre(mode) == Forward and w_relfric <
        -w_small or initial() and (w_relfric < 0);
      locked = not free and not (pre(mode) == Forward or startForward or pre(
        mode) == Backward or startBackward);

      a_relfric = if locked then 0 else if free then sa else if startForward
         then sa - tau0 else if startBackward then sa + tau0 else if pre(mode)
         == Forward then sa - tau0 else sa + tau0;

      /* Friction torque has to be defined in a subclass. Example for a clutch:
       tau = if locked then sa else if free then 0 else cgeo*fn*
                (if startForward  then  Math.tempInterpol1( w_relfric, mue_pos, 2)
             else if startBackward then -Math.tempInterpol1(-w_relfric, mue_pos, 2)
             else if pre(mode) == Forward then Math.tempInterpol1(w_relfric, mue_pos, 2)
             else -Math.tempInterpol1(-w_relfric, mue_pos, 2));
  */

      // finite state machine to determine configuration
      mode = if free then Free else (if (pre(mode) == Forward or pre(mode) ==
        Free or startForward) and w_relfric > 0 then Forward else if (pre(mode)
         == Backward or pre(mode) == Free or startBackward) and w_relfric < 0
         then Backward else Stuck);
    end FrictionBase;

Rotational.Position

Replaced reinit by initial equation

Rotational.RelativeStates

Bug corrected by using modifier stateSelect = StateSelect.prefer as implementation

Translational.Interfaces.flange_b

Attribute fillColor=7 added to Rectangle on Icon layer, i.e. it is now filled with white and not transparent any more.

Translational.Position

Replaced reinit by initial equation

Translational.RelativeStates

Bug corrected by using modifier stateSelect = StateSelect.prefer as implementation

Translational.Stop

Use stateSelect = StateSelect.prefer.

Translational.Examples.PreLoad

Improved documentation and coordinate system used for example.

ModelicaAdditions

Blocks.Nonlinear.PadeDelay

Replaced reinit by initial equation

HeatFlow1D.Interfaces

Definition of connectors Surface_a and Surface_b:
flow SIunits.HeatFlux q; changed to flow SIunits.HeatFlowRate q;

MultiBody.Parts.InertialSystem

Icon corrected.