Unverified Commit 38e89df2 authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #7406 from DonLakeFlyer/PIDTuning

PID tuning usability
parents 6982e89e 14b8979b
...@@ -46,7 +46,8 @@ void FactGroup::_setupTimer() ...@@ -46,7 +46,8 @@ void FactGroup::_setupTimer()
if (_updateRateMSecs > 0) { if (_updateRateMSecs > 0) {
connect(&_updateTimer, &QTimer::timeout, this, &FactGroup::_updateAllValues); connect(&_updateTimer, &QTimer::timeout, this, &FactGroup::_updateAllValues);
_updateTimer.setSingleShot(false); _updateTimer.setSingleShot(false);
_updateTimer.start(_updateRateMSecs); _updateTimer.setInterval(_updateRateMSecs);
_updateTimer.start();
} }
} }
...@@ -125,3 +126,19 @@ void FactGroup::_updateAllValues(void) ...@@ -125,3 +126,19 @@ void FactGroup::_updateAllValues(void)
fact->sendDeferredValueChangedSignal(); fact->sendDeferredValueChangedSignal();
} }
} }
void FactGroup::setLiveUpdates(bool liveUpdates)
{
if (_updateTimer.interval() == 0) {
return;
}
if (liveUpdates) {
_updateTimer.stop();
} else {
_updateTimer.start();
}
for(Fact* fact: _nameToFactMap) {
fact->setSendValueChangedSignals(liveUpdates);
}
}
...@@ -38,6 +38,9 @@ public: ...@@ -38,6 +38,9 @@ public:
/// @return FactGroup for specified name, NULL if not found /// @return FactGroup for specified name, NULL if not found
Q_INVOKABLE FactGroup* getFactGroup(const QString& name); Q_INVOKABLE FactGroup* getFactGroup(const QString& name);
/// Turning on live updates will allow value changes to flow through as they are received.
Q_INVOKABLE void setLiveUpdates(bool liveUpdates);
QStringList factNames(void) const { return _factNames; } QStringList factNames(void) const { return _factNames; }
QStringList factGroupNames(void) const { return _nameToFactGroupMap.keys(); } QStringList factGroupNames(void) const { return _nameToFactGroupMap.keys(); }
......
...@@ -142,9 +142,17 @@ RowLayout { ...@@ -142,9 +142,17 @@ RowLayout {
} }
Component.onCompleted: { Component.onCompleted: {
// Stop deferring updates to vehicle values. We need them as fast as we can for charting.
_activeVehicle.setLiveUpdates(true)
_activeVehicle.setpoint.setLiveUpdates(true)
saveTuningParamValues() saveTuningParamValues()
} }
Component.onDestruction: {
_activeVehicle.setLiveUpdates(false)
_activeVehicle.setpoint.setLiveUpdates(true)
}
on_CurrentTuneTypeChanged: { on_CurrentTuneTypeChanged: {
saveTuningParamValues() saveTuningParamValues()
resetGraphs() resetGraphs()
...@@ -159,7 +167,8 @@ RowLayout { ...@@ -159,7 +167,8 @@ RowLayout {
min: 0 min: 0
max: 0 max: 0
labelFormat: "%d" labelFormat: "%d"
titleText: "sec" titleText: "msec"
tickCount: 11
} }
ValueAxis { ValueAxis {
...@@ -167,7 +176,8 @@ RowLayout { ...@@ -167,7 +176,8 @@ RowLayout {
min: 0 min: 0
max: 0 max: 0
labelFormat: "%d" labelFormat: "%d"
titleText: "sec" titleText: "msec"
tickCount: 11
} }
ValueAxis { ValueAxis {
...@@ -192,41 +202,37 @@ RowLayout { ...@@ -192,41 +202,37 @@ RowLayout {
running: false running: false
repeat: true repeat: true
function startOrStop() {
if (dataTimer.running) {
dataTimer.stop()
} else {
dataTimer.start()
}
}
onTriggered: { onTriggered: {
var seconds = _msecs / 1000 _valueXAxis.max = _msecs
_valueXAxis.max = seconds _valueRateXAxis.max = _msecs
_valueRateXAxis.max = seconds
getValues() getValues()
valueSeries.append(seconds, _value) valueSeries.append(_msecs, _value)
adjustYAxisMin(_valueYAxis, _value) adjustYAxisMin(_valueYAxis, _value)
adjustYAxisMax(_valueYAxis, _value) adjustYAxisMax(_valueYAxis, _value)
valueSetpointSeries.append(seconds, _valueSetpoint) valueSetpointSeries.append(_msecs, _valueSetpoint)
adjustYAxisMin(_valueYAxis, _valueSetpoint) adjustYAxisMin(_valueYAxis, _valueSetpoint)
adjustYAxisMax(_valueYAxis, _valueSetpoint) adjustYAxisMax(_valueYAxis, _valueSetpoint)
valueRateSeries.append(seconds, _valueRate) valueRateSeries.append(_msecs, _valueRate)
adjustYAxisMin(_valueRateYAxis, _valueRate) adjustYAxisMin(_valueRateYAxis, _valueRate)
adjustYAxisMax(_valueRateYAxis, _valueRate) adjustYAxisMax(_valueRateYAxis, _valueRate)
valueRateSetpointSeries.append(seconds, _valueRateSetpoint) valueRateSetpointSeries.append(_msecs, _valueRateSetpoint)
adjustYAxisMin(_valueRateYAxis, _valueRateSetpoint) adjustYAxisMin(_valueRateYAxis, _valueRateSetpoint)
adjustYAxisMax(_valueRateYAxis, _valueRateSetpoint) adjustYAxisMax(_valueRateYAxis, _valueRateSetpoint)
_msecs += interval _msecs += interval
/*
Testing with just start/stop for now. No time limit.
if (valueSeries.count > _maxPointCount) {
valueSeries.remove(0)
valueSetpointSeries.remove(0)
valueRateSeries.remove(0)
valueRateSetpointSeries.remove(0)
valueXAxis.min = valueSeries.at(0).x
valueRateXAxis.min = valueSeries.at(0).x
}
*/
} }
property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
...@@ -279,7 +285,10 @@ RowLayout { ...@@ -279,7 +285,10 @@ RowLayout {
text: "-" text: "-"
onClicked: { onClicked: {
var value = modelData.value var value = modelData.value
modelData.value -= value * adjustPercentModel.get(adjustPercentCombo.currentIndex).value var newValue = value - (value * adjustPercentModel.get(adjustPercentCombo.currentIndex).value)
if (newValue >= modelData.min) {
modelData.value = newValue
}
} }
} }
} }
...@@ -301,7 +310,10 @@ RowLayout { ...@@ -301,7 +310,10 @@ RowLayout {
text: "+" text: "+"
onClicked: { onClicked: {
var value = modelData.value var value = modelData.value
modelData.value += value * adjustPercentModel.get(adjustPercentCombo.currentIndex).value var newValue = value + (value * adjustPercentModel.get(adjustPercentCombo.currentIndex).value)
if (newValue <= modelData.max) {
modelData.value = newValue
}
} }
} }
} }
...@@ -372,7 +384,7 @@ RowLayout { ...@@ -372,7 +384,7 @@ RowLayout {
QGCButton { QGCButton {
text: dataTimer.running ? qsTr("Stop") : qsTr("Start") text: dataTimer.running ? qsTr("Stop") : qsTr("Start")
onClicked: dataTimer.running = !dataTimer.running onClicked: dataTimer.startOrStop()
} }
} }
} }
......
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