| Name | Description |
|---|---|
| Measures the cut force | |
| Measures the cut torque | |
| Measures the power flow | |
| Measures the absolute position and motion | |
| Measures the relative position and motion |
MultiBondLib.Mechanics3D.MechSensors.CutForce
The force is resolved in the inertial system.
| Type | Name | Description |
|---|---|---|
| Frame_a | frame_a | |
| Frame_b | frame_b | |
| output RealOutput | force[3] | Cut force |
model CutForce "Measures the cut force"
import SI = Modelica.SIunits;
Interfaces.Frame_a frame_a;
Interfaces.Frame_b frame_b;
Modelica.Blocks.Interfaces.RealOutput force[3](redeclare each type SignalType
= SI.Force) "Cut force";
Sensors.De de;
Bonds.MultiBond multiBond;
Bonds.MultiBond multiBond1;
Interfaces.MBG2Mech mBG2Mech;
Interfaces.Mech2MBG mech2MBG;
inner Defaults MBG_defaults(n=3);
Bonds.Utilities.MultiBondTail multiBondTail;
Bonds.Utilities.MultiBondTail multiBondTail1;
Bonds.MultiBond multiBond2;
Bonds.MultiBond multiBond3;
Junctions.J0 j0_1;
Bonds.Utilities.MultiBondTail multiBondTail2;
equation
defineBranch(frame_a.P,frame_b.P);
connect(mech2MBG.frame_a, frame_a);
connect(mBG2Mech.frame_b, frame_b);
connect(multiBond.MultiBondCon1, mech2MBG.MultiBondConTrans);
connect(multiBond1.MultiBondCon2, mBG2Mech.MultiBondConTrans);
connect(de.MultiBondCon1, multiBond2.MultiBondCon2);
connect(de.e_out, force);
connect(multiBond3.MultiBondCon2, mBG2Mech.MultiBondConRot);
connect(mech2MBG.R, mBG2Mech.R);
connect(mech2MBG.x, mBG2Mech.x);
connect(multiBond3.MultiBondCon1, mech2MBG.MultiBondConRot);
connect(j0_1.MultiBondCon2, multiBond1.MultiBondCon1);
connect(j0_1.MultiBondCon1, multiBond.MultiBondCon2);
connect(j0_1.MultiBondCon3, multiBond2.MultiBondCon1);
end CutForce;
MultiBondLib.Mechanics3D.MechSensors.CutTorque
The torque is resolved in the inertial system.
| Type | Name | Description |
|---|---|---|
| Frame_a | frame_a | |
| Frame_b | frame_b | |
| output RealOutput | torque[3] | Cut torque |
model CutTorque "Measures the cut torque"
import SI = Modelica.SIunits;
Interfaces.Frame_a frame_a;
Interfaces.Frame_b frame_b;
Modelica.Blocks.Interfaces.RealOutput torque[3](redeclare each type
SignalType = SI.Force) "Cut torque";
Sensors.De de;
Bonds.MultiBond multiBond;
Bonds.MultiBond multiBond1;
Junctions.J0 j0_1;
Interfaces.MBG2Mech mBG2Mech;
Interfaces.Mech2MBG mech2MBG;
inner Defaults MBG_defaults(n=3);
Bonds.Utilities.MultiBondTail multiBondTail1;
Bonds.MultiBond multiBond2;
Bonds.MultiBond multiBond3;
Bonds.Utilities.MultiBondTail multiBondTail2;
Bonds.Utilities.MultiBondTail multiBondTail3;
equation
defineBranch(frame_a.P,frame_b.P);
connect(mech2MBG.frame_a, frame_a);
connect(mBG2Mech.frame_b, frame_b);
connect(multiBond1.MultiBondCon1, j0_1.MultiBondCon2);
connect(multiBond.MultiBondCon2, j0_1.MultiBondCon1);
connect(de.MultiBondCon1, multiBond2.MultiBondCon2);
connect(de.e_out, torque);
connect(multiBond2.MultiBondCon1, j0_1.MultiBondCon3);
connect(multiBond.MultiBondCon1, mech2MBG.MultiBondConRot);
connect(multiBond3.MultiBondCon2, mBG2Mech.MultiBondConTrans);
connect(multiBond1.MultiBondCon2, mBG2Mech.MultiBondConRot);
connect(mech2MBG.x, mBG2Mech.x);
connect(mBG2Mech.R, mech2MBG.R);
connect(multiBond3.MultiBondCon1, mech2MBG.MultiBondConTrans);
end CutTorque;
MultiBondLib.Mechanics3D.MechSensors.Power
| Type | Name | Description |
|---|---|---|
| Frame_a | frame_a | |
| Frame_b | frame_b | |
| output RealOutput | power | power |
model Power "Measures the power flow"
import SI = Modelica.SIunits;
Interfaces.Frame_a frame_a;
Interfaces.Frame_b frame_b;
Modelica.Blocks.Interfaces.RealOutput power(redeclare each type SignalType =
SI.Force) "power";
Bonds.MultiBond multiBond;
Bonds.MultiBond multiBond1;
Interfaces.MBG2Mech mBG2Mech;
Interfaces.Mech2MBG mech2MBG;
inner Defaults MBG_defaults(n=3);
Bonds.MultiBond multiBond3;
Bonds.MultiBond multiBond4;
Compositions.Composition composition;
Compositions.Composition composition1;
Bonds.MultiBond multiBond5(n=6);
Sensors.PMultiBond pMultiBond(n=6);
public
Passive.mTF_flow mTF_flow;
public
Passive.mTF_effort mTF_effort;
Bonds.Utilities.MultiBondTail multiBondTail2;
Bonds.Utilities.MultiBondTail multiBondTail3;
Bonds.MultiBond multiBond2;
Bonds.MultiBond multiBond6;
Junctions.J1 j1_1(n=6);
equation
defineBranch(frame_a.P,frame_b.P);
connect(mech2MBG.frame_a, frame_a);
connect(mBG2Mech.frame_b, frame_b);
connect(multiBond1.MultiBondCon2, mBG2Mech.MultiBondConRot);
connect(multiBond3.MultiBondCon2, mBG2Mech.MultiBondConTrans);
connect(mech2MBG.MultiBondConTrans, multiBond4.MultiBondCon1);
connect(composition1.MultiBondCon2, multiBond3.MultiBondCon1);
connect(multiBond5.MultiBondCon2, composition1.MultiBondCon3);
connect(pMultiBond.MultiBondCon1, composition.MultiBondCon3);
connect(pMultiBond.P, power);
connect(multiBond.MultiBondCon1, mech2MBG.MultiBondConRot);
connect(multiBond4.MultiBondCon2, composition.MultiBondCon2);
connect(mTF_flow.MultiBondCon2, multiBond.MultiBondCon2);
connect(mech2MBG.R, mTF_flow.M);
connect(multiBond2.MultiBondCon2, composition.MultiBondCon1);
connect(mTF_flow.MultiBondCon1, multiBond2.MultiBondCon1);
connect(mTF_effort.MultiBondCon2, multiBond1.MultiBondCon1);
connect(multiBond6.MultiBondCon1, composition1.MultiBondCon1);
connect(mTF_effort.MultiBondCon1, multiBond6.MultiBondCon2);
connect(mTF_effort.M, mBG2Mech.R);
connect(j1_1.MultiBondCon2, multiBond5.MultiBondCon1);
connect(j1_1.MultiBondCon1, pMultiBond.MultiBondCon2);
connect(mech2MBG.x, mBG2Mech.x);
connect(mech2MBG.R, mBG2Mech.R);
end Power;
MultiBondLib.Mechanics3D.MechSensors.AbsoluteSensor
The quantities are provided at the output signal connector y in packed format in the order
For example, if parameters get_v and get_w are true and all other get_XXX parameters are false, then y contains 6 elements:
y[1:3] = absolute velocity y[4:6] = absolute angular velocity
| Type | Name | Default | Description |
|---|---|---|---|
| Boolean | get_r_abs | true | = true, to measure the position vector from the origin of the world frame to the origin of frame_a in [m] |
| Boolean | get_v_abs | false | = true, to measure the absolute velocity of the origin of frame_a in [m/s] |
| Boolean | get_a_abs | false | = true, to measure the absolute acceleration of the origin of frame_a in [m/s^2] |
| Boolean | get_R | false | = true, to measure the 3 rotation angles to rotate the world frame into frame_a along the axes defined in 'sequence' below in [rad] |
| Boolean | get_w_abs | false | = true, to measure the absolute angular velocity of frame_a in [rad/s] |
| Boolean | get_z_abs | false | = true, to measure the absolute angular acceleration to frame_a in [rad/s^2] |
| Type | Name | Description |
|---|---|---|
| Frame_a | frame_a | |
| output RealOutput | out[n_out] |
model AbsoluteSensor "Measures the absolute position and motion"
import SI = Modelica.SIunits;
parameter Boolean get_r_abs=true
"= true, to measure the position vector from the origin of the world frame to the origin of frame_a in [m]";
parameter Boolean get_v_abs=false
"= true, to measure the absolute velocity of the origin of frame_a in [m/s]";
parameter Boolean get_a_abs=false
"= true, to measure the absolute acceleration of the origin of frame_a in [m/s^2]";
parameter Boolean get_R=false
"= true, to measure the 3 rotation angles to rotate the world frame into frame_a along the axes defined in 'sequence' below in [rad]";
parameter Boolean get_w_abs=false
"= true, to measure the absolute angular velocity of frame_a in [rad/s]";
parameter Boolean get_z_abs=false
"= true, to measure the absolute angular acceleration to frame_a in [rad/s^2]";
final parameter Integer n_out = ((if get_r_abs then 3 else
0) + (if get_v_abs then 3 else 0) + (if get_a_abs then 3 else
0) + (if get_R then 9 else 0) + (if get_w_abs then 3 else
0) + (if get_z_abs then 3 else 0));
Interfaces.Frame_a frame_a;
Modelica.Blocks.Interfaces.RealOutput out[n_out](redeclare each type
SignalType =
SI.Force);
protected
parameter Integer i1=1;
parameter Integer i2=if get_r_abs then i1 + 3 else i1;
parameter Integer i3=if get_v_abs then i2 + 3 else i2;
parameter Integer i4=if get_a_abs then i3 + 3 else i3;
parameter Integer i5=if get_R then i4 + 9 else i4;
parameter Integer i6=if get_w_abs then i5 + 3 else i5;
Bonds.MultiBond multiBond;
Interfaces.Mech2MBG mech2MBG;
inner Defaults MBG_defaults(n=3);
Modelica.Blocks.Continuous.Der der_v[3];
Bonds.MultiBond multiBond1;
Modelica.Blocks.Continuous.Der der_w[3];
Bonds.MultiBond multiBond2;
Sensors.Df Df_v;
Sensors.Df Df_w;
Passive.mTF_effort mTF_effort;
equation
if get_r_abs then
out[i1:i1 + 2] = mech2MBG.x;
end if;
if get_v_abs then
out[i2:i2 + 2] = Df_v.f_out;
end if;
if get_a_abs then
out[i3:i3 + 2] = der_v.y;
end if;
if get_R then
out[i4:i4 + 2] = mech2MBG.R[1,1:3];
out[i4+3:i4+5] = mech2MBG.R[2,1:3];
out[i4+6:i4+8] = mech2MBG.R[3,1:3];
end if;
if get_w_abs then
out[i5:i5 + 2] = Df_w.f_out;
end if;
if get_z_abs then
out[i6:i6 + 2] = der_w.y;
end if;
connect(mech2MBG.frame_a, frame_a);
connect(multiBond.MultiBondCon1, mech2MBG.MultiBondConTrans);
connect(multiBond1.MultiBondCon1, mech2MBG.MultiBondConRot);
connect(Df_v.f_out, der_v.u);
connect(Df_w.MultiBondCon1, multiBond2.MultiBondCon2);
connect(Df_w.f_out, der_w.u);
connect(mTF_effort.MultiBondCon2, multiBond1.MultiBondCon2);
connect(mTF_effort.MultiBondCon1, multiBond2.MultiBondCon1);
connect(mech2MBG.R, mTF_effort.M);
connect(Df_v.MultiBondCon1, multiBond.MultiBondCon2);
end AbsoluteSensor;
MultiBondLib.Mechanics3D.MechSensors.RelativeSensor
The quantities are provided at the output signal connector y in packed format in the order
For example, if parameters get_v and get_w are true and all other get_XXX parameters are false, then y contains 6 elements:
y[1:3] = absolute velocity y[4:6] = absolute angular velocity
| Type | Name | Default | Description |
|---|---|---|---|
| Boolean | get_r_abs | true | = true, to measure the position vector from the origin of the world frame to the origin of frame_a in [m] |
| Boolean | get_v_abs | false | = true, to measure the absolute velocity of the origin of frame_a in [m/s] |
| Boolean | get_a_abs | false | = true, to measure the absolute acceleration of the origin of frame_a in [m/s^2] |
| Boolean | get_R | false | = true, to measure the 3 rotation angles to rotate the world frame into frame_a along the axes defined in 'sequence' below in [rad] |
| Boolean | get_w_abs | false | = true, to measure the absolute angular velocity of frame_a in [rad/s] |
| Boolean | get_z_abs | false | = true, to measure the absolute angular acceleration to frame_a in [rad/s^2] |
| Type | Name | Description |
|---|---|---|
| Frame_a | frame_a | |
| output RealOutput | out[n_out] | |
| Frame_b | frame_b |
model RelativeSensor "Measures the relative position and motion"
import SI = Modelica.SIunits;
parameter Boolean get_r_abs=true
"= true, to measure the position vector from the origin of the world frame to the origin of frame_a in [m]";
parameter Boolean get_v_abs=false
"= true, to measure the absolute velocity of the origin of frame_a in [m/s]";
parameter Boolean get_a_abs=false
"= true, to measure the absolute acceleration of the origin of frame_a in [m/s^2]";
parameter Boolean get_R=false
"= true, to measure the 3 rotation angles to rotate the world frame into frame_a along the axes defined in 'sequence' below in [rad]";
parameter Boolean get_w_abs=false
"= true, to measure the absolute angular velocity of frame_a in [rad/s]";
parameter Boolean get_z_abs=false
"= true, to measure the absolute angular acceleration to frame_a in [rad/s^2]";
final parameter Integer n_out = ((if get_r_abs then 3 else
0) + (if get_v_abs then 3 else 0) + (if get_a_abs then 3 else
0) + (if get_R then 9 else 0) + (if get_w_abs then 3 else
0) + (if get_z_abs then 3 else 0));
Interfaces.Frame_a frame_a;
Modelica.Blocks.Interfaces.RealOutput out[n_out](redeclare each type
SignalType =
SI.Force);
protected
parameter Integer i1=1;
parameter Integer i2=if get_r_abs then i1 + 3 else i1;
parameter Integer i3=if get_v_abs then i2 + 3 else i2;
parameter Integer i4=if get_a_abs then i3 + 3 else i3;
parameter Integer i5=if get_R then i4 + 9 else i4;
parameter Integer i6=if get_w_abs then i5 + 3 else i5;
Bonds.MultiBond multiBond;
Interfaces.Mech2MBG mech2MBG;
inner Defaults MBG_defaults(n=3);
Modelica.Blocks.Continuous.Der der_v[3];
Bonds.MultiBond multiBond1;
Modelica.Blocks.Continuous.Der der_w[3];
Bonds.MultiBond multiBond2;
Sensors.Df Df_v;
Sensors.Df Df_w;
Passive.mTF_effort mTF_effort;
Interfaces.MBG2Mech mBG2Mech;
public
Interfaces.Frame_b frame_b;
protected
Junctions.J0 j0_1;
Junctions.J0 j0_2;
Bonds.MultiBond multiBond3;
Bonds.MultiBond multiBond4;
Bonds.Utilities.MultiBondTail multiBondTail;
Bonds.Utilities.MultiBondTail multiBondTail1;
Bonds.MultiBond multiBond5;
Bonds.MultiBond multiBond6;
Passive.mTF_flow mTF_flow;
Bonds.MultiBond multiBond7;
Bonds.Utilities.MultiBondTail multiBondTail2;
Real Rrel[3,3];
equation
Rrel = mBG2Mech.R*transpose(mech2MBG.R);
if get_r_abs then
out[i1:i1 + 2] = mech2MBG.x-mBG2Mech.x;
end if;
if get_v_abs then
out[i2:i2 + 2] = Df_v.f_out;
end if;
if get_a_abs then
out[i3:i3 + 2] = der_v.y;
end if;
if get_R then
out[i4:i4 + 2] = Rrel[1,1:3];
out[i4+3:i4+5] = Rrel[2,1:3];
out[i4+6:i4+8] = Rrel[3,1:3];
end if;
if get_w_abs then
out[i5:i5 + 2] = Df_w.f_out;
end if;
if get_z_abs then
out[i6:i6 + 2] = der_w.y;
end if;
connect(mech2MBG.frame_a, frame_a);
connect(multiBond.MultiBondCon1, mech2MBG.MultiBondConTrans);
connect(multiBond1.MultiBondCon1, mech2MBG.MultiBondConRot);
connect(Df_v.f_out, der_v.u);
connect(Df_w.f_out, der_w.u);
connect(mech2MBG.R, mTF_effort.M);
connect(mBG2Mech.frame_b,frame_b);
connect(multiBond3.MultiBondCon1, j0_1.MultiBondCon4);
connect(Df_v.MultiBondCon1, multiBond3.MultiBondCon2);
connect(multiBond4.MultiBondCon2, mBG2Mech.MultiBondConTrans);
connect(multiBond4.MultiBondCon1, j0_1.MultiBondCon2);
connect(multiBond2.MultiBondCon2, mBG2Mech.MultiBondConRot);
connect(j0_2.MultiBondCon1, multiBond1.MultiBondCon2);
connect(multiBond5.MultiBondCon1, j0_2.MultiBondCon2);
connect(multiBond5.MultiBondCon2, mTF_effort.MultiBondCon2);
connect(multiBond6.MultiBondCon1, mTF_effort.MultiBondCon1);
connect(mTF_flow.MultiBondCon1, multiBond6.MultiBondCon2);
connect(mTF_flow.MultiBondCon2, multiBond2.MultiBondCon1);
connect(mTF_flow.M, mBG2Mech.R);
connect(multiBond7.MultiBondCon1, j0_2.MultiBondCon3);
connect(Df_w.MultiBondCon1, multiBond7.MultiBondCon2);
end RelativeSensor;