This package contains connectors and partial models (i.e. models that are only used to build other models) of the MultiBody library.
Extends from Modelica.Icons.Library (Icon for library).
Name | Description |
---|---|
Frame | Coordinate system fixed to the component with one cut-force and cut-torque (no icon) |
Frame_a | Coordinate system fixed to the component with one cut-force and cut-torque (filled rectangular icon) |
Frame_b | Coordinate system fixed to the component with one cut-force and cut-torque (non-filled rectangular icon) |
Frame_resolve | Coordinate system fixed to the component used to express in which coordinate system a vector is resolved (non-filled rectangular icon) |
FlangeWithBearing | Connector consisting of 1-dim. rotational flange and its bearing frame |
FlangeWithBearingAdaptor | Adaptor to allow direct connections to the sub-connectors of FlangeWithBearing |
PartialTwoFrames | Base model for components providing two frame connectors + outer world + assert to guarantee that the component is connected |
PartialTwoFramesDoubleSize | Base model for components providing two frame connectors + outer world + assert to guarantee that the component is connected (default icon size is factor 2 larger as usual) |
PartialOneFrame_a | Base model for components providing one frame_a connector + outer world + assert to guarantee that the component is connected |
PartialOneFrame_b | Base model for components providing one frame_b connector + outer world + assert to guarantee that the component is connected |
PartialElementaryJoint | Base model for elementary joints (has two frames + outer world + assert to guarantee that the joint is connected) |
PartialForce | Base model for force elements (provide frame_b.f and frame_b.t in subclasses) |
PartialLineForce | Base model for line force elements |
PartialAbsoluteSensor | Base model to measure an absolute frame variable |
PartialRelativeSensor | Base model to measure a relative variable between two frames |
PartialVisualizer | Base model for visualizers (has a frame_a on the left side + outer world + assert to guarantee that the component is connected) |
ZeroPosition | Set absolute position vector of frame_resolve to a zero vector and the orientation object to a null rotation |
Basic definition of a coordinate system that is fixed to a mechanical component. In the origin of the coordinate system the cut-force and the cut-torque is acting. This component has no icon definition and is only used by inheritance from frame connectors to define different icons.
Type | Name | Description |
---|---|---|
Position | r_0[3] | Position vector from world frame to the connector frame origin, resolved in world frame [m] |
Orientation | R | Orientation object to rotate the world frame into the connector frame |
flow Force | f[3] | Cut-force resolved in connector frame [N] |
flow Torque | t[3] | Cut-torque resolved in connector frame [N.m] |
connector Frame "Coordinate system fixed to the component with one cut-force and cut-torque (no icon)" import SI = Modelica.SIunits; SI.Position r_0[3] "Position vector from world frame to the connector frame origin, resolved in world frame"; Frames.Orientation R "Orientation object to rotate the world frame into the connector frame"; flow SI.Force f[3] "Cut-force resolved in connector frame"; flow SI.Torque t[3] "Cut-torque resolved in connector frame";end Frame;
Basic definition of a coordinate system that is fixed to a mechanical component. In the origin of the coordinate system the cut-force and the cut-torque is acting. This component has a filled rectangular icon.
Extends from Frame (Coordinate system fixed to the component with one cut-force and cut-torque (no icon)).
Type | Name | Description |
---|---|---|
Position | r_0[3] | Position vector from world frame to the connector frame origin, resolved in world frame [m] |
Orientation | R | Orientation object to rotate the world frame into the connector frame |
flow Force | f[3] | Cut-force resolved in connector frame [N] |
flow Torque | t[3] | Cut-torque resolved in connector frame [N.m] |
connector Frame_a "Coordinate system fixed to the component with one cut-force and cut-torque (filled rectangular icon)" extends Frame;end Frame_a;
Basic definition of a coordinate system that is fixed to a mechanical component. In the origin of the coordinate system the cut-force and the cut-torque is acting. This component has a non-filled rectangular icon.
Extends from Frame (Coordinate system fixed to the component with one cut-force and cut-torque (no icon)).
Type | Name | Description |
---|---|---|
Position | r_0[3] | Position vector from world frame to the connector frame origin, resolved in world frame [m] |
Orientation | R | Orientation object to rotate the world frame into the connector frame |
flow Force | f[3] | Cut-force resolved in connector frame [N] |
flow Torque | t[3] | Cut-torque resolved in connector frame [N.m] |
connector Frame_b "Coordinate system fixed to the component with one cut-force and cut-torque (non-filled rectangular icon)" extends Frame;end Frame_b;
Basic definition of a coordinate system that is fixed to a mechanical component. In the origin of the coordinate system the cut-force and the cut-torque is acting. This coordinate system is used to express in which coordinate system a vector is resolved. A component that uses a Frame_resolve connector has to set the cut-force and cut-torque of this frame to zero. When connecting from a Frame_resolve connector to another frame connector, by default the connecting line has line style "dotted". This component has a non-filled rectangular icon.
Extends from Frame (Coordinate system fixed to the component with one cut-force and cut-torque (no icon)).
Type | Name | Description |
---|---|---|
Position | r_0[3] | Position vector from world frame to the connector frame origin, resolved in world frame [m] |
Orientation | R | Orientation object to rotate the world frame into the connector frame |
flow Force | f[3] | Cut-force resolved in connector frame [N] |
flow Torque | t[3] | Cut-torque resolved in connector frame [N.m] |
connector Frame_resolve "Coordinate system fixed to the component used to express in which coordinate system a vector is resolved (non-filled rectangular icon)" extends Frame;end Frame_resolve;
This hierarchical connector models a 1-dim. rotational flange connector and its optional bearing defined by a 3-dim. frame connector. If a connection to the subconnectors should be clearly visible, connect first an instance of FlangeWithBearingAdaptor to the FlangeWithBearing connector.
Type | Name | Default | Description |
---|---|---|---|
Boolean | includeBearingConnector | false | = true, if bearing frame connector is present, otherwise not present |
Type | Name | Description |
---|---|---|
Boolean | includeBearingConnector | = true, if bearing frame connector is present, otherwise not present |
Flange_a | flange | 1-dim. rotational flange |
Frame | bearingFrame | 3-dim. frame in which the 1-dim. shaft is mounted |
connector FlangeWithBearing "Connector consisting of 1-dim. rotational flange and its bearing frame" parameter Boolean includeBearingConnector=false "= true, if bearing frame connector is present, otherwise not present"; Modelica.Mechanics.Rotational.Interfaces.Flange_a flange "1-dim. rotational flange"; Modelica.Mechanics.MultiBody.Interfaces.Frame bearingFrame if includeBearingConnector "3-dim. frame in which the 1-dim. shaft is mounted";end FlangeWithBearing;
Adaptor object to make a more visible connection to the flange and frame subconnectors of a FlangeWithBearing connector.
Type | Name | Default | Description |
---|---|---|---|
Boolean | includeBearingConnector | false | = true, if bearing frame connector is present, otherwise not present |
Type | Name | Description |
---|---|---|
FlangeWithBearing | flangeAndFrame | Compound connector consisting of 1-dim. rotational flange and 3-dim. frame mounting |
Flange_b | flange | 1-dim. rotational flange |
Frame_a | frame | 3-dim. frame in which the 1-dim. shaft is mounted |
model FlangeWithBearingAdaptor "Adaptor to allow direct connections to the sub-connectors of FlangeWithBearing" parameter Boolean includeBearingConnector=false "= true, if bearing frame connector is present, otherwise not present";Modelica.Mechanics.MultiBody.Interfaces.FlangeWithBearing flangeAndFrame( includeBearingConnector=includeBearingConnector) "Compound connector consisting of 1-dim. rotational flange and 3-dim. frame mounting"; Modelica.Mechanics.Rotational.Interfaces.Flange_b flange "1-dim. rotational flange"; Frame_a frame if includeBearingConnector "3-dim. frame in which the 1-dim. shaft is mounted"; equationconnect(flange, flangeAndFrame.flange); connect(frame, flangeAndFrame.bearingFrame); end FlangeWithBearingAdaptor;
This partial model provides two frame connectors, access to the world object and an assert to check that both frame connectors are connected. Therefore, inherit from this partial model if the two frame connectors are needed and if the two frame connectors should be connected for a correct model.
Type | Name | Description |
---|---|---|
Frame_a | frame_a | Coordinate system fixed to the component with one cut-force and cut-torque |
Frame_b | frame_b | Coordinate system fixed to the component with one cut-force and cut-torque |
partial model PartialTwoFrames "Base model for components providing two frame connectors + outer world + assert to guarantee that the component is connected"Interfaces.Frame_a frame_a "Coordinate system fixed to the component with one cut-force and cut-torque"; Interfaces.Frame_b frame_b "Coordinate system fixed to the component with one cut-force and cut-torque"; protected outer Modelica.Mechanics.MultiBody.World world; equation assert(cardinality(frame_a) > 0, "Connector frame_a of component is not connected"); assert(cardinality(frame_b) > 0, "Connector frame_b of component is not connected");end PartialTwoFrames;
This partial model provides two frame connectors, access to the world object and an assert to check that both frame connectors are connected. Therefore, inherit from this partial model if the two frame connectors are needed and if the two frame connectors should be connected for a correct model.
When dragging "PartialTwoFrames", the default size is a factor of two larger as usual. This partial model is used by the Joint.Assemblies joint aggregation models.
Type | Name | Description |
---|---|---|
Frame_a | frame_a | Coordinate system fixed to the component with one cut-force and cut-torque |
Frame_b | frame_b | Coordinate system fixed to the component with one cut-force and cut-torque |
partial model PartialTwoFramesDoubleSize "Base model for components providing two frame connectors + outer world + assert to guarantee that the component is connected (default icon size is factor 2 larger as usual)"Interfaces.Frame_a frame_a "Coordinate system fixed to the component with one cut-force and cut-torque"; Interfaces.Frame_b frame_b "Coordinate system fixed to the component with one cut-force and cut-torque"; protected outer Modelica.Mechanics.MultiBody.World world; equation assert(cardinality(frame_a) > 0, "Connector frame_a of component is not connected"); assert(cardinality(frame_b) > 0, "Connector frame_b of component is not connected");end PartialTwoFramesDoubleSize;
This partial model provides one frame_a connector, access to the world object and an assert to check that the frame_a connector is connected. Therefore, inherit from this partial model if the frame_a connector is needed and if this connector should be connected for a correct model.
Type | Name | Description |
---|---|---|
Frame_a | frame_a | Coordinate system fixed to the component with one cut-force and cut-torque |
partial model PartialOneFrame_a "Base model for components providing one frame_a connector + outer world + assert to guarantee that the component is connected"Interfaces.Frame_a frame_a "Coordinate system fixed to the component with one cut-force and cut-torque"; protected outer Modelica.Mechanics.MultiBody.World world; equation assert(cardinality(frame_a) > 0, "Connector frame_a of component is not connected");end PartialOneFrame_a;
This partial model provides one frame_b connector, access to the world object and an assert to check that the frame_b connector is connected. Therefore, inherit from this partial model if the frame_b connector is needed and if this connector should be connected for a correct model.
Type | Name | Description |
---|---|---|
Frame_b | frame_b | Coordinate system fixed to the component with one cut-force and cut-torque |
partial model PartialOneFrame_b "Base model for components providing one frame_b connector + outer world + assert to guarantee that the component is connected"Interfaces.Frame_b frame_b "Coordinate system fixed to the component with one cut-force and cut-torque"; protected outer Modelica.Mechanics.MultiBody.World world; equation assert(cardinality(frame_b) > 0, "Connector frame_b of component is not connected");end PartialOneFrame_b;
All elementary joints should inherit from this base model, i.e., joints that are directly defined by equations, provided they compute either the rotation object of frame_b from the rotation object of frame_a and from relative quantities (or vice versa), or there is a constraint equation between the rotation objects of the two frames. In other cases, a joint object should inherit from Interfaces.PartialTwoFrames (e.g., joint Spherical, because there is no constraint between the rotation objects of frame_a and frame_b or joint Cylindrical because it is not an elementary joint).
This partial model provides two frame connectors, a "Connections.branch" between frame_a and frame_b, access to the world object and an assert to check that both frame connectors are connected.
Type | Name | Description |
---|---|---|
Frame_a | frame_a | Coordinate system fixed to the joint with one cut-force and cut-torque |
Frame_b | frame_b | Coordinate system fixed to the joint with one cut-force and cut-torque |
partial model PartialElementaryJoint "Base model for elementary joints (has two frames + outer world + assert to guarantee that the joint is connected)"Interfaces.Frame_a frame_a "Coordinate system fixed to the joint with one cut-force and cut-torque"; Interfaces.Frame_b frame_b "Coordinate system fixed to the joint with one cut-force and cut-torque"; protected outer Modelica.Mechanics.MultiBody.World world; equation Connections.branch(frame_a.R, frame_b.R); assert(cardinality(frame_a) > 0, "Connector frame_a of joint object is not connected"); assert(cardinality(frame_b) > 0, "Connector frame_b of joint object is not connected");end PartialElementaryJoint;
All 3-dimensional force and torque elements should be based on this superclass. This model defines frame_a and frame_b, computes the relative translation and rotation between the two frames and calculates the cut-force and cut-torque at frame_a by a force and torque balance from the cut-force and cut-torque at frame_b. As a result, in a subclass, only the relationship between the cut-force and cut-torque at frame_b has to be defined as a function of the following relative quantities:
r_rel_b[3]: Position vector from origin of frame_a to origin of frame_b, resolved in frame_b R_rel : Relative orientation object to rotate from frame_a to frame_b
Assume that force f = {100,0,0} should be applied on the body to which this force element is attached at frame_b, then the definition should be:
model Constant_x_Force extends Modelica.Mechanics.MultiBody.Interfaces.PartialForce; equation frame_b.f = {-100, 0, 0}; frame_b.t = zeros(3); end Constant_x_Force;
Note, that frame_b.f and frame_b.t are flow variables and therefore the negative value of frame_b.f and frame_b.t is acting at the part to which this force element is connected.
Type | Name | Description |
---|---|---|
Frame_a | frame_a | Coordinate system fixed to the joint with one cut-force and cut-torque |
Frame_b | frame_b | Coordinate system fixed to the joint with one cut-force and cut-torque |
partial model PartialForce "Base model for force elements (provide frame_b.f and frame_b.t in subclasses)" import SI = Modelica.SIunits;Interfaces.Frame_a frame_a "Coordinate system fixed to the joint with one cut-force and cut-torque"; Interfaces.Frame_b frame_b "Coordinate system fixed to the joint with one cut-force and cut-torque"; SI.Position r_rel_b[3] "Position vector from origin of frame_a to origin of frame_b, resolved in frame_b"; protected outer Modelica.Mechanics.MultiBody.World world; equation assert(cardinality(frame_a) > 0, "Connector frame_a of force object is not connected"); assert(cardinality(frame_b) > 0, "Connector frame_b of force object is not connected"); /* Determine relative position vector between frame_a and frame_b */ r_rel_b = Frames.resolve2(frame_b.R, frame_b.r_0 - frame_a.r_0); /* Force and torque balance between frame_a and frame_b */ zeros(3) = frame_a.f + Frames.resolveRelative(frame_b.f, frame_b.R, frame_a. R); zeros(3) = frame_a.t + Frames.resolveRelative(frame_b.t + cross(r_rel_b, frame_b.f), frame_b.R, frame_a.R);end PartialForce;
All line force elements should be based on this base model. This model defines frame_a and frame_b, computes the relative distance s and provides the force and torque balance of the cut-forces and cut-torques at frame_a and frame_b, respectively. In sub-models, only the line force f, acting at frame_b on the line from frame_a to frame_b, as a function of the relative distance s and its derivative der(s) has to be defined. Example:
model Spring parameter Real c "spring constant", parameter Real s_unstretched "unstretched spring length"; extends Modelica.Mechanics.MultiBody.Interfaces.PartialLineForce; equation f = c*(s-s_unstretched); end Spring;
Type | Name | Default | Description |
---|---|---|---|
Advanced | |||
Position | s_small | 1.E-6 | Prevent zero-division if relative distance s=0 [m] |
Type | Name | Description |
---|---|---|
Frame_a | frame_a | Coordinate system fixed to the force element with one cut-force and cut-torque |
Frame_b | frame_b | Coordinate system fixed to the force element with one cut-force and cut-torque |
partial model PartialLineForce "Base model for line force elements" import SI = Modelica.SIunits; parameter SI.Position s_small=1.E-6 " Prevent zero-division if relative distance s=0";Interfaces.Frame_a frame_a "Coordinate system fixed to the force element with one cut-force and cut-torque"; Interfaces.Frame_b frame_b "Coordinate system fixed to the force element with one cut-force and cut-torque"; SI.Force f "Line force acting on frame_a and on frame_b (positive, if acting on frame_b and directed from frame_a to frame_b)"; SI.Position s "(Guarded) distance between the origin of frame_a and the origin of frame_b (>= s_small))"; Real e_a[3](each final unit="1") "Unit vector on the line connecting the origin of frame_a with the origin of frame_b resolved in frame_a (directed from frame_a to frame_b)"; Modelica.SIunits.Position r_rel_a[3] "Position vector from origin of frame_a to origin of frame_b, resolved in frame_a"; protected outer Modelica.Mechanics.MultiBody.World world; equation Connections.potentialRoot(frame_a.R, 100); Connections.potentialRoot(frame_b.R, 100); assert(cardinality(frame_a) > 0, "Connector frame_a of line force object is not connected"); assert(cardinality(frame_b) > 0, "Connector frame_b of line force object is not connected"); // Determine distance s and n_a r_rel_a = Frames.resolve2(frame_a.R, frame_b.r_0 - frame_a.r_0); s = noEvent(max(Modelica.Math.Vectors.length( r_rel_a), s_small)); e_a = r_rel_a/s; /* Determine forces and torques at frame_a and frame_b */ frame_a.f = -e_a*f; frame_b.f = -Frames.resolve2(Frames.relativeRotation(frame_a.R, frame_b.R), frame_a.f); // Additional equations, if direct connections of line forces if Connections.isRoot(frame_a.R) then frame_a.R = Frames.nullRotation(); else frame_a.t = zeros(3); end if; if Connections.isRoot(frame_b.R) then frame_b.R = Frames.nullRotation(); else frame_b.t = zeros(3); end if;end PartialLineForce;
This is the base class of a 3-dim. mechanics component with one frame and one output port in order to measure an absolute quantity in the frame connector and to provide the measured signal as output for further processing with the blocks of package Modelica.Blocks.
Extends from Modelica.Icons.RotationalSensor (Icon representing rotational measurement device).
Type | Name | Default | Description |
---|---|---|---|
Integer | n_out | 1 | Number of output signals |
Type | Name | Description |
---|---|---|
Frame_a | frame_a | Coordinate system from which absolute quantities are provided as output signals |
output RealOutput | y[n_out] | Measured data as signal vector |
partial model PartialAbsoluteSensor "Base model to measure an absolute frame variable" extends Modelica.Icons.RotationalSensor; parameter Integer n_out = 1 "Number of output signals";Interfaces.Frame_a frame_a "Coordinate system from which absolute quantities are provided as output signals"; Modelica.Blocks.Interfaces.RealOutput y[n_out] "Measured data as signal vector"; protected outer Modelica.Mechanics.MultiBody.World world; equation assert(cardinality(frame_a) > 0, "Connector frame_a of absolute sensor object is not connected");end PartialAbsoluteSensor;
This is a base class for 3-dim. mechanical components with two frames and one output port in order to measure relative quantities between the two frames or the cut-forces/torques in the frame and to provide the measured signals as output for further processing with the blocks of package Modelica.Blocks.
Extends from Modelica.Icons.RotationalSensor (Icon representing rotational measurement device).
Type | Name | Default | Description |
---|---|---|---|
Integer | n_out | 1 | Number of output signals |
Type | Name | Description |
---|---|---|
Frame_a | frame_a | Coordinate system a |
Frame_b | frame_b | Coordinate system b |
output RealOutput | y[n_out] | Measured data as signal vector |
partial model PartialRelativeSensor "Base model to measure a relative variable between two frames" extends Modelica.Icons.RotationalSensor; parameter Integer n_out = 1 "Number of output signals";Interfaces.Frame_a frame_a "Coordinate system a"; Interfaces.Frame_b frame_b "Coordinate system b"; Modelica.Blocks.Interfaces.RealOutput y[n_out] "Measured data as signal vector"; protected outer Modelica.Mechanics.MultiBody.World world; equation assert(cardinality(frame_a) > 0, "Connector frame_a of relative sensor object is not connected"); assert(cardinality(frame_b) > 0, "Connector frame_b of relative sensor object is not connected");end PartialRelativeSensor;
This partial model provides one frame_a connector, access to the world object and an assert to check that the frame_a connector is connected. It is used by inheritance from all visualizer objects.
Type | Name | Description |
---|---|---|
Frame_a | frame_a | Coordinate system in which visualization data is resolved |
partial model PartialVisualizer "Base model for visualizers (has a frame_a on the left side + outer world + assert to guarantee that the component is connected)"Interfaces.Frame_a frame_a "Coordinate system in which visualization data is resolved"; protected outer Modelica.Mechanics.MultiBody.World world; equation assert(cardinality(frame_a) > 0, "Connector frame_a of visualizer object is not connected");end PartialVisualizer;
Type | Name | Description |
---|---|---|
Frame_resolve | frame_resolve |
model ZeroPosition "Set absolute position vector of frame_resolve to a zero vector and the orientation object to a null rotation" extends Modelica.Blocks.Interfaces.BlockIcon;Interfaces.Frame_resolve frame_resolve; equation Connections.root(frame_resolve.R); frame_resolve.R = Modelica.Mechanics.MultiBody.Frames.nullRotation(); frame_resolve.r_0 = zeros(3);end ZeroPosition;