ObjectConnectorHydraulicActuatorSimple
A basic hydraulic actuator with pressure build up equations. The actuator follows a valve input value, which results in a in- or outflow of fluid depending on the pressure difference. Valve values can be prescribed by user functions (not yet available) or with the MainSystem PreStepUserFunction(…).
Additional information for ObjectConnectorHydraulicActuatorSimple:
- This
Object
has/provides the following types =Connector
- Requested
Marker
type =Position
- Requested
Node
type: read detailed information of item - Short name for Python =
HydraulicActuatorSimple
- Short name for Python visualization object =
VHydraulicActuatorSimple
The item ObjectConnectorHydraulicActuatorSimple with type = ‘ConnectorHydraulicActuatorSimple’ has the following parameters:
- name [type = String, default = ‘’]:connector’s unique name
- markerNumbers [\([m0,m1]\tp\), type = ArrayMarkerIndex, default = [ invalid [-1], invalid [-1] ]]:list of markers used in connector
- nodeNumbers [\(\mathbf{n}_n = [n_{ODE1}]\tp\), type = ArrayNodeIndex, default = []]:currently a list with one node number of NodeGenericODE1 for 2 hydraulic pressures (reference values for this node must be zero); data node may be added in future for switching
- offsetLength [\(L_o\), type = UReal, default = 0.]:offset length [SI:m] of cylinder, representing minimal distance between the two bushings at stroke=0
- strokeLength [\(L_s\), type = PReal, default = 0.]:stroke length [SI:m] of cylinder, representing maximum extension relative to \(L_o\); the measured distance between the markers is \(L_s+L_o\)
- chamberCrossSection0 [\(A_0\), type = PReal, default = 0.]:cross section [SI:m\(^2\)] of chamber (inner cylinder) at piston head (nut) side (0)
- chamberCrossSection1 [\(A_1\), type = PReal, default = 0.]:cross section [SI:m\(^2\)] of chamber at piston rod side (1); usually smaller than chamberCrossSection0
- hoseVolume0 [\(V_{h,0}\), type = PReal, default = 0.]:hose volume [SI:m\(^3\)] at piston head (nut) side (0); as the effective bulk modulus would go to infinity at stroke length zero, the hose volume must be greater than zero
- hoseVolume1 [\(V_{h,1}\), type = PReal, default = 0.]:hose volume [SI:m\(^3\)] at piston rod side (1); as the effective bulk modulus would go to infinity at max. stroke length, the hose volume must be greater than zero
- valveOpening0 [\(A_{v,0}\), type = Real, default = 0.]:relative opening of valve \([-1 \ldots 1]\) [SI:1] at piston head (nut) side (0); positive value is valve opening towards system pressure, negative value is valve opening towards tank pressure; zero means closed valve
- valveOpening1 [\(A_{v,1}\), type = Real, default = 0.]:relative opening of valve \([-1 \ldots 1]\) [SI:1] at piston rod side (1); positive value is valve opening towards system pressure, negative value is valve opening towards tank pressure; zero means closed valve
- actuatorDamping [\(d_{HA}\), type = UReal, default = 0.]:damping [SI:N/(m\(\,\)s)] of hydraulic actuator (against actuator axial velocity)
- oilBulkModulus [\(K_{oil}\), type = PReal, default = 0.]:bulk modulus of oil [SI:N/(m\(^2\))]
- cylinderBulkModulus [\(K_{cyl}\), type = UReal, default = 0.]:bulk modulus of cylinder [SI:N/(m\(^2\))]; in fact, this is value represents the effect of the cylinder stiffness on the effective bulk modulus
- hoseBulkModulus [\(K_{hose}\), type = UReal, default = 0.]:bulk modulus of hose [SI:N/(m\(^2\))]; in fact, this is value represents the effect of the hose stiffness on the effective bulk modulus
- nominalFlow [\(Q_n\), type = PReal, default = 0.]:nominal flow of oil through valve [SI:m\(^3\)/s]
- systemPressure [\(p_s\), type = Real, default = 0.]:system pressure [SI:N/(m\(^2\))]
- tankPressure [\(p_t\), type = Real, default = 0.]:tank pressure [SI:N/(m\(^2\))]
- useChamberVolumeChange [type = Bool, default = False]:if True, the pressure build up equations include the change of oil stiffness due to change of chamber volume
- activeConnector [type = Bool, default = True]:flag, which determines, if the connector is active; used to deactivate (temporarily) a connector or constraint
- visualization [type = VObjectConnectorHydraulicActuatorSimple]:parameters for visualization of item
The item VObjectConnectorHydraulicActuatorSimple has the following parameters:
- show [type = Bool, default = True]:set true, if item is shown in visualization and false if it is not shown
- cylinderRadius [type = float, default = 0.05]:radius for drawing of cylinder
- rodRadius [type = float, default = 0.03]:radius for drawing of rod
- pistonRadius [type = float, default = 0.04]:radius for drawing of piston (if drawn transparent)
- pistonLength [type = float, default = 0.001]:radius for drawing of piston (if drawn transparent)
- rodMountRadius [type = float, default = 0.0]:radius for drawing of rod mount sphere
- baseMountRadius [type = float, default = 0.0]:radius for drawing of base mount sphere
- baseMountLength [type = float, default = 0.0]:radius for drawing of base mount sphere
- colorCylinder [type = Float4, default = [-1.,-1.,-1.,-1.]]:RGBA cylinder color; if R==-1, use default connector color
- colorPiston [type = Float4, default = [0.8,0.8,0.8,1.]]:RGBA piston color
DESCRIPTION of ObjectConnectorHydraulicActuatorSimple
The following output variables are available as OutputVariableType in sensors, Get…Output() and other functions:
Distance
: \(L = |\Delta\! \LU{0}{{\mathbf{p}}}|\)distance between both marker points (usually the actuator bushings); current actuator lengthDisplacement
:relative displacement between both marker pointsVelocity
: \(\Delta\! \LU{0}{{\mathbf{v}}}\)relative velocity between both pointsVelocityLocal
: \(\dot L\)actuator velocity, the derivative of actuator lengthForce
:force in actuator resulting as the difference of both pressures times according cross sections
Definition of quantities
intermediate variables
|
symbol
|
description
|
---|---|---|
marker m0 position
|
\(\LU{0}{{\mathbf{p}}}_{m0}\)
|
current global position which is provided by marker m0
|
marker m1 position
|
\(\LU{0}{{\mathbf{p}}}_{m1}\)
|
|
marker m0 velocity
|
\(\LU{0}{{\mathbf{v}}}_{m0}\)
|
current global velocity which is provided by marker m0
|
marker m1 velocity
|
\(\LU{0}{{\mathbf{v}}}_{m1}\)
|
|
Displacement
|
\(\Delta\! \LU{0}{{\mathbf{p}}}\)=\(\LU{0}{{\mathbf{p}}}_{m1} - \LU{0}{{\mathbf{p}}}_{m0}\)
|
The relative vector between marker points, stored as Displacement in output variables
|
current actuator length
|
\(L\)=\(|\Delta\! \LU{0}{{\mathbf{p}}}|\)
|
stored as Distance in output variables
|
time derivative of actuator length
|
\(\dot L\)=\(\Delta\! \LU{0}{{\mathbf{v}}}\tp {\mathbf{v}}_{f}\)
|
|
Velocity
|
\(\Delta\! \LU{0}{{\mathbf{v}}}\)=\(\LU{0}{{\mathbf{v}}}_{m1} - \LU{0}{{\mathbf{v}}}_{m0}\)
|
The vectorial relative velocity
|
Force
|
\({\mathbf{f}}\)
|
see below
|
Connector forces
The unit vector in force direction reads (raises SysError if \(L=0\)),
The simple double-acting hydraulic actuator has two pressure chambers, one being denoted with 0 at the
piston head (nut) and the other at the piston rod side denoted with 1. The pressure \(p_0\) acts at the piston head at area \(A_0\),
while the pressure \(p_1\) counteracts on the opposite side with (usually smaller) area \(A_1\).
If activeConnector = True
, the scalar actuator force (tension = positive) is computed as
where \(v\) represents the actuator velocitiy and \(d_HA\) is the viscous damping coefficient.
The vector of the actuator force applied at both markers finally reads
The virtual work of the connector force is computed from the virtual displacement
and the virtual work (not the transposed version here, because the resulting generalized forces shall be a column vector),
Pressure build up equations
The hydraulics model consists of a double-acting piston. It follows the paper of except for the friction and the additional valve, which are not available here.
The hydraulic actuator contains internal states, namely pressures \(p_0\) and \(p_1\). The ODE1 for pressures follows for the the case of laminar flow, based on system and tank pressure, valve positions as well as the actuator velocity and position (only for change of volume).
The distance between the two marker points, which are usually the bushings or clevis mounts of the hydraulic cylinder, is denoted as \(L\). The stroke length \(s \in [0, L_s]\) is defined as
such that at zero stroke, the actuator length is \(L_o\). The stroke velocity (positive value means extension) reads
If useChamberVolumeChange == True
, the volume change due to stroke change will be considered for the
volume related to the stiffness of the fluid.
The cylinder volumes in chambers 0 and 1 are then
The effective bulk modulus for chamber \(k \in {0,1}\) is computed as follows,
where we use a slightly different approach from when computing the volume for the cylinder bulk modulus term for \(k=1\).
Note that in case of \(K_{cyl}=0\) and/or \(K_{hose}=0\), the according fractions in Eq. (74)are set to zero (which other wise would give infinity).
Otherwise, if useChamberVolumeChange == False
, \(V_{0,cur}=V_{h,0}\), \(V_{1,cur}=V_{h,1}\) and \(K_{k,eff} = K_{oil}\) for chambers \(k \in {0,1}\).
The pressure equations (explicit ODE1) have the structure
and follow for different cases and chambers / valves \(k=\{0,1\}\), based on the simple model where
\(A_{v,k} = 0\): valve k closed
\(A_{v,k} > 0\): valve k opened towards system pressure (pump)
\(A_{v,k} < 0\): valve k opened towards tank pressure
Thus, the following equations are used(while it would happen rarely in regular operation, the arguments of the square roots could become negative; thus, in the implementation we use \(\mathrm{sqrts}(x) = \mathrm{sign}(x) \cdot \sqrt{\mathrm{abs}(x)}\).):
Relevant Examples and TestModels with weblink:
HydraulicActuator2Arms.py (Examples/), HydraulicActuatorStaticInitialization.py (Examples/), hydraulicActuatorSimpleTest.py (TestModels/)
The web version may not be complete. For details, consider also the Exudyn PDF documentation : theDoc.pdf