Commit b6760ff2 authored by Thomas BOUTROUE's avatar Thomas BOUTROUE

Add support for new HybridActuator

Also add :
- LinkHybridActuatorToPhysicalValue
- LinkDigitalOutputToHybridActuator

Add missing delegates in UI

Fix #43
parent 064bd9ff
......@@ -87,6 +87,41 @@ QJsonObject DigitalActuator::exportState (void) const {
};
}
HybridActuator::HybridActuator (QObject * parent)
: AbstractActuator (ObjectType::HYBRID, parent)
, m_value (false)
, m_ratedSpeed (0)
, m_valSpeed (0)
, m_decimals (0)
, m_unit ("")
, m_sourceLink (Q_NULLPTR)
, m_targetLink (Q_NULLPTR)
{
connect (this, &HybridActuator::valueChanged, this, &HybridActuator::refreshValSpeed);
connect (this, &HybridActuator::ratedSpeedChanged, this, &HybridActuator::refreshValSpeed);
connect (this, &HybridActuator::decimalsChanged, this, &HybridActuator::refreshValSpeed);
Manager::instance ().registerObject (this);
}
HybridActuator::~HybridActuator (void) {
Manager::instance ().unregisterObject (this);
}
void HybridActuator::onComponentCompleted (void) {
AbstractActuator::onComponentCompleted ();
if (m_sourceLink) {
m_sourceLink->set_target (this);
}
if (m_targetLink) {
m_targetLink->set_source (this);
}
Manager::instance ().intializeObject (this);
}
void HybridActuator::refreshValSpeed (void) {
update_valSpeed (m_value ? m_ratedSpeed : 0);
}
ActuatorsList::ActuatorsList (QObject * parent)
: QObject (parent)
, m_subObjects (this)
......
......@@ -11,6 +11,8 @@ class PhysicalValue;
class LinkAnalogOutputToAnalogActuator;
class LinkDigitalOutputToDigitalActuator;
class LinkAnalogActuatorToPhysicalValue;
class LinkDigitalOutputToHybridActuator;
class LinkHybridActuatorToPhysicalValue;
class AbstractActuator : public BasicObject {
Q_OBJECT
......@@ -26,12 +28,15 @@ public:
class AnalogActuator : public AbstractActuator {
Q_OBJECT
// digital values
QML_WRITABLE_VAR_PROPERTY (int, valRaw)
QML_WRITABLE_VAR_PROPERTY (int, minRaw)
QML_WRITABLE_VAR_PROPERTY (int, maxRaw)
// speed values
QML_WRITABLE_VAR_PROPERTY (int, minSpeed)
QML_WRITABLE_VAR_PROPERTY (int, maxSpeed)
QML_READONLY_VAR_PROPERTY (int, valSpeed)
// display options
QML_WRITABLE_VAR_PROPERTY (int, decimals)
QML_WRITABLE_CSTREF_PROPERTY (QString, unit)
// source link
......@@ -52,7 +57,9 @@ public:
class DigitalActuator : public AbstractActuator {
Q_OBJECT
// digital value
QML_WRITABLE_VAR_PROPERTY (bool, value)
// display options
QML_WRITABLE_CSTREF_PROPERTY (QString, trueLabel)
QML_WRITABLE_CSTREF_PROPERTY (QString, falseLabel)
// source link
......@@ -67,6 +74,30 @@ public:
QJsonObject exportState (void) const Q_DECL_FINAL;
};
class HybridActuator : public AbstractActuator {
Q_OBJECT
// digital value
QML_WRITABLE_VAR_PROPERTY (bool, value)
// speed values
QML_WRITABLE_VAR_PROPERTY (int, ratedSpeed)
QML_READONLY_VAR_PROPERTY (int, valSpeed)
// display options
QML_WRITABLE_VAR_PROPERTY (int, decimals)
QML_WRITABLE_CSTREF_PROPERTY (QString, unit)
// source link
QML_WRITABLE_PTR_PROPERTY (LinkDigitalOutputToHybridActuator, sourceLink)
// target links
QML_WRITABLE_PTR_PROPERTY (LinkHybridActuatorToPhysicalValue, targetLink)
public:
explicit HybridActuator (QObject * parent = Q_NULLPTR);
virtual ~HybridActuator (void);
void onComponentCompleted (void) Q_DECL_FINAL;
void refreshValSpeed (void);
};
class ActuatorsList : public QObject, public QQmlParserStatus {
Q_OBJECT
Q_INTERFACES (QQmlParserStatus)
......
......@@ -150,6 +150,8 @@ Project {
"components/DelegateDigitalSensor.qml",
"components/DelegateDigitalSensorMini.qml",
"components/DelegateEnumHelp.qml",
"components/DelegateHybridActuator.qml",
"components/DelegateHybridActuatorMini.qml",
"components/DelegateHybridSensor.qml",
"components/DelegateHybridSensorMini.qml",
"components/DelegateLinkObjectHelp.qml",
......
......@@ -472,3 +472,77 @@ void LinkHybridSensorToDigitalInput::syncNormal (void) {
void LinkHybridSensorToDigitalInput::syncReverse () {
m_sensor->update_valState (m_input->get_value ());
}
LinkDigitalOutputToHybridActuator::LinkDigitalOutputToHybridActuator (QObject * parent)
: AbstractLink (parent)
, m_output (Q_NULLPTR)
, m_actuator (Q_NULLPTR)
{
Manager::instance ().registerObject (this);
}
LinkDigitalOutputToHybridActuator::~LinkDigitalOutputToHybridActuator (void) {
Manager::instance ().unregisterObject (this);
}
void LinkDigitalOutputToHybridActuator::onComponentCompleted (void) {
AbstractLink::onComponentCompleted ();
if (get_title ().isEmpty ()) {
set_title ("Output");
}
Manager::instance ().intializeObject (this);
}
void LinkDigitalOutputToHybridActuator::initHandler (void) {
update_output (get_source () ? get_source ()->as<DigitalOutput> () : Q_NULLPTR);
update_actuator (get_target () ? get_target ()->as<HybridActuator> () : Q_NULLPTR);
}
void LinkDigitalOutputToHybridActuator::ensureValid (void) {
update_valid (m_output && m_actuator);
}
void LinkDigitalOutputToHybridActuator::syncNormal (void) {
m_actuator->set_value (m_output->get_value ());
}
void LinkDigitalOutputToHybridActuator::syncReverse (void) {
m_output->set_value (m_actuator->get_value ());
}
LinkHybridActuatorToPhysicalValue::LinkHybridActuatorToPhysicalValue (QObject * parent)
: AbstractLink (parent)
, m_actuator (Q_NULLPTR)
, m_value (Q_NULLPTR)
{
Manager::instance ().registerObject (this);
}
LinkHybridActuatorToPhysicalValue::~LinkHybridActuatorToPhysicalValue (void) {
Manager::instance ().unregisterObject (this);
}
void LinkHybridActuatorToPhysicalValue::onComponentCompleted (void) {
AbstractLink::onComponentCompleted ();
if (get_title ().isEmpty ()) {
set_title ("Apply");
}
Manager::instance ().intializeObject (this);
}
void LinkHybridActuatorToPhysicalValue::initHandler (void) {
update_actuator (get_source () ? get_source ()->as<HybridActuator> () : Q_NULLPTR);
update_value (get_target () ? get_target ()->as<PhysicalValue> () : Q_NULLPTR);
}
void LinkHybridActuatorToPhysicalValue::ensureValid (void) {
update_valid (m_actuator && m_value);
}
void LinkHybridActuatorToPhysicalValue::syncNormal (void) {
if (m_actuator->get_valSpeed () != 0) {
m_value->update_assignedSpeed (MathUtils::intToFloat (transformNormal (m_actuator->get_valSpeed ()), m_actuator->get_decimals ()));
}
}
void LinkHybridActuatorToPhysicalValue::syncReverse (void) { }
......@@ -17,6 +17,7 @@ class DigitalOutput;
class DigitalSensor;
class DigitalActuator;
class HybridSensor;
class HybridActuator;
class PhysicalValue;
class AbstractLink : public BasicObject {
......@@ -232,4 +233,38 @@ public:
void syncReverse (void) Q_DECL_FINAL;
};
class LinkDigitalOutputToHybridActuator : public AbstractLink {
Q_OBJECT
QML_READONLY_PTR_PROPERTY (DigitalOutput, output)
QML_READONLY_PTR_PROPERTY (HybridActuator, actuator)
public:
explicit LinkDigitalOutputToHybridActuator (QObject * parent = Q_NULLPTR);
virtual ~LinkDigitalOutputToHybridActuator (void);
void onComponentCompleted (void) Q_DECL_FINAL;
void initHandler (void) Q_DECL_FINAL;
void ensureValid (void) Q_DECL_FINAL;
void syncNormal (void) Q_DECL_FINAL;
void syncReverse (void) Q_DECL_FINAL;
};
class LinkHybridActuatorToPhysicalValue : public AbstractLink {
Q_OBJECT
QML_READONLY_PTR_PROPERTY (HybridActuator, actuator)
QML_READONLY_PTR_PROPERTY (PhysicalValue, value)
public:
explicit LinkHybridActuatorToPhysicalValue (QObject * parent = Q_NULLPTR);
virtual ~LinkHybridActuatorToPhysicalValue (void);
void onComponentCompleted (void) Q_DECL_FINAL;
void initHandler (void) Q_DECL_FINAL;
void ensureValid (void) Q_DECL_FINAL;
void syncNormal (void) Q_DECL_FINAL;
void syncReverse (void) Q_DECL_FINAL;
};
#endif // LINK_H
......@@ -83,6 +83,8 @@ Manager::Manager (void)
, m_linksDigitalOutputToDigitalInput (50)
, m_linksPhysicalValueToHybridSensor (50)
, m_linksHybridSensorToDigitalInput (50)
, m_linksDigitalOutputToHybridActuator (50)
, m_linksHybridActuatorToPhysicalValue (50)
, m_transformers (100)
, m_affineTransformers (50)
, m_customTransformers (20)
......@@ -93,6 +95,7 @@ Manager::Manager (void)
, m_actuators (50)
, m_analogActuators (30)
, m_digitalActuators (30)
, m_hybridActuators (30)
, m_routines (1000)
, m_routinesOnTimer (300)
, m_routinesOnEvent (300)
......@@ -290,6 +293,7 @@ void Manager::deinit (void) {
m_actuators.clear ();
m_analogActuators.clear ();
m_digitalActuators.clear ();
m_hybridActuators.clear ();
m_physicalValues.clear ();
m_physicalBlocks.clear ();
m_physicalMarkers.clear ();
......@@ -313,6 +317,8 @@ void Manager::deinit (void) {
m_linksDigitalOutputToDigitalInput.clear ();
m_linksHybridSensorToDigitalInput.clear ();
m_linksPhysicalValueToHybridSensor.clear ();
m_linksHybridActuatorToPhysicalValue.clear ();
m_linksDigitalOutputToHybridActuator.clear ();
m_transformers.clear ();
m_affineTransformers.clear ();
m_customTransformers.clear ();
......@@ -679,16 +685,22 @@ void Manager::onTick (void) {
link->sync (); // SENSOR -> DIN
}
for (LinkDigitalOutputToDigitalActuator * link : arrayRange (m_linksDigitalOutputToDigitalActuator)) {
link->sync (); // DOUT -> ACTUATOR
link->sync (); // DOUT -> DIGITAL ACTUATOR
}
for (LinkAnalogOutputToAnalogActuator * link : arrayRange (m_linksAnalogOutputToAnalogActuator)) {
link->sync (); // AOUT -> ACTUATOR
link->sync (); // AOUT -> ANALOG ACTUATOR
}
for (LinkDigitalOutputToHybridActuator * link : arrayRange (m_linksDigitalOutputToHybridActuator)) {
link->sync (); // AOUT -> HYBRID ACTUATOR
}
for (PhysicalValue * value : arrayRange (m_physicalValues)) {
value->update_assignedSpeed (0); // reset assignement before running actuators
}
for (LinkAnalogActuatorToPhysicalValue * link : arrayRange (m_linksAnalogActuatorToPhysicalValue)) {
link->sync (); // ACTUATOR -> PHYSICAL
link->sync (); // ANALOG ACTUATOR -> PHYSICAL VALUE
}
for (LinkHybridActuatorToPhysicalValue * link : arrayRange (m_linksHybridActuatorToPhysicalValue)) {
link->sync (); // HYBRID ACTUATOR -> PHYSICAL VALUE
}
for (LinkAnalogOutputToAnalogInput * link : arrayRange (m_linksAnalogOutputToAnalogInput)) {
link->sync (); // AOUT -> AIN
......@@ -800,6 +812,9 @@ void Manager::doInitObjects (void) {
else if (DigitalActuator * digitalActuator = actuator->as<DigitalActuator> ()) {
m_digitalActuators.add (digitalActuator);
}
else if (HybridActuator * hybridActuator = actuator->as<HybridActuator> ()) {
m_hybridActuators.add (hybridActuator);
}
else { }
usePath = true;
}
......@@ -873,6 +888,12 @@ void Manager::doInitObjects (void) {
else if (LinkHybridSensorToDigitalInput * sublink = link->as<LinkHybridSensorToDigitalInput> ()) {
m_linksHybridSensorToDigitalInput.add (sublink);
}
else if (LinkDigitalOutputToHybridActuator * sublink = link->as<LinkDigitalOutputToHybridActuator> ()) {
m_linksDigitalOutputToHybridActuator.add (sublink);
}
else if (LinkHybridActuatorToPhysicalValue * sublink = link->as<LinkHybridActuatorToPhysicalValue> ()) {
m_linksHybridActuatorToPhysicalValue.add (sublink);
}
else { }
}
else if (AbstractTransformer * transformer = basicObject->as<AbstractTransformer> ()) {
......@@ -982,6 +1003,7 @@ void Manager::doBuildChains (void) {
QList<HybridSensorChain *> hybridSensorChains;
QList<AnalogActuatorChain *> analogActuatorChains;
QList<DigitalActuatorChain *> digitalActuatorChains;
QList<HybridActuatorChain *> hybridActuatorChains;
QSet<Node *> activeNodes, passiveNodes, inactiveNodes;
QSet<AnalogSensor *> invertedAnalogSensors;
QSet<DigitalSensor *> invertedDigitalSensors;
......@@ -1074,6 +1096,19 @@ void Manager::doBuildChains (void) {
chain->actuator = actuator;
digitalActuatorChains.append (chain);
}
for (HybridActuator * actuator : arrayRange (m_hybridActuators)) {
LinkDigitalOutputToHybridActuator * linkDoutToActuator = actuator->get_sourceLink ();
DigitalOutput * dout = (linkDoutToActuator ? linkDoutToActuator->get_output () : Q_NULLPTR);
LinkHybridActuatorToPhysicalValue * linkActuatorToValue = actuator->get_targetLink ();
PhysicalValue * value = (linkActuatorToValue ? linkActuatorToValue->get_value () : Q_NULLPTR);
HybridActuatorChain * chain = new HybridActuatorChain;
chain->dout = dout;
chain->linkDoutToActuator = linkDoutToActuator;
chain->actuator = actuator;
chain->linkActuatorToValue = linkActuatorToValue;
chain->value = value;
hybridActuatorChains.append (chain);
}
/// reset all links and sensors to normal mode (disabled and unreversed)
for (AbstractLink * link : arrayRange (m_links)) {
link->update_enabled (false);
......@@ -1218,6 +1253,21 @@ void Manager::doBuildChains (void) {
disabledHybridSensors.insert (chain->sensor);
}
}
for (HybridActuatorChain * chain : arrayRange (hybridActuatorChains)) {
bool enabled = true;
if (chain->dout) {
if (Node * node = nodeForIO.value (chain->dout)) {
enabled = (!inactiveNodes.contains (node) &&
!passiveNodes.contains (node));
}
}
if (chain->linkDoutToActuator) {
chain->linkDoutToActuator->update_enabled (enabled);
}
if (chain->linkActuatorToValue) {
chain->linkActuatorToValue->update_enabled (enabled);
}
}
/// disable links between forced physical values and actuators to avoid conflicts between relative speed and forced absolute value
for (AnalogActuatorChain * chain : arrayRange (analogActuatorChains)) {
bool conflict = false;
......@@ -1228,6 +1278,15 @@ void Manager::doBuildChains (void) {
chain->linkActuatorToValue->update_enabled (false);
}
}
for (HybridActuatorChain * chain : arrayRange (hybridActuatorChains)) {
bool conflict = false;
if (chain->value) {
conflict = forcedPhysicalValues.contains (chain->value);
}
if (chain->linkActuatorToValue && conflict) {
chain->linkActuatorToValue->update_enabled (false);
}
}
/// handle special direct mappings
for (LinkAnalogOutputToAnalogInput * link : arrayRange (m_linksAnalogOutputToAnalogInput)) {
bool enabled = true;
......@@ -1287,6 +1346,7 @@ void Manager::doBuildChains (void) {
qDeleteAll (hybridSensorChains);
qDeleteAll (analogActuatorChains);
qDeleteAll (digitalActuatorChains);
qDeleteAll (hybridActuatorChains);
}
void Manager::registerObject (QObject * object) {
......
......@@ -57,6 +57,7 @@ class HybridSensor;
class AbstractActuator;
class AnalogActuator;
class DigitalActuator;
class HybridActuator;
class AbstractLink;
class LinkAnalogActuatorToPhysicalValue;
......@@ -69,6 +70,8 @@ class LinkAnalogOutputToAnalogInput;
class LinkDigitalOutputToDigitalInput;
class LinkPhysicalValueToHybridSensor;
class LinkHybridSensorToDigitalInput;
class LinkDigitalOutputToHybridActuator;
class LinkHybridActuatorToPhysicalValue;
class PhysicalWorld;
class PhysicalValue;
......@@ -120,6 +123,14 @@ struct DigitalActuatorChain : public AbstractActuatorChain {
DigitalActuator * actuator = Q_NULLPTR;
};
struct HybridActuatorChain : public AbstractActuatorChain {
DigitalOutput * dout = Q_NULLPTR;
LinkDigitalOutputToHybridActuator * linkDoutToActuator = Q_NULLPTR;
HybridActuator * actuator = Q_NULLPTR;
LinkHybridActuatorToPhysicalValue * linkActuatorToValue = Q_NULLPTR;
PhysicalValue * value = Q_NULLPTR;
};
class Dictionary : public QObject {
Q_OBJECT
......@@ -209,6 +220,8 @@ protected:
Collection<LinkDigitalOutputToDigitalInput> m_linksDigitalOutputToDigitalInput;
Collection<LinkPhysicalValueToHybridSensor> m_linksPhysicalValueToHybridSensor;
Collection<LinkHybridSensorToDigitalInput> m_linksHybridSensorToDigitalInput;
Collection<LinkDigitalOutputToHybridActuator> m_linksDigitalOutputToHybridActuator;
Collection<LinkHybridActuatorToPhysicalValue> m_linksHybridActuatorToPhysicalValue;
Collection<AbstractTransformer> m_transformers;
Collection<AffineTransformer> m_affineTransformers;
......@@ -222,6 +235,7 @@ protected:
Collection<AbstractActuator> m_actuators;
Collection<AnalogActuator> m_analogActuators;
Collection<DigitalActuator> m_digitalActuators;
Collection<HybridActuator> m_hybridActuators;
Collection<AbstractRoutine> m_routines;
Collection<RoutineOnTimer> m_routinesOnTimer;
......
......@@ -161,6 +161,7 @@ void SharedObject::registerQmlTypes (QQmlEngine * qmlEngine) {
qmlRegisterType<DigitalInput> (uri, maj, min, "DigitalInput");
qmlRegisterType<DigitalOutput> (uri, maj, min, "DigitalOutput");
qmlRegisterType<DigitalSensor> (uri, maj, min, "DigitalSensor");
qmlRegisterType<HybridActuator> (uri, maj, min, "HybridActuator");
qmlRegisterType<HybridSensor> (uri, maj, min, "HybridSensor");
qmlRegisterType<LinkAnalogActuatorToPhysicalValue> (uri, maj, min, "LinkAnalogActuatorToPhysicalValue");
qmlRegisterType<LinkAnalogOutputToAnalogActuator> (uri, maj, min, "LinkAnalogOutputToAnalogActuator");
......@@ -172,6 +173,8 @@ void SharedObject::registerQmlTypes (QQmlEngine * qmlEngine) {
qmlRegisterType<LinkDigitalOutputToDigitalInput> (uri, maj, min, "LinkDigitalOutputToDigitalInput");
qmlRegisterType<LinkPhysicalValueToHybridSensor> (uri, maj, min, "LinkPhysicalValueToHybridSensor");
qmlRegisterType<LinkHybridSensorToDigitalInput> (uri, maj, min, "LinkHybridSensorToDigitalInput");
qmlRegisterType<LinkDigitalOutputToHybridActuator> (uri, maj, min, "LinkDigitalOutputToHybridActuator");
qmlRegisterType<LinkHybridActuatorToPhysicalValue> (uri, maj, min, "LinkHybridActuatorToPhysicalValue");
qmlRegisterType<CanBus> (uri, maj, min, "CanBus");
qmlRegisterType<CanOpen> (uri, maj, min, "CanOpen");
qmlRegisterType<NetworkDefinition> (uri, maj, min, "NetworkDefinition");
......
......@@ -4,7 +4,6 @@ import QtCAN.CanTestBench 2.0;
TextLabel {
text: (actuator ? format (actuator.valSpeed, actuator.decimals, actuator.unit) : "");
anchors.verticalCenter: parent.verticalCenter;
property AnalogActuator actuator : null;
}
......@@ -10,7 +10,6 @@ TextLabel {
? Style.colorForeground
: Style.colorError)
: Style.colorBorder);
anchors.verticalCenter: parent.verticalCenter;
property AnalogSensor sensor : null;
}
import QtQuick 2.1;
import QtQmlTricks.UiElements 2.0;
import QtCAN.CanTestBench 2.0;
AbstractDelegateSensor {
id: base;
property HybridActuator hybridActuator : null;
property alias actuator : base.hybridActuator;
StretchRowContainer {
spacing: Style.spacingNormal;
TextLabel {
text: qsTr ("State :");
emphasis: true;
anchors.verticalCenter: parent.verticalCenter;
}
CheckableBox {
size: Style.fontSizeBig;
enabled: (hybridActuator
&& ((hybridActuator.sourceLink
&& (hybridActuator.sourceLink.detached
|| hybridActuator.sourceLink.reversed))
|| !hybridActuator.sourceLink));
anchors.verticalCenter: parent.verticalCenter;
onEdited: { hybridActuator.value = value; }
Binding on value { value: (hybridActuator ? hybridActuator.value : false); }
}
TextLabel {
text: (hybridActuator
? (hybridActuator.value
? "ON"
: "OFF")
: "");
font.family: Style.fontFixedName;
anchors.verticalCenter: parent.verticalCenter;
}
Stretcher { }
}
StretchRowContainer {
spacing: Style.spacingNormal;
ExtraAnchors.horizontalFill: parent;
TextLabel {
id: lblActuatorRatedSpeed;
text: qsTr ("Rated speed :");
emphasis: true;
anchors.verticalCenter: parent.verticalCenter;
}
Stretcher { }
TextLabel {
id: viewSensorHighThreshold;
text: (hybridActuator ? format (hybridActuator.ratedSpeed, hybridActuator.decimals) : "");
font.family: Style.fontFixedName;
anchors.baseline: lblActuatorRatedSpeed.baseline;
}
TextLabel {
text: (hybridActuator ? hybridActuator.unit : "");
font.pixelSize: Style.fontSizeSmall;
anchors.baseline: lblActuatorRatedSpeed.baseline;
}
}
Repeater {
model: (hybridActuator ? hybridActuator.sourceLink : 0);
delegate: DelegateLinkSource {
link: modelData;
}
}
Repeater {
model: (hybridActuator ? hybridActuator.targetLink : 0);
delegate: DelegateLinkTarget {
link: modelData;
}
}
}
import QtQuick 2.1;
import QtQmlTricks.UiElements 2.0;
import QtCAN.CanTestBench 2.0;
Row {
spacing: Style.spacingSmall;
TextLabel {
text: (actuator ? format (actuator.valSpeed, actuator.decimals, actuator.unit) : "");
anchors.verticalCenter: parent.verticalCenter;
}
Circle {
size: (Style.spacingNormal * 2.0);
color: (actuator
? (actuator.value
? Style.colorSelection
: Style.colorEditable)
: Style.colorNone);
border {
width: Style.lineSize;
color: Style.colorBorder;
}
anchors.verticalCenter: parent.verticalCenter;
}
property HybridActuator actuator : null;
}
......@@ -647,6 +647,16 @@ NetworkDefinition {
target: blockArm.angle.pitch;
}
}
HybridActuator {
uid: "VERTICAL_STATION";
title: "Put machine in vertical station";
ratedSpeed: +250;
decimals: 1;
unit: "°/s";
targetLink: LinkHybridActuatorToPhysicalValue {
target: blockArm.angle.pitch;
}
}
// notifications
DigitalActuator {
id: light;
......
......@@ -139,6 +139,8 @@ Window {
Component { id: compoDelegateAnalogActuatorWide; DelegateAnalogActuatorWide { } }
Component { id: compoDelegateDigitalActuator; DelegateDigitalActuator { } }
Component { id: compoDelegateDigitalActuatorMini; DelegateDigitalActuatorMini { } }
Component { id: compoDelegateHybridActuator; DelegateHybridActuator { } }
Component { id: compoDelegateHybridActuatorMini; DelegateHybridActuatorMini { } }
Component { id: compoDelegateRoutineOnTimer; DelegateRoutineOnTimer { } }
Component { id: compoDelegateRoutineOnEvent; DelegateRoutineOnEvent { } }
Component { id: compoDelegateRoutineOnCanFrame; DelegateRoutineOnCanFrame { } }
......@@ -701,6 +703,7 @@ Window {
case ObjectType.DIGITAL:
return compoDelegateDigitalActuatorMini;
case ObjectType.HYBRID:
return compoDelegateHybridActuatorMini;
default:
return null;
}
......@@ -740,6 +743,7 @@ Window {
case ObjectType.DIGITAL:
return compoDelegateDigitalActuator;
case ObjectType.HYBRID:
return compoDelegateHybridActuator;
default:
return null;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment