地面站终端 App
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

402 lines
16 KiB

/****************************************************************************
*
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
10 years ago
import QtQuick 2.5
import QtQuick.Controls 1.2
import QtQuick.Dialogs 1.2
10 years ago
import QGroundControl.FactSystem 1.0
import QGroundControl.FactControls 1.0
import QGroundControl.Palette 1.0
import QGroundControl.Controls 1.0
import QGroundControl.ScreenTools 1.0
QGCView {
id: rootQGCView
viewPanel: panel
property Fact battAmpPerVolt: controller.getParameterFact(-1, "BATT_AMP_PERVOLT")
property Fact battCapacity: controller.getParameterFact(-1, "BATT_CAPACITY")
property Fact battCurrPin: controller.getParameterFact(-1, "BATT_CURR_PIN")
property Fact battMonitor: controller.getParameterFact(-1, "BATT_MONITOR")
property Fact battVoltMult: controller.getParameterFact(-1, "BATT_VOLT_MULT")
property Fact battVoltPin: controller.getParameterFact(-1, "BATT_VOLT_PIN")
property real _margins: ScreenTools.defaultFontPixelHeight
property bool _showAdvanced: sensorCombo.currentIndex == sensorModel.count - 1
Component.onCompleted: calcSensor()
function calcSensor() {
for (var i=0; i<sensorModel.count - 1; i++) {
if (sensorModel.get(i).voltPin == battVoltPin.value &&
sensorModel.get(i).currPin == battCurrPin.value &&
Math.abs(sensorModel.get(i).voltMult - battVoltMult.value) < 0.001 &&
Math.abs(sensorModel.get(i).ampPerVolt - battAmpPerVolt.value) < 0.0001) {
sensorCombo.currentIndex = i
return
}
}
sensorCombo.currentIndex = sensorModel.count - 1
}
QGCPalette { id: palette; colorGroupEnabled: panel.enabled }
FactPanelController { id: controller; factPanel: panel }
ListModel {
id: sensorModel
ListElement {
text: qsTr("Power Module 90A")
10 years ago
voltPin: 2
currPin: 3
voltMult: 10.1
ampPerVolt: 17.0
}
ListElement {
text: qsTr("Power Module HV")
10 years ago
voltPin: 2
currPin: 3
voltMult: 12.02
ampPerVolt: 39.877
}
ListElement {
text: "3DR Iris"
voltPin: 2
currPin: 3
voltMult: 12.02
ampPerVolt: 17.0
}
ListElement {
text: qsTr("Other")
10 years ago
}
}
Component {
id: calcVoltageMultiplierDlgComponent
QGCViewDialog {
id: calcVoltageMultiplierDlg
QGCFlickable {
anchors.fill: parent
contentHeight: column.height
contentWidth: column.width
Column {
id: column
width: calcVoltageMultiplierDlg.width
spacing: ScreenTools.defaultFontPixelHeight
QGCLabel {
width: parent.width
wrapMode: Text.WordWrap
text: "Measure battery voltage using an external voltmeter and enter the value below. Click Calculate to set the new voltage multiplier."
}
Grid {
columns: 2
spacing: ScreenTools.defaultFontPixelHeight / 2
verticalItemAlignment: Grid.AlignVCenter
QGCLabel {
text: "Measured voltage:"
}
QGCTextField { id: measuredVoltage }
QGCLabel { text: "Vehicle voltage:" }
QGCLabel { text: controller.vehicle.battery.voltage.valueString }
QGCLabel { text: "Voltage multiplier:" }
FactLabel { fact: battVoltMult }
}
QGCButton {
text: "Calculate"
onClicked: {
var measuredVoltageValue = parseFloat(measuredVoltage.text)
if (measuredVoltageValue == 0) {
return
}
var newVoltageMultiplier = (measuredVoltageValue * battVoltMult.value) / controller.vehicle.battery.voltage.value
if (newVoltageMultiplier != 0) {
battVoltMult.value = newVoltageMultiplier
}
}
}
} // Column
} // QGCFlickable
} // QGCViewDialog
} // Component - calcVoltageMultiplierDlgComponent
Component {
id: calcAmpsPerVoltDlgComponent
QGCViewDialog {
id: calcAmpsPerVoltDlg
QGCFlickable {
anchors.fill: parent
contentHeight: column.height
contentWidth: column.width
Column {
id: column
width: calcAmpsPerVoltDlg.width
spacing: ScreenTools.defaultFontPixelHeight
QGCLabel {
width: parent.width
wrapMode: Text.WordWrap
text: "Measure current draw using an external current meter and enter the value below. Click Calculate to set the new amps per volt value."
}
Grid {
columns: 2
spacing: ScreenTools.defaultFontPixelHeight / 2
verticalItemAlignment: Grid.AlignVCenter
QGCLabel {
text: "Measured current:"
}
QGCTextField { id: measuredCurrent }
QGCLabel { text: "Vehicle current:" }
QGCLabel { text: controller.vehicle.battery.current.valueString }
QGCLabel { text: "Amps per volt:" }
FactLabel { fact: battAmpPerVolt }
}
QGCButton {
text: "Calculate"
onClicked: {
var measuredCurrentValue = parseFloat(measuredCurrent.text)
if (measuredCurrentValue == 0) {
return
}
var newAmpsPerVolt = (measuredCurrentValue * battAmpPerVolt.value) / controller.vehicle.battery.current.value
if (newAmpsPerVolt != 0) {
battAmpPerVolt.value = newAmpsPerVolt
}
}
}
} // Column
} // QGCFlickable
} // QGCViewDialog
} // Component - calcAmpsPerVoltDlgComponent
10 years ago
QGCViewPanel {
id: panel
anchors.fill: parent
QGCFlickable {
10 years ago
anchors.fill: parent
clip: true
contentWidth: capacityField.x + capacityField.width + _margins
contentHeight: (_showAdvanced ? ampPerVoltHelp.y + ampPerVoltHelp.height : sensorCombo.y + sensorCombo.height) + _margins
10 years ago
QGCLabel {
id: monitorLabel
anchors.margins: _margins
anchors.left: parent.left
anchors.baseline: monitorCombo.baseline
text: qsTr("Battery monitor:")
10 years ago
}
FactComboBox {
id: monitorCombo
anchors.topMargin: _margins
anchors.top: parent.top
anchors.left: capacityField.left
width: capacityField.width
fact: battMonitor
indexModel: false
}
QGCLabel {
id: capacityLabel
anchors.margins: _margins
anchors.left: parent.left
anchors.baseline: capacityField.baseline
text: qsTr("Battery capacity:")
10 years ago
}
FactTextField {
id: capacityField
anchors.leftMargin: _margins
anchors.topMargin: _margins / 2
anchors.top: monitorCombo.bottom
anchors.left: capacityLabel.right
width: ScreenTools.defaultFontPixelWidth * 25
fact: battCapacity
}
QGCLabel {
id: sensorLabel
anchors.margins: _margins
anchors.left: parent.left
anchors.baseline: sensorCombo.baseline
text: qsTr("Power sensor:")
10 years ago
}
QGCComboBox {
id: sensorCombo
anchors.topMargin: _margins
anchors.top: capacityField.bottom
anchors.left: capacityField.left
width: capacityField.width
model: sensorModel
onActivated: {
if (index < sensorModel.count - 1) {
battVoltPin.value = sensorModel.get(index).voltPin
battCurrPin.value = sensorModel.get(index).currPin
battVoltMult.value = sensorModel.get(index).voltMult
battAmpPerVolt.value = sensorModel.get(index).ampPerVolt
} else {
}
}
}
QGCLabel {
id: currPinLabel
anchors.margins: _margins
anchors.left: parent.left
anchors.baseline: currPinCombo.baseline
text: qsTr("Current pin:")
10 years ago
visible: _showAdvanced
}
FactComboBox {
id: currPinCombo
anchors.topMargin: _margins
anchors.top: sensorCombo.bottom
anchors.left: capacityField.left
width: capacityField.width
fact: battCurrPin
indexModel: false
visible: _showAdvanced
}
QGCLabel {
id: voltPinLabel
anchors.margins: _margins
anchors.left: parent.left
anchors.baseline: voltPinCombo.baseline
text: qsTr("Voltage pin:")
10 years ago
visible: _showAdvanced
}
FactComboBox {
id: voltPinCombo
anchors.topMargin: _margins / 2
anchors.top: currPinCombo.bottom
anchors.left: capacityField.left
width: capacityField.width
fact: battVoltPin
indexModel: false
visible: _showAdvanced
}
QGCLabel {
id: voltMultLabel
anchors.margins: _margins
anchors.left: parent.left
anchors.baseline: voltMultField.baseline
text: qsTr("Voltage multiplier:")
10 years ago
visible: _showAdvanced
}
FactTextField {
id: voltMultField
anchors.topMargin: _margins
10 years ago
anchors.top: voltPinCombo.bottom
anchors.left: capacityField.left
width: capacityField.width
fact: battVoltMult
visible: _showAdvanced
}
QGCButton {
id: voltMultCalculateButton
anchors.margins: _margins
anchors.left: voltMultField.right
anchors.baseline: voltMultField.baseline
text: "Calculate"
visible: _showAdvanced
onClicked: showDialog(calcVoltageMultiplierDlgComponent, qsTr("Calculate Voltage Multiplier"), qgcView.showDialogDefaultWidth, StandardButton.Close)
}
QGCLabel {
id: voltMultHelp
anchors.left: voltMultLabel.left
anchors.right: voltMultCalculateButton.right
anchors.topMargin: _margins / 2
anchors.top: voltMultField.bottom
font.pointSize: ScreenTools.smallFontPointSize
wrapMode: Text.WordWrap
text: "If the battery voltage reported by the vehicle is largely different than the voltage read externally using a voltmeter you can adjust the voltage multiplier value to correct this. " +
"Click the Calculate button for help with calculating a new value."
visible: _showAdvanced
}
10 years ago
QGCLabel {
id: ampPerVoltLabel
anchors.margins: _margins
anchors.left: parent.left
anchors.baseline: ampPerVoltField.baseline
text: qsTr("Amps per volt:")
10 years ago
visible: _showAdvanced
}
FactTextField {
id: ampPerVoltField
anchors.topMargin: _margins
anchors.top: voltMultHelp.bottom
10 years ago
anchors.left: capacityField.left
width: capacityField.width
fact: battAmpPerVolt
visible: _showAdvanced
}
QGCButton {
id: ampPerVoltCalculateButton
anchors.margins: _margins
anchors.left: ampPerVoltField.right
anchors.baseline: ampPerVoltField.baseline
text: "Calculate"
visible: _showAdvanced
onClicked: showDialog(calcAmpsPerVoltDlgComponent, qsTr("Calculate Amps per Volt"), qgcView.showDialogDefaultWidth, StandardButton.Close)
}
QGCLabel {
id: ampPerVoltHelp
anchors.left: ampPerVoltLabel.left
anchors.right: ampPerVoltCalculateButton.right
anchors.topMargin: _margins / 2
anchors.top: ampPerVoltField.bottom
font.pointSize: ScreenTools.smallFontPointSize
wrapMode: Text.WordWrap
text: "If the current draw reported by the vehicle is largely different than the current read externally using a current meter you can adjust the amps per volt value to correct this. " +
"Click the Calculate button for help with calculating a new value."
visible: _showAdvanced
}
} // QGCFlickable
10 years ago
} // QGCViewPanel
} // QGCView