1999 lines
101 KiB
QML
1999 lines
101 KiB
QML
//========================================================================================================================================================================
|
|
// CONFIG_BATTERIE.QML
|
|
// Ce fichier traite la configuration d'une batterie. La page permet notamment de :
|
|
// - Modifier la config de la batterie (ou de la créer la première fois),
|
|
// - Supprimer la batterie
|
|
// La page est appelée depuis la page config_batteries_1, en cliquant sur la batterie à modifier (ou sur le '+' en vue de sa création)
|
|
//========================================================================================================================================================================
|
|
import QtQuick 2.12
|
|
import QtQuick.Controls 2.12
|
|
import QtQml.Models
|
|
|
|
import qt.koriolan.shipheart 1.0
|
|
import"fonctions.js" as Fonctions
|
|
import"fonctions_batteries.js" as Fonctions_batteries
|
|
|
|
|
|
Shipheart_page {
|
|
id: page_config_batterie
|
|
|
|
// Mis en forme :
|
|
readonly property double pourcentage_largeur_colonne_gauche: 0.75
|
|
readonly property double espace_colonnes_principales: 20
|
|
readonly property double pourcentage_hauteur_ligne_haut: 1
|
|
readonly property double espace_lignes_principales: 20
|
|
readonly property double affichage_hauteur_utile: shipheart_hauteur_page - shipheart_hauteur_bandeau_haut - shipheart_hauteur_bandeau_bas
|
|
|
|
readonly property int hauteur_ligne_formulaire: 60
|
|
readonly property double pourcentage_largeur_labels_formulaire: 0.5
|
|
readonly property double pourcentage_largeur_unites_formulaire: 0.1
|
|
|
|
readonly property int hauteur_bouton_droit: 80
|
|
|
|
readonly property double pourcentage_bandeau_bas_largeur_zone_retour: 1
|
|
|
|
readonly property int periode_init_raffraichissement_parametres: 1 // En ms
|
|
readonly property int periode_raffraichissement_parametres: 1000 // En ms
|
|
readonly property int step_timer_appui_long: 30 // en ms
|
|
|
|
readonly property int type_boite_information_alerte_changement_type: 0
|
|
readonly property int type_boite_information_alerte_changement_tension: 1
|
|
readonly property int type_boite_information_supprimer: 2
|
|
|
|
|
|
|
|
|
|
|
|
// Affichage :
|
|
property int valeur_timer_appui_long: 0
|
|
property bool mouvement_entrees_batterie_grid_en_cours: false
|
|
property bool affichage_avance: false
|
|
|
|
// Données :
|
|
property int id_batterie: 0
|
|
property int adresse_module: 0 // Contient l'adresse du module supportant la ou les entrées affectées à cette batterie
|
|
|
|
property int type_entrees: 0
|
|
property int type_entrees_init: 0
|
|
property int no_entree: 0
|
|
property int no_entree_init: 0
|
|
property int tension_nominale: 0
|
|
property int tension_nominale_init: 0
|
|
property int type_batterie: 0 // Devrait s'appeler 'type' par homogénéité vs les champs de BDD mais pb de compatibilité avec la propriété 'type' de Shipheart_boite_dialogue'...
|
|
property int type_batterie_init: 0 // Idem...
|
|
property int id_famille: 0
|
|
|
|
|
|
|
|
// Modèles :
|
|
// Note : les modèles chargés dans 'main.qml' n'ont pas à être rechargés dans les pages suivantes
|
|
|
|
|
|
//===========================================================
|
|
// Timer periode raffraichissement parametres :
|
|
//===========================================================
|
|
Timer {
|
|
id: timer_raffraichissement_parametres
|
|
interval: periode_init_raffraichissement_parametres
|
|
triggeredOnStart: false
|
|
running: true
|
|
repeat: true
|
|
onTriggered: {
|
|
if (interval == periode_init_raffraichissement_parametres) { // Premier passage, 1ms après le premier chargement
|
|
interval = periode_raffraichissement_parametres;
|
|
|
|
init_page();
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
//===========================================================
|
|
// Timer pour gérer les appuis longs :
|
|
//===========================================================
|
|
Timer {
|
|
id: timer_appui_long
|
|
interval: step_timer_appui_long
|
|
triggeredOnStart: false
|
|
repeat: true
|
|
onTriggered: {
|
|
if (valeur_timer_appui_long < shipheart_mouse_press_and_hold_interval_tres_long) valeur_timer_appui_long+= step_timer_appui_long;
|
|
else // Le fait de ne pas utilise le OnPressandHold permet d'être sût que la sortie se fait au même moment que la fin du comptage (sinon, on peut avoir de petits décalages)
|
|
{
|
|
timer_appui_long.running = false;
|
|
valeur_timer_appui_long = 0;
|
|
|
|
if (mousearea_forcer_pleine_charge.pressed) forcer_pleine_charge();
|
|
if (mousearea_reset_soh.pressed) reset_soh();
|
|
if (mousearea_reset_compteur.pressed) reset_compteurs();
|
|
if (mousearea_bouton_supprimer.pressed)
|
|
{
|
|
if (check_avant_suppression() !== -1)
|
|
{
|
|
suppression_batterie();
|
|
timer_tempo_reconfiguration.restart(); // Lancement du timer pour attendre la fin de la reconfiguration
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//===========================================================
|
|
// Lorsque la page est sur le point d'être affichée dans la pile :
|
|
//===========================================================
|
|
StackView.onActivating: {
|
|
|
|
// Relecture de la résistance interne pour le cas où l'on reviendrait d'une phase d'étalonnage :
|
|
var res;
|
|
res = bdd.requete_unique('SELECT Resistance_interne FROM TB_Batteries WHERE Cle_primaire=' + id_batterie + ' ');
|
|
champ_formulaire_Resistance_interne.text = Number(res[0]);
|
|
}
|
|
|
|
// Titre de la page :
|
|
Shipheart_titre_1 {titre: (id_batterie === 0) ? qsTr("Création d'un parc de batteries") : qsTr("Configuration du parc de batteries"); hauteur: shipheart_hauteur_bandeau_haut}
|
|
|
|
//-------------------------------------------------------
|
|
// Ecran Haut - Gauche :
|
|
//-------------------------------------------------------
|
|
Rectangle {
|
|
id: zone_affichage_haut_gauche
|
|
x: 0
|
|
y: shipheart_hauteur_bandeau_haut;
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: (affichage_hauteur_utile * pourcentage_hauteur_ligne_haut) - (espace_lignes_principales / 2);
|
|
color: "transparent"
|
|
|
|
ListView {
|
|
id: grille_principale
|
|
|
|
width: parent.width
|
|
height: parent.height
|
|
snapMode: GridView.SnapToRow // L'arret de l'affichage se fera sur une rangée entière
|
|
clip: true // Nécessaire pour que les Delegates s'arretent à l'intérieur de la GridView
|
|
model: modele_grille_principale
|
|
footer: Rectangle { // Permet de dégager la place suffisante en fin de GridView pour accéder même au dernier élément lorsque que clavier est déplié
|
|
height: shipheart_hauteur_clavier
|
|
color: "transparent"
|
|
}
|
|
|
|
ObjectModel {
|
|
id: modele_grille_principale
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Nom
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
|
|
Shipheart_formulaire_label {
|
|
text: qsTr("Nom de la batterie")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
couleur: (champ_formulaire_Nom.text !== "")
|
|
? shipheart_formulaire_couleur_texte_par_defaut
|
|
: shipheart_formulaire_couleur_texte_en_erreur
|
|
}
|
|
|
|
Shipheart_formulaire_textfield {
|
|
id: champ_formulaire_Nom
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Famille
|
|
Rectangle {
|
|
id: ligne_famille
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
|
|
Shipheart_formulaire_label {
|
|
text: qsTr("Groupe de batteries")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
couleur: (champ_formulaire_Famille.currentIndex !== 0)
|
|
? shipheart_formulaire_couleur_texte_par_defaut
|
|
: shipheart_formulaire_couleur_texte_en_erreur
|
|
}
|
|
|
|
Shipheart_formulaire_combobox {
|
|
id: champ_formulaire_Famille
|
|
model: ListModel { }
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
|
|
onActivated: {
|
|
shipheart_clic();
|
|
id_famille = champ_formulaire_Famille.model.get(champ_formulaire_Famille.currentIndex).valeur;
|
|
}
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Type d'entrées
|
|
Rectangle {
|
|
width: parent.width
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (champ_formulaire_Famille.currentIndex !== 0)
|
|
|
|
Shipheart_formulaire_label {
|
|
text: qsTr("Point de mesure")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
couleur: (champ_formulaire_Type_entrees.currentIndex !== 0)
|
|
? shipheart_formulaire_couleur_texte_par_defaut
|
|
: shipheart_formulaire_couleur_texte_en_erreur
|
|
}
|
|
|
|
Shipheart_formulaire_combobox {
|
|
id: champ_formulaire_Type_entrees
|
|
model: ListModel { }
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
|
|
onActivated: {
|
|
shipheart_clic();
|
|
adresse_module = champ_formulaire_Type_entrees.model.get(champ_formulaire_Type_entrees.currentIndex).module;
|
|
type_entrees = champ_formulaire_Type_entrees.model.get(champ_formulaire_Type_entrees.currentIndex).type;
|
|
no_entree = champ_formulaire_Type_entrees.model.get(champ_formulaire_Type_entrees.currentIndex).no;
|
|
|
|
if (model.get(currentIndex).type === 0) affichage_avance = false; // Dévalide le mode avancé si on revient à un état inconnu...
|
|
}
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Type (de batterie)
|
|
Rectangle {
|
|
width: parent.width
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (champ_formulaire_Type_entrees.currentIndex !== 0)
|
|
|
|
Shipheart_formulaire_label {
|
|
text: qsTr("Type de batterie(s)")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
couleur: (champ_formulaire_Type.currentIndex !== 0)
|
|
? shipheart_formulaire_couleur_texte_par_defaut
|
|
: shipheart_formulaire_couleur_texte_en_erreur
|
|
}
|
|
|
|
Shipheart_formulaire_combobox {
|
|
id: champ_formulaire_Type
|
|
model: ListModel { }
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
|
|
onActivated: {
|
|
shipheart_clic();
|
|
|
|
if (model.get(currentIndex).valeur === 0) affichage_avance = false; // Dévalide le mode avancé si on revient à un état inconnu...
|
|
|
|
if ((id_batterie !== 0) && // Si on n'est pas en phase de création...
|
|
(model.get(currentIndex).valeur !== type_batterie) && // ... et qu'on change le type...
|
|
(model.get(currentIndex).valeur !== 0)) // ... et que la nouvelle valeur n'est pas "non définie"
|
|
{
|
|
shipheart_clic();
|
|
boite_information.niveau = 1
|
|
boite_information.imageTitreSource = "/images/attention.png"
|
|
boite_information.message = qsTr("La modification du <b>type</b> de batterie(s) va nécessiter la remise en <i>configuration usine</i> de certains paramètres.<br /><br />Si vous ne souhaitez pas que cette reconfiguration soit effectuée, notamment si vous avez effectué des réglages spécifiques, cliquez sur ANNULER. <br /><br />Sinon, cliquez sur CONFIRMER pour valider le changement.");
|
|
boite_information.boutonOkTexte = qsTr("Confirmer")
|
|
boite_information.boutonAnnuler = true
|
|
boite_information.type = type_boite_information_alerte_changement_type;
|
|
boite_information.open();
|
|
}
|
|
else // Sinon, on prend immédiatement en compte le changement :
|
|
{
|
|
if (model.get(currentIndex).valeur !== 0) // Dans le cas où on passe à "Non défini", on ne traite rien et on garde la valeur précédente (aisni, si on revient ensuite sur la version initiale, on n'affichera pas le message d'alerte...)
|
|
{
|
|
type_batterie = model.get(currentIndex).valeur;
|
|
maj_valeurs_par_defaut_type_batterie();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Tension_nominale
|
|
Rectangle {
|
|
width: parent.width
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (champ_formulaire_Type_entrees.currentIndex !== 0) && (champ_formulaire_Type.currentIndex !== 0)
|
|
|
|
Shipheart_formulaire_label {
|
|
text: qsTr("Tension nominale")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
couleur: (champ_formulaire_Tension_nominale.currentIndex !== 0)
|
|
? shipheart_formulaire_couleur_texte_par_defaut
|
|
: shipheart_formulaire_couleur_texte_en_erreur
|
|
}
|
|
|
|
Shipheart_formulaire_combobox {
|
|
id: champ_formulaire_Tension_nominale
|
|
model: ListModel { }
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
|
|
onActivated: {
|
|
shipheart_clic();
|
|
|
|
if (model.get(currentIndex).valeur === 0) affichage_avance = false; // Dévalide le mode avancé si on revient à un état inconnu...
|
|
|
|
if ((id_batterie !== 0) && // Si on n'est pas en phase de création...
|
|
(model.get(currentIndex).valeur !== tension_nominale) && // ... et qu'on change la tension nominale...
|
|
(model.get(currentIndex).valeur !== 0)) // ... et que la nouvelle valeur n'est pas "non définie"
|
|
{
|
|
shipheart_clic();
|
|
boite_information.niveau = 1
|
|
boite_information.imageTitreSource = "/images/attention.png"
|
|
boite_information.message = qsTr("La modification de la <b>tension nominale</b> du parc de batteries va nécessiter la remise en <i>configuration usine</i> de certains paramètres.<br /><br />Si vous ne souhaitez pas que cette reconfiguration soit effectuée, notamment si vous avez effectué des réglages spécifiques, cliquez sur ANNULER. <br /><br />Sinon, cliquez sur CONFIRMER pour valider le changement.");
|
|
boite_information.boutonOkTexte = qsTr("Confirmer")
|
|
boite_information.boutonAnnuler = true
|
|
boite_information.type = type_boite_information_alerte_changement_tension;
|
|
boite_information.open();
|
|
}
|
|
else // Sinon, on prend immédiatement en compte le changement :
|
|
{
|
|
if (model.get(currentIndex).valeur !== 0) // Dans le cas où on passe à "Non défini", on ne traite rien et on garde la valeur précédente (aisni, si on revient ensuite sur la version initiale, on n'affichera pas le message d'alerte...)
|
|
{
|
|
tension_nominale = champ_formulaire_Tension_nominale.model.get(champ_formulaire_Tension_nominale.currentIndex).valeur;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Capacite_1
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (champ_formulaire_Type_entrees.currentIndex !== 0) &&
|
|
(champ_formulaire_Type.currentIndex !== 0) &&
|
|
(champ_formulaire_Tension_nominale.currentIndex !== 0)
|
|
// && (type_entrees === shipheart_batteries_type_entrees_ibs)
|
|
|
|
Shipheart_formulaire_label { // Label :
|
|
text: qsTr("Capacité")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_textfield { // Champ de saisie :
|
|
id: champ_formulaire_Capacite_1
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire - pourcentage_largeur_unites_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
flag_num_only: true
|
|
}
|
|
|
|
Shipheart_formulaire_unite { // Unités :
|
|
text: qsTr("Ah")
|
|
width: parent.width * pourcentage_largeur_unites_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
|
|
//==============================================================================
|
|
// Bouton "Affichage avancé" :
|
|
//==============================================================================-
|
|
Rectangle {
|
|
id: bouton_affichage_avance
|
|
width: parent.width
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (champ_formulaire_Type_entrees.currentIndex !== 0) &&
|
|
(champ_formulaire_Type.currentIndex !== 0) &&
|
|
(champ_formulaire_Tension_nominale.currentIndex !== 0)
|
|
|
|
Shipheart_formulaire_bouton {
|
|
titre: (affichage_avance) ? qsTr("Masquer les paramètres avancés") : qsTr("Afficher les paramètres avancés")
|
|
actif: false
|
|
affichage_fleche : true
|
|
fleche_haut: affichage_avance
|
|
couleur_titre: couleur_gris_moyen
|
|
gras_titre: true
|
|
width: parent.width
|
|
|
|
MouseArea{
|
|
anchors.fill : parent
|
|
onClicked: {
|
|
if (affichage_avance) affichage_avance = false;
|
|
else affichage_avance = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
//==============================================================================
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Tension_gain
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (affichage_avance) && (type_entrees !== shipheart_batteries_type_entrees_ibs)
|
|
|
|
Shipheart_formulaire_label { // Label :
|
|
text: qsTr("Coefficient correcteur d'entrée de tension")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_textfield { // Champ de saisie :
|
|
id: champ_formulaire_Tension_gain
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire - pourcentage_largeur_unites_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
flag_num_only: true
|
|
}
|
|
|
|
Shipheart_formulaire_unite { // Unités :
|
|
text: qsTr("")
|
|
width: parent.width * pourcentage_largeur_unites_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
|
|
Shipheart_titre_2 {titre: qsTr("Caractéristiques du parc de batteries"); visible: affichage_avance && (type_entrees === shipheart_batteries_type_entrees_ibs)}
|
|
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Heures_capacite_1
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (affichage_avance) && (type_entrees === shipheart_batteries_type_entrees_ibs)
|
|
|
|
Shipheart_formulaire_label { // Label :
|
|
text: qsTr("Durée correspondant à la capacité")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_textfield { // Champ de saisie :
|
|
id: champ_formulaire_Heures_capacite_1
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire - pourcentage_largeur_unites_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
flag_num_only: true
|
|
}
|
|
|
|
Shipheart_formulaire_unite { // Unités :
|
|
text: qsTr("h")
|
|
width: parent.width * pourcentage_largeur_unites_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Capacite_2
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
// visible: (affichage_avance) && (type_entrees === shipheart_batteries_type_entrees_ibs)
|
|
visible: false
|
|
|
|
Shipheart_formulaire_label { // Label :
|
|
text: qsTr("Capacité 2")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_textfield { // Champ de saisie :
|
|
id: champ_formulaire_Capacite_2
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire - pourcentage_largeur_unites_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
flag_num_only: true
|
|
}
|
|
|
|
Shipheart_formulaire_unite { // Unités :
|
|
text: qsTr("Ah")
|
|
width: parent.width * pourcentage_largeur_unites_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Heures_capacite_2
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
// visible: (affichage_avance) && (type_entrees === shipheart_batteries_type_entrees_ibs)
|
|
visible: false
|
|
|
|
Shipheart_formulaire_label { // Label :
|
|
text: qsTr("Durée de capacité 2")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_textfield { // Champ de saisie :
|
|
id: champ_formulaire_Heures_capacite_2
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire - pourcentage_largeur_unites_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
flag_num_only: true
|
|
}
|
|
|
|
Shipheart_formulaire_unite { // Unités :
|
|
text: qsTr("h")
|
|
width: parent.width * pourcentage_largeur_unites_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Coeff_peukert
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (affichage_avance) && (type_entrees === shipheart_batteries_type_entrees_ibs)
|
|
|
|
Shipheart_formulaire_label { // Label :
|
|
text: qsTr("Coefficient de Peukert")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_textfield { // Champ de saisie :
|
|
id: champ_formulaire_Coeff_peukert
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire - pourcentage_largeur_unites_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
flag_num_only: true
|
|
}
|
|
|
|
Shipheart_formulaire_unite { // Unités :
|
|
text: qsTr("")
|
|
width: parent.width * pourcentage_largeur_unites_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Résistance_interne
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (affichage_avance) && (type_entrees === shipheart_batteries_type_entrees_ibs)
|
|
|
|
Shipheart_formulaire_label { // Label :
|
|
text: qsTr("Résistance interne")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_textfield { // Champ de saisie :
|
|
id: champ_formulaire_Resistance_interne
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire - pourcentage_largeur_unites_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
flag_num_only: true
|
|
}
|
|
|
|
Shipheart_formulaire_unite { // Unités :
|
|
text: qsTr("mΩ")
|
|
width: parent.width * pourcentage_largeur_unites_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Soh
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (affichage_avance) && (type_entrees === shipheart_batteries_type_entrees_ibs)
|
|
|
|
Shipheart_formulaire_label {
|
|
text: qsTr("Soh actuel")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_valeur_fixe {
|
|
id: champ_formulaire_Soh
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire - pourcentage_largeur_unites_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_unite { // Unités :
|
|
text: qsTr("%")
|
|
width: parent.width * pourcentage_largeur_unites_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
|
|
Shipheart_titre_2 {titre: qsTr("Paramètres de pleine charge"); visible: affichage_avance && (type_entrees === shipheart_batteries_type_entrees_ibs)}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Tension_pleine_charge
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (affichage_avance) && (type_entrees === shipheart_batteries_type_entrees_ibs)
|
|
|
|
Shipheart_formulaire_label { // Label :
|
|
text: qsTr("Tension mini pleine charge")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_textfield { // Champ de saisie :
|
|
id: champ_formulaire_Tension_pleine_charge
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire - pourcentage_largeur_unites_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
flag_num_only: true
|
|
}
|
|
|
|
Shipheart_formulaire_unite { // Unités :
|
|
text: qsTr("V")
|
|
width: parent.width * pourcentage_largeur_unites_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Courant_pleine_charge
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (affichage_avance) && (type_entrees === shipheart_batteries_type_entrees_ibs)
|
|
|
|
Shipheart_formulaire_label { // Label :
|
|
text: qsTr("Courant maxi pleine charge")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_textfield { // Champ de saisie :
|
|
id: champ_formulaire_Courant_pleine_charge
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire - pourcentage_largeur_unites_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
flag_num_only: true
|
|
}
|
|
|
|
Shipheart_formulaire_unite { // Unités :
|
|
text: qsTr("A")
|
|
width: parent.width * pourcentage_largeur_unites_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Temporisation_pleine_charge
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (affichage_avance) && (type_entrees === shipheart_batteries_type_entrees_ibs)
|
|
|
|
Shipheart_formulaire_label { // Label :
|
|
text: qsTr("Temporisation pleine charge")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_textfield { // Champ de saisie :
|
|
id: champ_formulaire_Temporisation_pleine_charge
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire - pourcentage_largeur_unites_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
flag_num_only: true
|
|
}
|
|
|
|
Shipheart_formulaire_unite { // Unités :
|
|
text: qsTr("s")
|
|
width: parent.width * pourcentage_largeur_unites_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Efficacite_charge
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (affichage_avance) && (type_entrees === shipheart_batteries_type_entrees_ibs)
|
|
|
|
Shipheart_formulaire_label { // Label :
|
|
text: qsTr("Efficacité de charge")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_textfield { // Champ de saisie :
|
|
id: champ_formulaire_Efficacite_charge
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire - pourcentage_largeur_unites_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
flag_num_only: true
|
|
}
|
|
|
|
Shipheart_formulaire_unite { // Unités :
|
|
text: qsTr("")
|
|
width: parent.width * pourcentage_largeur_unites_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
|
|
Shipheart_titre_2 {titre: qsTr("Caractéristiques de charge nulle"); visible: affichage_avance && (type_entrees === shipheart_batteries_type_entrees_ibs)}
|
|
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Tension_charge_nulle
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (affichage_avance) && (type_entrees === shipheart_batteries_type_entrees_ibs)
|
|
|
|
Shipheart_formulaire_label { // Label :
|
|
text: qsTr("Tension de détection charge nulle")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_textfield { // Champ de saisie :
|
|
id: champ_formulaire_Tension_charge_nulle
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire - pourcentage_largeur_unites_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
flag_num_only: true
|
|
}
|
|
|
|
Shipheart_formulaire_unite { // Unités :
|
|
text: qsTr("V")
|
|
width: parent.width * pourcentage_largeur_unites_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Temporisation_charge_nulle
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (affichage_avance) && (type_entrees === shipheart_batteries_type_entrees_ibs)
|
|
|
|
Shipheart_formulaire_label { // Label :
|
|
text: qsTr("Temporisation charge nulle")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_textfield { // Champ de saisie :
|
|
id: champ_formulaire_Temporisation_charge_nulle
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire - pourcentage_largeur_unites_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
flag_num_only: true
|
|
}
|
|
|
|
Shipheart_formulaire_unite { // Unités :
|
|
text: qsTr("s")
|
|
width: parent.width * pourcentage_largeur_unites_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
|
|
Shipheart_titre_2 {titre: qsTr("Historique"); visible: affichage_avance && (type_entrees === shipheart_batteries_type_entrees_ibs)}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Nombre_cycles
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (affichage_avance) && (type_entrees === shipheart_batteries_type_entrees_ibs)
|
|
|
|
Shipheart_formulaire_label {
|
|
text: qsTr("Nombre de cycles de charge")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_valeur_fixe {
|
|
id: champ_formulaire_Nombre_cycles
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Ligne de formulaire : Nombre_decharges_completes
|
|
Rectangle {
|
|
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
|
|
height: visible ? hauteur_ligne_formulaire : 0
|
|
color: "transparent"
|
|
visible: (affichage_avance) && (type_entrees === shipheart_batteries_type_entrees_ibs)
|
|
|
|
Shipheart_formulaire_label {
|
|
text: qsTr("Nombre de décharges complètes")
|
|
width: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_valeur_fixe {
|
|
id: champ_formulaire_Nombre_decharges_completes
|
|
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
|
|
x: parent.width * pourcentage_largeur_labels_formulaire
|
|
}
|
|
|
|
Shipheart_formulaire_ligne_separation {
|
|
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------
|
|
// Ecran Droite :
|
|
//-------------------------------------------------------
|
|
Rectangle {
|
|
id: zone_affichage_droite
|
|
x: zone_affichage_haut_gauche.width + espace_colonnes_principales
|
|
y: shipheart_hauteur_bandeau_haut;
|
|
width: (shipheart_largeur_page * (1 - pourcentage_largeur_colonne_gauche)) - (espace_colonnes_principales / 2)
|
|
height: (affichage_hauteur_utile * pourcentage_hauteur_ligne_haut) - (espace_lignes_principales / 2);
|
|
color: "transparent"
|
|
|
|
|
|
Column {
|
|
anchors.fill: parent
|
|
spacing: 10
|
|
|
|
//.......................................................
|
|
// Bouton Enregistrer/créer
|
|
//.......................................................
|
|
Rectangle {
|
|
id: bouton_enregistrer_creer
|
|
width: parent.width
|
|
height: hauteur_bouton_droit
|
|
color: shipheart_couleur_fond_bouton
|
|
radius: shipheart_rayon_bouton
|
|
visible:
|
|
// (! clavier.active) && // Si le clavier est n'est PAS déplié... // SDIR #255
|
|
(champ_formulaire_Nom.text !== "") && // Si le nom n'est PAS vide...
|
|
(id_famille !== 0) && // Si la famille est définie...
|
|
(type_entrees !== 0) && // Si le type d'entrées EST défini...
|
|
(type_batterie != 0) && // Si le type de batterie (plomb, Li,...) est défini...
|
|
(tension_nominale !== 0) // et si la tension (12/24V) est définie.
|
|
Text {
|
|
anchors.centerIn: parent
|
|
font.pixelSize: 20
|
|
text: (id_batterie === 0) ? qsTr("Créer la batterie") : qsTr("Enregistrer")
|
|
color: couleur_blanc_casse
|
|
}
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: {
|
|
shipheart_clic();
|
|
if (id_batterie !== 0) mise_a_jour_batterie(); // Mise à jour des données saisies dans la BDD et reconfiguration par l'application pour prise en compte.
|
|
else creation_batterie();
|
|
timer_tempo_reconfiguration.restart();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//.......................................................
|
|
// Bouton de suppression
|
|
//.......................................................
|
|
Rectangle {
|
|
width: parent.width
|
|
height: hauteur_bouton_droit
|
|
color: shipheart_couleur_fond_bouton
|
|
radius: shipheart_rayon_bouton
|
|
visible: (! clavier.active) && (id_batterie !== 0)
|
|
|
|
Rectangle { // Barre grandissante pour montrer durée d'appui vs tempo nécessaire :
|
|
width: (valeur_timer_appui_long / shipheart_mouse_press_and_hold_interval_tres_long) * parent.width
|
|
height: parent.height
|
|
color: couleur_rouge_transparent
|
|
radius: shipheart_rayon_bouton
|
|
visible: mousearea_bouton_supprimer.pressed
|
|
}
|
|
Text {
|
|
anchors {
|
|
verticalCenter: parent.verticalCenter
|
|
horizontalCenter: parent.horizontalCenter
|
|
}
|
|
font.pixelSize: 20
|
|
text: qsTr("Supprimer")
|
|
color: couleur_blanc_casse
|
|
}
|
|
MouseArea {
|
|
id: mousearea_bouton_supprimer
|
|
anchors.fill: parent
|
|
onPressed: { // Déclenché lors de l'appui inital
|
|
timer_appui_long.running = true;
|
|
valeur_timer_appui_long = 0;
|
|
shipheart_clic();
|
|
}
|
|
onClicked: { // Déclenché si l'appui n'a pas été suffisement long pour avoir un Press&Hold :
|
|
timer_appui_long.running = false;
|
|
valeur_timer_appui_long = 0;
|
|
}
|
|
onExited: { // Déclenché si le doigt sort de la zone du bouton (sinon, on continue à compter alors qu'on est sorti de la zone et même relaché le doigt !!)
|
|
timer_appui_long.running = false;
|
|
valeur_timer_appui_long = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//.......................................................
|
|
// Bouton Forcer Pleine Charge
|
|
//.......................................................
|
|
Rectangle {
|
|
width: parent.width
|
|
height: hauteur_bouton_droit
|
|
color: shipheart_couleur_fond_bouton
|
|
radius: shipheart_rayon_bouton
|
|
visible: (! clavier.active) && (id_batterie !== 0) && (affichage_avance)
|
|
|
|
Rectangle { // Barre grandissante pour montrer durée d'appui vs tempo nécessaire :
|
|
width: (valeur_timer_appui_long / shipheart_mouse_press_and_hold_interval_tres_long) * parent.width
|
|
height: parent.height
|
|
color: couleur_rouge_transparent
|
|
radius: shipheart_rayon_bouton
|
|
visible: mousearea_forcer_pleine_charge.pressed
|
|
}
|
|
|
|
Text {
|
|
anchors.centerIn: parent
|
|
font.pixelSize: 20
|
|
text: qsTr("Forcer Pleine Charge")
|
|
color: couleur_blanc_casse
|
|
}
|
|
|
|
MouseArea {
|
|
id: mousearea_forcer_pleine_charge
|
|
anchors.fill: parent
|
|
onPressed: { // Déclenché lors de l'appui inital
|
|
timer_appui_long.running = true;
|
|
valeur_timer_appui_long = 0;
|
|
shipheart_clic();
|
|
}
|
|
onClicked: { // Déclenché si l'appui n'a pas été suffisement long pour avoir un Press&Hold :
|
|
timer_appui_long.running = false;
|
|
valeur_timer_appui_long = 0;
|
|
}
|
|
onExited: { // Déclenché si le doigt sort de la zone du bouton (sinon, on continue à compter alors qu'on est sorti de la zone et même relaché le doigt !!)
|
|
timer_appui_long.running = false;
|
|
valeur_timer_appui_long = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//.......................................................
|
|
// Bouton Reset SOH
|
|
//.......................................................
|
|
Rectangle {
|
|
width: parent.width
|
|
height: hauteur_bouton_droit
|
|
color: shipheart_couleur_fond_bouton
|
|
radius: shipheart_rayon_bouton
|
|
visible: (! clavier.active) && (id_batterie !== 0) && (affichage_avance)
|
|
|
|
Rectangle { // Barre grandissante pour montrer durée d'appui vs tempo nécessaire :
|
|
width: (valeur_timer_appui_long / shipheart_mouse_press_and_hold_interval_tres_long) * parent.width
|
|
height: parent.height
|
|
color: couleur_rouge_transparent
|
|
radius: shipheart_rayon_bouton
|
|
visible: mousearea_reset_soh.pressed
|
|
}
|
|
|
|
Text {
|
|
anchors.centerIn: parent
|
|
font.pixelSize: 20
|
|
text: qsTr("Réinitialiser SOH")
|
|
color: couleur_blanc_casse
|
|
}
|
|
|
|
MouseArea {
|
|
id: mousearea_reset_soh
|
|
anchors.fill: parent
|
|
onPressed: { // Déclenché lors de l'appui inital
|
|
timer_appui_long.running = true;
|
|
valeur_timer_appui_long = 0;
|
|
shipheart_clic();
|
|
}
|
|
onClicked: { // Déclenché si l'appui n'a pas été suffisement long pour avoir un Press&Hold :
|
|
timer_appui_long.running = false;
|
|
valeur_timer_appui_long = 0;
|
|
}
|
|
onExited: { // Déclenché si le doigt sort de la zone du bouton (sinon, on continue à compter alors qu'on est sorti de la zone et même relaché le doigt !!)
|
|
timer_appui_long.running = false;
|
|
valeur_timer_appui_long = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
//.......................................................
|
|
// Bouton Reset compteurs
|
|
//.......................................................
|
|
Rectangle {
|
|
width: parent.width
|
|
height: hauteur_bouton_droit
|
|
color: shipheart_couleur_fond_bouton
|
|
radius: shipheart_rayon_bouton
|
|
visible: (! clavier.active) && (id_batterie !== 0) && (affichage_avance)
|
|
|
|
Rectangle { // Barre grandissante pour montrer durée d'appui vs tempo nécessaire :
|
|
width: (valeur_timer_appui_long / shipheart_mouse_press_and_hold_interval_tres_long) * parent.width
|
|
height: parent.height
|
|
color: couleur_rouge_transparent
|
|
radius: shipheart_rayon_bouton
|
|
visible: mousearea_reset_compteur.pressed
|
|
}
|
|
|
|
Text {
|
|
anchors.centerIn: parent
|
|
font.pixelSize: 20
|
|
text: qsTr("Réinitialiser Compteurs")
|
|
color: couleur_blanc_casse
|
|
}
|
|
|
|
MouseArea {
|
|
id: mousearea_reset_compteur
|
|
anchors.fill: parent
|
|
onPressed: { // Déclenché lors de l'appui inital
|
|
timer_appui_long.running = true;
|
|
valeur_timer_appui_long = 0;
|
|
shipheart_clic();
|
|
}
|
|
onClicked: { // Déclenché si l'appui n'a pas été suffisement long pour avoir un Press&Hold :
|
|
timer_appui_long.running = false;
|
|
valeur_timer_appui_long = 0;
|
|
}
|
|
onExited: { // Déclenché si le doigt sort de la zone du bouton (sinon, on continue à compter alors qu'on est sorti de la zone et même relaché le doigt !!)
|
|
timer_appui_long.running = false;
|
|
valeur_timer_appui_long = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//.......................................................
|
|
// Bouton d'accès à l'étalonnage
|
|
//.......................................................
|
|
Rectangle {
|
|
width: parent.width
|
|
height: hauteur_bouton_droit
|
|
color: shipheart_couleur_fond_bouton
|
|
radius: shipheart_rayon_bouton
|
|
visible: (! clavier.active) &&
|
|
(id_batterie !== 0) && // Si l'on est en création, inutile de proposer le bouton
|
|
(affichage_avance) && // Lors de la création, on ne propose pas d'étalonner (éviter de devoir s'adapter en permanence au remplissage en cours...
|
|
(tension_nominale === tension_nominale_init) // Si on a chnagé de tension nominale, on ne propose pas d'étalonner (avant d'enregitrer les changements)
|
|
Text {
|
|
anchors.centerIn: parent
|
|
font.pixelSize: 20
|
|
text: qsTr("Etalonner")
|
|
color: couleur_blanc_casse
|
|
}
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: {
|
|
shipheart_clic();
|
|
if (type_entrees !== shipheart_batteries_type_entrees_ibs)
|
|
{
|
|
stackView.push("config_valeurs_niveaux.qml", {"table": "TB_Batteries", "id": id_batterie})
|
|
}
|
|
else
|
|
{
|
|
stackView.push("etalonnage_carte.qml", {"adresse_module": champ_formulaire_Type_entrees.model.get(champ_formulaire_Type_entrees.currentIndex).module})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Timer {
|
|
id: timer_tempo_reconfiguration
|
|
interval: 250 // Cette tempo n'est utilisée que pour le premier cycle
|
|
triggeredOnStart: false
|
|
running: false
|
|
repeat: true
|
|
onTriggered: {
|
|
if (bdd.check_fin_configuration())
|
|
{
|
|
timer_tempo_reconfiguration.stop();
|
|
stackView.pop(); // Retour à la page de config des circuits
|
|
}
|
|
else timer_tempo_reconfiguration.interval = 100 // Tempo plus courte pour les lectures suivantes
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------
|
|
// Bandeau bas :
|
|
//-------------------------------------------------------
|
|
Row {
|
|
x: 0
|
|
y: shipheart_hauteur_page - shipheart_hauteur_bandeau_bas;
|
|
width: shipheart_largeur_page;
|
|
height: shipheart_hauteur_bandeau_bas;
|
|
padding: 5
|
|
spacing: 10
|
|
|
|
//.................................................
|
|
// Bouton retour
|
|
//.................................................
|
|
Rectangle {
|
|
id: bandeau_bas_zone_retour
|
|
width: (parent.width * pourcentage_bandeau_bas_largeur_zone_retour) - parent.leftPadding - (parent.spacing / 2)
|
|
height: shipheart_hauteur_bandeau_bas - parent.topPadding - parent.bottomPadding;
|
|
radius: shipheart_rayon_bouton
|
|
color: shipheart_couleur_fond_bouton
|
|
|
|
Image {
|
|
source: "/images/icone_retour.png"
|
|
sourceSize.height: 30
|
|
anchors {
|
|
verticalCenter: parent.verticalCenter
|
|
horizontalCenter: parent.horizontalCenter
|
|
}
|
|
}
|
|
|
|
MouseArea { // Zone d'interaction. On est obligé de la mettre dans la grille pour que Rectangle et MouseArea soient frères ou parent/enfant ET qu'on n'occupe qu'un espace dans la grille.
|
|
id: mouse_area_bandeau_bas_zone_retour
|
|
anchors.fill: parent
|
|
onClicked: {
|
|
shipheart_clic();
|
|
stackView.pop()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------
|
|
// Boite de validation :
|
|
//-------------------------------------------------------
|
|
Shipheart_boite_dialogue {
|
|
id: boite_information
|
|
onClicked: {
|
|
//console.log("Le Bouton [" + bouton + "] est appuyé");
|
|
switch (type)
|
|
{
|
|
//-----------------------------------------------------
|
|
case type_boite_information_alerte_changement_type:
|
|
if (bouton === shipheart_boite_dialogue_bouton_1)
|
|
{
|
|
type_batterie = champ_formulaire_Type.model.get(champ_formulaire_Type.currentIndex).valeur;
|
|
maj_valeurs_par_defaut_type_batterie();
|
|
}
|
|
if (bouton === shipheart_boite_dialogue_bouton_2)
|
|
{
|
|
// Repositionnement à la valeur d'origine :
|
|
champ_formulaire_Type.currentIndex = recherche_index_valeur_modele(type, champ_formulaire_Type.model, "Type");
|
|
}
|
|
|
|
break;
|
|
|
|
//-----------------------------------------------------
|
|
case type_boite_information_alerte_changement_tension:
|
|
if (bouton === shipheart_boite_dialogue_bouton_1)
|
|
{
|
|
tension_nominale = champ_formulaire_Tension_nominale.model.get(champ_formulaire_Tension_nominale.currentIndex).valeur;
|
|
}
|
|
if (bouton === shipheart_boite_dialogue_bouton_2)
|
|
{
|
|
// Repositionnement à la valeur d'origine :
|
|
champ_formulaire_Tension_nominale.currentIndex = recherche_index_valeur_modele(tension_nominale, champ_formulaire_Tension_nominale.model, "Tension_nominale");
|
|
}
|
|
|
|
break;
|
|
|
|
//-----------------------------------------------------
|
|
case type_boite_information_supprimer :
|
|
default: ;
|
|
}
|
|
}
|
|
}
|
|
|
|
//===========================================================
|
|
// Busy Indicator :
|
|
//===========================================================
|
|
Shipheart_busy_indicator {
|
|
id: busy_indicator
|
|
|
|
running: timer_tempo_reconfiguration.running
|
|
}
|
|
|
|
|
|
// Note : il est inutile de prévoir un Mousearea pour sortir de l'économiseur sur cette page puisqu'il
|
|
// est systématiquement bloqué pour toutes les pages lancées depuis 'Paramètres Avancés'.
|
|
|
|
|
|
|
|
//=============================================================================================================
|
|
// Init de la page
|
|
//=============================================================================================================
|
|
function init_page()
|
|
{
|
|
var req, res;
|
|
var nb;
|
|
var i;
|
|
var chaine_capacite_1, chaine_capacite_2;
|
|
|
|
//console.log("Id de la batterie = " + id_batterie);
|
|
|
|
if (id_batterie > 0) // Cas d'une modification de batterie existante :
|
|
{
|
|
req = 'SELECT Nom, ';
|
|
req += ' Adresse_module, ';
|
|
req += ' Type_entrees, ';
|
|
req += ' Entrees, ';
|
|
req += ' Type, ';
|
|
req += ' Tension_nominale, ';
|
|
req += ' Capacite_1, ';
|
|
req += ' Capacite_2, ';
|
|
req += ' Tension_gain, ';
|
|
req += ' Coeff_peukert, ';
|
|
req += ' Resistance_interne, ';
|
|
req += ' Tension_pleine_charge, ';
|
|
req += ' Courant_pleine_charge, ';
|
|
req += ' Temporisation_pleine_charge, ';
|
|
req += ' Efficacite_charge, ';
|
|
req += ' Tension_charge_nulle, ';
|
|
req += ' Temporisation_charge_nulle, ';
|
|
req += ' Soh, ';
|
|
req += ' Nombre_cycles, ';
|
|
req += ' Nombre_decharges_completes, ';
|
|
req += ' ID_Famille ';
|
|
req += ' FROM TB_Batteries ';
|
|
req += ' WHERE Cle_primaire=' + id_batterie + ' ';
|
|
//console.log("req = [ " + req + "; ]");
|
|
|
|
|
|
res = bdd.requete_unique(req);
|
|
|
|
//---------------------------------------------------------------
|
|
// Mise à jour du champs de saisie de chaque zone de formulaire :
|
|
i = 0;
|
|
champ_formulaire_Nom.text = res[i ++];
|
|
adresse_module = Number(res[i ++]);
|
|
type_entrees = Number(res[i ++]);
|
|
no_entree = Number(res[i ++]);
|
|
type_batterie = Number(res[i ++]);
|
|
tension_nominale = Number(res[i ++]);
|
|
chaine_capacite_1 = res[i ++];
|
|
chaine_capacite_2 = res[i ++];
|
|
champ_formulaire_Tension_gain.text = Number(res[i ++]).toFixed(3);
|
|
champ_formulaire_Coeff_peukert.text = Number(res[i ++]).toFixed(2);
|
|
champ_formulaire_Resistance_interne.text = Number(res[i ++]).toFixed(1);
|
|
champ_formulaire_Tension_pleine_charge.text = Number(res[i ++]).toFixed(2);
|
|
champ_formulaire_Courant_pleine_charge.text = Number(res[i ++]).toFixed(2);
|
|
champ_formulaire_Temporisation_pleine_charge.text = Number(res[i ++]).toFixed(0);
|
|
champ_formulaire_Efficacite_charge.text = Number(res[i ++]).toFixed(3);
|
|
champ_formulaire_Tension_charge_nulle.text = Number(res[i ++]).toFixed(2);
|
|
champ_formulaire_Temporisation_charge_nulle.text = Number(res[i ++]).toFixed(0);
|
|
champ_formulaire_Soh.text = Number(res[i ++]).toFixed(0); // En lecture seule
|
|
champ_formulaire_Nombre_cycles.text = Number(res[i ++]); // En lecture seule
|
|
champ_formulaire_Nombre_decharges_completes.text = Number(res[i ++]); // En lecture seule
|
|
id_famille = Number(res[i ++]);
|
|
}
|
|
else // Cas d'une création d'une batterie :
|
|
{
|
|
champ_formulaire_Nom.text = "";
|
|
adresse_module = 0;
|
|
type_entrees = 0;
|
|
no_entree = 0;
|
|
type_batterie = 0;
|
|
tension_nominale = 0;
|
|
chaine_capacite_1 = "100/20";
|
|
chaine_capacite_2 = "";
|
|
id_famille = 0;
|
|
}
|
|
|
|
|
|
//---------------------------------------------------------------------------------------
|
|
// Famille :
|
|
champ_formulaire_Famille.model.clear();
|
|
champ_formulaire_Famille.model.append({"valeur": 0, "texte": "Non défini" });
|
|
|
|
req = 'SELECT Cle_primaire, Nom FROM TB_Familles WHERE Type_source=' + shipheart_type_source_batteries + ' ORDER BY Priorite_affichage ';
|
|
//console.log("Requête = " + req)
|
|
nb = bdd.requete(req);
|
|
|
|
for (i = 0; i < nb; i ++)
|
|
{
|
|
res = bdd.lecture_ligne();
|
|
if (!res.isEmpty)
|
|
{
|
|
champ_formulaire_Famille.model.append({"valeur": Number(res[0]), "texte": res[1] });
|
|
}
|
|
}
|
|
|
|
// Positionnement de l'index sur la valeur en cours :
|
|
i = recherche_index_valeur_modele(id_famille, champ_formulaire_Famille.model, "Famille");
|
|
if (i === -1) champ_formulaire_Famille.currentIndex = 0;
|
|
else champ_formulaire_Famille.currentIndex = i;
|
|
|
|
|
|
//---------------------------------------------------------------------------------------
|
|
// Type d'entrées :
|
|
|
|
// Mise à zéro et rensignement de la première entrée du modèle de liste des types d'entrées :
|
|
champ_formulaire_Type_entrees.model.clear();
|
|
champ_formulaire_Type_entrees.model.append({"module": 0, "type": 0, "no": 0, "type_carte": 0, "texte": qsTr("Non défini") });
|
|
champ_formulaire_Type_entrees.currentIndex = 0; // Par défaut
|
|
|
|
//==========================================
|
|
// Entrées prédéfinies des ShipBS présentes (les ShipBS sont prioritaires dans ce cas et sont traitées avant les autres) :
|
|
req = 'SELECT Adresse_k_bus, Type ';
|
|
req += 'FROM TB_Modules_config WHERE ';
|
|
// req += 'Presence=1 AND ';
|
|
req += 'Type=' + shipheart_type_module_shipBS + ' ';
|
|
req += 'ORDER BY Adresse_k_bus';
|
|
//console.log("req = [ " + req + "; ]");
|
|
nb = bdd.requete(req);
|
|
for (i = 0; i < nb; i ++)
|
|
{
|
|
res = bdd.lecture_ligne();
|
|
if (!res.isEmpty)
|
|
{
|
|
// Ajout de l'entrée dans le modèle :
|
|
champ_formulaire_Type_entrees.model.append({ "module": Number(res[0]),
|
|
"type": shipheart_batteries_type_entrees_ibs,
|
|
"no": 0,
|
|
"type_carte": shipheart_type_module_shipBS,
|
|
"texte": qsTr("ShipBS [@ %1]").arg(Number(res[0]))
|
|
});
|
|
|
|
// Mise à jour de l'index actuel de la combo box :
|
|
if ((type_entrees === shipheart_batteries_type_entrees_ibs) &&
|
|
(adresse_module === Number(res[0])))
|
|
{
|
|
champ_formulaire_Type_entrees.currentIndex = (champ_formulaire_Type_entrees.model.count - 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
//==============================================================
|
|
// Entrées prédéfinies des modules présents (autres que ShipBS) :
|
|
req = 'SELECT Adresse_k_bus, Type ';
|
|
req += 'FROM TB_Modules_config WHERE ';
|
|
req += 'Presence=1 ';
|
|
req += 'AND (';
|
|
req += 'Type=' + shipheart_type_module_shipbase + ' ';
|
|
req += 'OR Type=' + shipheart_type_module_shippower812 + ' ';
|
|
req += 'OR Type=' + shipheart_type_module_shippower8DC + ' ';
|
|
req += ')';
|
|
req += 'ORDER BY Adresse_k_bus';
|
|
//console.log("req = [ " + req + "; ]");
|
|
nb = bdd.requete(req);
|
|
for (i = 0; i < nb; i ++)
|
|
{
|
|
res = bdd.lecture_ligne();
|
|
if (!res.isEmpty)
|
|
{
|
|
champ_formulaire_Type_entrees.model.append({ "module": Number(res[0]),
|
|
"type": shipheart_batteries_type_entrees_predefinie,
|
|
"no": shipheart_capteur_predefini_in_v,
|
|
"type_carte": Number(res[1]),
|
|
"texte": qsTr("Alimentation %1").arg(Fonctions.nom_type_module(Number(res[1]))) + ((Number(res[1]) === shipheart_type_module_shipbase) ? "" : " [@ " + Number(res[0]) + "]")
|
|
});
|
|
|
|
// Mise à jour de l'index actuel de la combo box :
|
|
if ((type_entrees === shipheart_batteries_type_entrees_predefinie) &&
|
|
(adresse_module === Number(res[0])) &&
|
|
(no_entree === shipheart_capteur_predefini_in_v))
|
|
{
|
|
champ_formulaire_Type_entrees.currentIndex = (champ_formulaire_Type_entrees.model.count - 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
//==============================================================
|
|
// Entrées VOLT :
|
|
for (i = 0; i < shipheart_entrees_volt_max_nombre; i ++)
|
|
{
|
|
champ_formulaire_Type_entrees.model.append({ "module": 0,
|
|
"type": shipheart_batteries_type_entrees_volt,
|
|
"no": (i+1),
|
|
"type_carte": shipheart_type_module_shipbase,
|
|
"texte": qsTr("Entrée VOLT n° %1").arg(i+1)
|
|
});
|
|
if ((type_entrees === shipheart_batteries_type_entrees_volt) &&
|
|
(no_entree === (i + 1)))
|
|
{
|
|
champ_formulaire_Type_entrees.currentIndex = (champ_formulaire_Type_entrees.model.count - 1);
|
|
}
|
|
}
|
|
|
|
type_entrees_init = type_entrees;
|
|
no_entree_init = no_entree;
|
|
|
|
//---------------------------------------------------------------------------------------
|
|
// Type (de batterie) :
|
|
champ_formulaire_Type.model.clear();
|
|
champ_formulaire_Type.model.append({"valeur": shipheart_batteries_type_indefini, "texte": qsTr("Non défini") });
|
|
champ_formulaire_Type.model.append({"valeur": shipheart_batteries_type_plomb_acide_liquide, "texte": qsTr("Plomb - Acide liquide") });
|
|
champ_formulaire_Type.model.append({"valeur": shipheart_batteries_type_plomb_agm_vrla, "texte": qsTr("Plomb - AGM / VRLA") });
|
|
champ_formulaire_Type.model.append({"valeur": shipheart_batteries_type_plomb_gel, "texte": qsTr("Plomb - Gel") });
|
|
champ_formulaire_Type.model.append({"valeur": shipheart_batteries_type_plomb_carbone, "texte": qsTr("Plomb - Carbone") });
|
|
champ_formulaire_Type.model.append({"valeur": shipheart_batteries_type_lihium, "texte": qsTr("Lithium") });
|
|
|
|
// Positionnement de l'index sur la valeur en cours :
|
|
i = recherche_index_valeur_modele(type_batterie, champ_formulaire_Type.model, "Type");
|
|
if (i === -1) champ_formulaire_Type.currentIndex = recherche_index_valeur_modele(0, champ_formulaire_Type.model, "Type");
|
|
else champ_formulaire_Type.currentIndex = i;
|
|
|
|
type_batterie_init = type_batterie;
|
|
|
|
//---------------------------------------------------------------------------------------
|
|
// Tension nominale :
|
|
champ_formulaire_Tension_nominale.model.clear();
|
|
champ_formulaire_Tension_nominale.model.append({"valeur": 0, "texte": qsTr("Non définie") });
|
|
champ_formulaire_Tension_nominale.model.append({"valeur": 12, "texte": qsTr("12V") });
|
|
champ_formulaire_Tension_nominale.model.append({"valeur": 24, "texte": qsTr("24V") });
|
|
champ_formulaire_Tension_nominale.model.append({"valeur": 48, "texte": qsTr("48V") });
|
|
|
|
// Positionnement de l'index sur la valeur en cours :
|
|
i = recherche_index_valeur_modele(tension_nominale, champ_formulaire_Tension_nominale.model, "Tension_nominale");
|
|
if (i === -1) champ_formulaire_Tension_nominale.currentIndex = recherche_index_valeur_modele(0, champ_formulaire_Tension_nominale.model, "Tension_nominale");
|
|
else champ_formulaire_Tension_nominale.currentIndex = i;
|
|
|
|
tension_nominale_init = tension_nominale;
|
|
|
|
//---------------------------------------------------------------------------------------
|
|
// Entrées :
|
|
if (id_batterie > 0) // Cas d'une modification de batterie existante :
|
|
{
|
|
req = 'SELECT Type_entrees, Entrees FROM TB_Batteries WHERE Cle_primaire=' + id_batterie + ' ';
|
|
//console.log("req = [ " + req + "; ]");
|
|
res = bdd.requete_unique(req);
|
|
if (Number(res[0]) === type_entrees) // On ne récupère la chaine 'Entrées' que si la batterie était déjà de ce type. Sinon, on part sur une liste vierge (idem création)
|
|
{
|
|
no_entree = Number(res[1]);
|
|
}
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------
|
|
// Capacités :
|
|
var chaines_capacite;
|
|
|
|
if (chaine_capacite_1 !== "")
|
|
{
|
|
chaines_capacite = chaine_capacite_1.split('/');
|
|
champ_formulaire_Capacite_1.text = chaines_capacite[0];
|
|
champ_formulaire_Heures_capacite_1.text = chaines_capacite[1];
|
|
}
|
|
else
|
|
{
|
|
champ_formulaire_Capacite_1.text = "";
|
|
champ_formulaire_Heures_capacite_1.text = "";
|
|
}
|
|
|
|
if (chaine_capacite_2 !== "")
|
|
{
|
|
chaines_capacite = chaine_capacite_2.split('/');
|
|
champ_formulaire_Capacite_2.text = chaines_capacite[0];
|
|
champ_formulaire_Heures_capacite_2.text = chaines_capacite[1];
|
|
}
|
|
else
|
|
{
|
|
champ_formulaire_Capacite_2.text = "";
|
|
champ_formulaire_Heures_capacite_2.text = "";
|
|
}
|
|
}
|
|
|
|
|
|
//=============================================================================================================
|
|
// Mise à jour des valeurs par défaut en fonction du choix du Type (de batterie)
|
|
//=============================================================================================================
|
|
function maj_valeurs_par_defaut_type_batterie()
|
|
{
|
|
var i;
|
|
|
|
switch(type_batterie)
|
|
{
|
|
//-------------------------------------
|
|
default :
|
|
case shipheart_batteries_type_plomb_acide_liquide :
|
|
|
|
champ_formulaire_Tension_gain.text = "1.000";
|
|
champ_formulaire_Coeff_peukert.text = "1.20";
|
|
champ_formulaire_Resistance_interne.text = "20"; // En mOhms
|
|
champ_formulaire_Tension_pleine_charge.text = "13.80"; // En V
|
|
champ_formulaire_Courant_pleine_charge.text = "3.00"; // En A (Nb calculé sur 3% de la capacité)
|
|
champ_formulaire_Temporisation_pleine_charge.text = "180"; // En s
|
|
champ_formulaire_Efficacite_charge.text = "0.9"; // Sans unité
|
|
champ_formulaire_Tension_charge_nulle.text = "11.0"; // En V
|
|
champ_formulaire_Temporisation_charge_nulle.text = "30"; // En s
|
|
champ_formulaire_Temperature_seuil_haut.text = "50.0"; // En °C
|
|
champ_formulaire_Temperature_seuil_bas.text = "5.0"; // En °C
|
|
|
|
break;
|
|
|
|
//-------------------------------------
|
|
case shipheart_batteries_type_plomb_agm_vrla :
|
|
|
|
champ_formulaire_Tension_gain.text = "1.000";
|
|
champ_formulaire_Coeff_peukert.text = "1.05";
|
|
champ_formulaire_Resistance_interne.text = "3"; // En mOhms
|
|
champ_formulaire_Tension_pleine_charge.text = "13.50"; // En V
|
|
champ_formulaire_Courant_pleine_charge.text = "3.00"; // En A (Nb calculé sur 3% de la capacité)
|
|
champ_formulaire_Temporisation_pleine_charge.text = "180"; // En s
|
|
champ_formulaire_Efficacite_charge.text = "0.9"; // Sans unité
|
|
champ_formulaire_Tension_charge_nulle.text = "11.0"; // En V
|
|
champ_formulaire_Temporisation_charge_nulle.text = "30"; // En s
|
|
champ_formulaire_Temperature_seuil_haut.text = "50.0"; // En °C
|
|
champ_formulaire_Temperature_seuil_bas.text = "5.0"; // En °C
|
|
|
|
break;
|
|
|
|
//-------------------------------------
|
|
case shipheart_batteries_type_plomb_gel :
|
|
|
|
champ_formulaire_Tension_gain.text = "1.000";
|
|
champ_formulaire_Coeff_peukert.text = "1.1";
|
|
champ_formulaire_Resistance_interne.text = "2"; // En mOhms
|
|
champ_formulaire_Tension_pleine_charge.text = "13.30"; // En V
|
|
champ_formulaire_Courant_pleine_charge.text = "3.00"; // En A (Nb calculé sur 3% de la capacité)
|
|
champ_formulaire_Temporisation_pleine_charge.text = "180"; // En s
|
|
champ_formulaire_Efficacite_charge.text = "0.92"; // Sans unité
|
|
champ_formulaire_Tension_charge_nulle.text = "11.0"; // En V
|
|
champ_formulaire_Temporisation_charge_nulle.text = "30"; // En s
|
|
champ_formulaire_Temperature_seuil_haut.text = "50.0"; // En °C
|
|
champ_formulaire_Temperature_seuil_bas.text = "5.0"; // En °C
|
|
|
|
break;
|
|
|
|
//-------------------------------------
|
|
case shipheart_batteries_type_plomb_carbone :
|
|
|
|
champ_formulaire_Tension_gain.text = "1.000";
|
|
champ_formulaire_Coeff_peukert.text = "1.1";
|
|
champ_formulaire_Resistance_interne.text = "2"; // En mOhms
|
|
champ_formulaire_Tension_pleine_charge.text = "13.50"; // En V
|
|
champ_formulaire_Courant_pleine_charge.text = "3.00"; // En A (Nb calculé sur 3% de la capacité)
|
|
champ_formulaire_Temporisation_pleine_charge.text = "180"; // En s
|
|
champ_formulaire_Efficacite_charge.text = "0.92"; // Sans unité
|
|
champ_formulaire_Tension_charge_nulle.text = "11.0"; // En V
|
|
champ_formulaire_Temporisation_charge_nulle.text = "30"; // En s
|
|
champ_formulaire_Temperature_seuil_haut.text = "50.0"; // En °C
|
|
champ_formulaire_Temperature_seuil_bas.text = "5.0"; // En °C
|
|
|
|
break;
|
|
|
|
//-------------------------------------
|
|
case shipheart_batteries_type_lihium :
|
|
|
|
champ_formulaire_Tension_gain.text = "1.000";
|
|
champ_formulaire_Coeff_peukert.text = "1.00";
|
|
champ_formulaire_Resistance_interne.text = "0.5"; // En mOhms
|
|
champ_formulaire_Tension_pleine_charge.text = "13.50"; // En V
|
|
champ_formulaire_Courant_pleine_charge.text = "3.00"; // En A (Nb calculé sur 3% de la capacité)
|
|
champ_formulaire_Temporisation_pleine_charge.text = "180"; // En s
|
|
champ_formulaire_Efficacite_charge.text = "0.95"; // Sans unité
|
|
champ_formulaire_Tension_charge_nulle.text = "11.5"; // En V
|
|
champ_formulaire_Temporisation_charge_nulle.text = "30"; // En s
|
|
champ_formulaire_Temperature_seuil_haut.text = "50.0"; // En °C
|
|
champ_formulaire_Temperature_seuil_bas.text = "5.0"; // En °C
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
//=============================================================================================================
|
|
// Mise à jour des valeurs saisies de la batterie
|
|
//=============================================================================================================
|
|
function mise_a_jour_batterie()
|
|
{
|
|
var req;
|
|
var i;
|
|
var capacite_1, capacite_2;
|
|
var heures_capacite_1, heures_capacite_2;
|
|
var chaine_capacite_1, chaine_capacite_2;
|
|
var coeff_peukert;
|
|
var sous_req_liste_tension_soc = "";
|
|
|
|
|
|
//-------------------------------------------------------------------------------------------------------
|
|
// Capacités :
|
|
if (champ_formulaire_Capacite_1.text != "") capacite_1 = Number(champ_formulaire_Capacite_1.text);
|
|
else capacite_1 = 100; // Valeur par défaut (en Ah)
|
|
if (champ_formulaire_Heures_capacite_1.text != "") heures_capacite_1 = Number(champ_formulaire_Heures_capacite_1.text);
|
|
else heures_capacite_1 = 20; // Valeur par défaut (en h)
|
|
if (champ_formulaire_Capacite_2.text != "") capacite_2 = Number(champ_formulaire_Capacite_2.text);
|
|
else capacite_2 = 0;
|
|
if (champ_formulaire_Heures_capacite_2.text != "") heures_capacite_2 = Number(champ_formulaire_Heures_capacite_2.text);
|
|
else heures_capacite_2 = 0;
|
|
|
|
// Mise à jour des chaines pour la BDD :
|
|
chaine_capacite_1 = capacite_1 + "/" + heures_capacite_1; // Pour la capacité 1, on enregistre toujours la chaine
|
|
if ((capacite_2 !== 0) && (heures_capacite_2 !== 0)) chaine_capacite_2 = capacite_2 + "/" + heures_capacite_2;
|
|
else chaine_capacite_2 = "";
|
|
|
|
//-------------------------------------------------------------------------------------------------------
|
|
// Calcul du coefficient de Peukert :
|
|
coeff_peukert = Fonctions_batteries.coefficient_de_peukert(type_batterie, capacite_1, heures_capacite_1, capacite_2, heures_capacite_2);
|
|
//console.log("Coeff de Peukert calculé = " + coeff_peukert);
|
|
|
|
//-------------------------------------------------------------------------------------------------------
|
|
// Si la tension nominale de la batterie a été changée, on met obligatoirement à jour la liste valeurs/niveaux en version "usine" :
|
|
if (tension_nominale !== tension_nominale_init)
|
|
{
|
|
sous_req_liste_tension_soc = ', Liste_tension_soc="' + Fonctions_batteries.chaine_tension_niveau_batterie_usine(tension_nominale) + '" ';
|
|
} // Sinon, on ne fait rien sur cette liste.
|
|
|
|
|
|
//-------------------------------------------------------------------------------------------------------
|
|
// Mise à jour de l'entrée dans TB_Batteries :
|
|
req = 'UPDATE TB_Batteries SET Nom="' + champ_formulaire_Nom.text + '" ';
|
|
req += ', Type=' + type_batterie;
|
|
req += ', Tension_nominale=' + tension_nominale;
|
|
req += ', Adresse_module=' + adresse_module;
|
|
req += ', Type_entrees=' + type_entrees;
|
|
req += ', Entrees="' + no_entree + '" ';
|
|
req += ', Capacite_1="' + chaine_capacite_1 + '" ';
|
|
req += ', Capacite_2="' + chaine_capacite_2 + '" ';
|
|
req += ', Coeff_peukert=' + champ_formulaire_Coeff_peukert.text;
|
|
req += ', Resistance_interne=' + champ_formulaire_Resistance_interne.text;
|
|
req += ', Tension_pleine_charge=' + champ_formulaire_Tension_pleine_charge.text;
|
|
req += ', Courant_pleine_charge=' + champ_formulaire_Courant_pleine_charge.text;
|
|
req += ', Temporisation_pleine_charge=' + champ_formulaire_Temporisation_pleine_charge.text;
|
|
req += ', Efficacite_charge=' + champ_formulaire_Efficacite_charge.text;
|
|
req += ', Tension_charge_nulle=' + champ_formulaire_Tension_charge_nulle.text;
|
|
req += ', Temporisation_charge_nulle=' + champ_formulaire_Temporisation_charge_nulle.text;
|
|
req += ', Liste_temperature_resistance_interne="' + Fonctions_batteries.chaine_temperature_resistance_interne_usine(type_batterie) + '" ';
|
|
req += ', Tension_gain=' + champ_formulaire_Tension_gain.text;
|
|
req += ', ID_Famille=' + id_famille;
|
|
req += sous_req_liste_tension_soc;
|
|
req += ' WHERE Cle_primaire=' + id_batterie + ' '
|
|
//console.log("req = [ " + req + "; ]");
|
|
bdd.requete_unique(req);
|
|
|
|
synchro_bdd(shipheart_type_synchro_config);
|
|
}
|
|
|
|
//=============================================================================================================
|
|
// Création de la batterie
|
|
//=============================================================================================================
|
|
function creation_batterie()
|
|
{
|
|
var req, res;
|
|
var i;
|
|
var capacite_1, capacite_2;
|
|
var heures_capacite_1, heures_capacite_2;
|
|
var chaine_capacite_1, chaine_capacite_2;
|
|
var coeff_peukert;
|
|
|
|
|
|
//-------------------------------------------------------------------------------------------------------
|
|
// Capacités :
|
|
if (champ_formulaire_Capacite_1.text != "") capacite_1 = Number(champ_formulaire_Capacite_1.text);
|
|
else capacite_1 = 100; // Valeur par défaut (en Ah)
|
|
if (champ_formulaire_Heures_capacite_1.text != "") heures_capacite_1 = Number(champ_formulaire_Heures_capacite_1.text);
|
|
else heures_capacite_1 = 20; // Valeur par défaut (en h)
|
|
if (champ_formulaire_Capacite_2.text != "") capacite_2 = Number(champ_formulaire_Capacite_2.text);
|
|
else capacite_2 = 0;
|
|
if (champ_formulaire_Heures_capacite_2.text != "") heures_capacite_2 = Number(champ_formulaire_Heures_capacite_2.text);
|
|
else heures_capacite_2 = 0;
|
|
|
|
// Mise à jour des chaines pour la BDD :
|
|
chaine_capacite_1 = capacite_1 + "/" + heures_capacite_1; // Pour la capacité 1, on enregistre toujours la chaine
|
|
if ((capacite_2 !== 0) && (heures_capacite_2 !== 0)) chaine_capacite_2 = capacite_2 + "/" + heures_capacite_2;
|
|
else chaine_capacite_2 = "";
|
|
|
|
//-------------------------------------------------------------------------------------------------------
|
|
// Calcul du coefficient de Peukert :
|
|
coeff_peukert = Fonctions_batteries.coefficient_de_peukert(type_batterie, capacite_1, heures_capacite_1, capacite_2, heures_capacite_2);
|
|
//console.log("Coeff de Peukert calculé = " + coeff_peukert);
|
|
|
|
//-------------------------------------------------------------------------------------------------------
|
|
// Création de l'entrée dans TB_Batteries :
|
|
req = 'INSERT INTO TB_Batteries (Nom, ';
|
|
req += ' Type, ';
|
|
req += ' Tension_nominale, ';
|
|
req += ' Adresse_module, ';
|
|
req += ' Type_entrees, ';
|
|
req += ' Entrees, ';
|
|
req += ' Capacite_1, ';
|
|
req += ' Capacite_2, ';
|
|
req += ' Coeff_peukert, ';
|
|
req += ' Resistance_interne, ';
|
|
req += ' Tension_pleine_charge, ';
|
|
req += ' Courant_pleine_charge, ';
|
|
req += ' Temporisation_pleine_charge, ';
|
|
req += ' Efficacite_charge, ';
|
|
req += ' Tension_charge_nulle, '
|
|
req += ' Temporisation_charge_nulle, ';
|
|
req += ' Tension_gain, ';
|
|
req += ' Liste_tension_soc, ';
|
|
req += ' Liste_temperature_resistance_interne, ';
|
|
req += ' ID_Famille ';
|
|
req += ' ) VALUES ("' + champ_formulaire_Nom.text + '"';
|
|
req += ', ' + type_batterie;
|
|
req += ', ' + tension_nominale;
|
|
req += ', ' + adresse_module;
|
|
req += ', ' + type_entrees;
|
|
req += ', "' + no_entree + '" ';
|
|
req += ', "' + chaine_capacite_1 + '" ';
|
|
req += ', "' + chaine_capacite_2 + '" ';
|
|
req += ', ' + champ_formulaire_Coeff_peukert.text;
|
|
req += ', ' + champ_formulaire_Resistance_interne.text;
|
|
req += ', ' + champ_formulaire_Tension_pleine_charge.text;
|
|
req += ', ' + champ_formulaire_Courant_pleine_charge.text;
|
|
req += ', ' + champ_formulaire_Temporisation_pleine_charge.text;
|
|
req += ', ' + champ_formulaire_Efficacite_charge.text;
|
|
req += ', ' + champ_formulaire_Tension_charge_nulle.text;
|
|
req += ', ' + champ_formulaire_Temporisation_charge_nulle.text;
|
|
req += ', ' + champ_formulaire_Tension_gain.text;
|
|
req += ', "' + Fonctions_batteries.chaine_tension_niveau_batterie_usine(tension_nominale) + '" ';
|
|
req += ', "' + Fonctions_batteries.chaine_temperature_resistance_interne_usine(type_batterie) + '" ';
|
|
req += ', ' + id_famille;
|
|
req += ') ';
|
|
//console.log("Requête = " + req)
|
|
bdd.requete_unique(req);
|
|
|
|
// Demande de reconfiguration système via la BDD car on a modifié des valeurs de configuration :
|
|
synchro_bdd(shipheart_type_synchro_config);
|
|
}
|
|
|
|
|
|
//=============================================================================================================
|
|
// Check suppression de la batterie
|
|
//=============================================================================================================
|
|
function check_avant_suppression()
|
|
{
|
|
var req, res;
|
|
var nb;
|
|
var i;
|
|
var message = "";
|
|
|
|
//=========================================================================
|
|
// Recherche de l'impact de cette suppression sur les spécifiques clients :
|
|
switch(Number(shipheart_specifique_client[0]))
|
|
{
|
|
//------------------------------------------------------
|
|
default:
|
|
case shipheart_specifique_client_tous:
|
|
//console.log("Tous les clients")
|
|
break;
|
|
|
|
//------------------------------------------------------
|
|
case shipheart_specifique_client_suncy:
|
|
//console.log("Client Suncy")
|
|
break;
|
|
|
|
}
|
|
|
|
//=========================================================================
|
|
// Recherche de l'impact de cette suppression sur les évènements :
|
|
req = 'SELECT Cle_primaire, Nom FROM TB_Events WHERE Type_source=' + shipheart_source_mesure_batterie + ' AND ID_Source=' + id_batterie + ' ';
|
|
req += ' ORDER BY Nom';
|
|
//console.log("Requête = [ " + req + "; ]")
|
|
nb = bdd.requete(req);
|
|
|
|
if (nb > 0)
|
|
{
|
|
if (nb === 1) message += "<br /><br />" + qsTr("Cette batterie est utilisée par l'évènement ci-dessous.<br />Vous devez modifier ou supprimer cet évènement pour qu'il ne dépende plus de cette batterie avant de pouvoir la supprimer.") + "<br /><br />";
|
|
else message += "<br /><br />" + qsTr("Cette batterie est utilisée par les %1 évènements ci-dessous.<br />Vous devez modifier ou supprimer ces évènements pour qu'ils ne dépendent plus de cette batterie avant de pouvoir la supprimer.").arg(nb) + "<br /><br />";
|
|
|
|
for (i = 0; i < nb; i ++)
|
|
{
|
|
res = bdd.lecture_ligne();
|
|
if (!res.isEmpty)
|
|
{
|
|
message += "‣ " + (i+1) + " : " + res[1] + "<br />";
|
|
}
|
|
}
|
|
}
|
|
|
|
//=========================================================================
|
|
// Recherche de l'impact de cette suppression sur les capteurs calculés :
|
|
/* Retour de la forme :
|
|
+-------------+
|
|
| Nom_capteur |
|
|
+-------------+
|
|
| Calculation |
|
|
| Calcul 2 |
|
|
+-------------+ */
|
|
req = 'SELECT Nom FROM TB_Capteurs ';
|
|
req += ' WHERE Type_entrees=' + shipheart_capteur_type_entrees_calculee_booleen + ' ';
|
|
req += ' AND Entrees LIKE "%/' + shipheart_source_mesure_batterie + ':' + id_batterie + '/%" ';
|
|
//console.log("Requête = [ " + req + "; ]")
|
|
nb = bdd.requete(req);
|
|
|
|
if (nb > 0)
|
|
{
|
|
if (nb === 1) message += "<br /><br />" + qsTr("Cette batterie est utilisée par le capteur calculé ci-dessous.<br />Vous devez modifier ou supprimer ce capteur calculé pour qu'il ne dépende plus de cette id_batterie avant de pouvoir la supprimer.") + "<br /><br />";
|
|
else message += "<br /><br />" + qsTr("Cette id_batterie est utilisée par les %1 capteurs calculés ci-dessous.<br />Vous devez modifier ou supprimer ces capteurs calculés pour qu'ils ne dépendent plus de cette id_batterie avant de pouvoir la supprimer.").arg(nb) + "<br /><br />";
|
|
|
|
for (i = 0; i < nb; i ++)
|
|
{
|
|
res = bdd.lecture_ligne();
|
|
if (!res.isEmpty)
|
|
{
|
|
message += "‣ " + (i+1) + " : " + res[0] + "<br />";
|
|
}
|
|
}
|
|
}
|
|
|
|
//=========================================================================
|
|
// Conclusion :
|
|
if (message === "") return(0); // Aucune réserve à supprimer le message....
|
|
else // Affichage de la boite de dialogue. La suppression n'est pas autorisée...
|
|
{
|
|
boite_information.niveau = 2;
|
|
boite_information.imageTitreSource = "/images/attention.png"
|
|
boite_information.message = message;
|
|
boite_information.boutonOkTexte = qsTr("Ok")
|
|
boite_information.boutonAnnuler = false;
|
|
boite_information.alignementMessage = Text.AlignLeft
|
|
boite_information.type = type_boite_information_supprimer;
|
|
boite_information.open();
|
|
|
|
return(-1);
|
|
}
|
|
}
|
|
|
|
//=============================================================================================================
|
|
// Suppression de la batterie
|
|
//=============================================================================================================
|
|
function suppression_batterie()
|
|
{
|
|
var req;
|
|
|
|
// Suppression de la batterie dans TB_Batteries :
|
|
req = 'DELETE FROM TB_Batteries WHERE Cle_primaire=' + id_batterie + ' ';
|
|
//console.log("Requête = " + req)
|
|
bdd.requete_unique(req);
|
|
|
|
// Demande de reconfiguration système via la BDD car on a modifié des valeurs de configuration :
|
|
synchro_bdd(shipheart_type_synchro_config);
|
|
|
|
}
|
|
|
|
|
|
//=============================================================================================================
|
|
// Forçage pleine charge
|
|
//=============================================================================================================
|
|
function forcer_pleine_charge()
|
|
{
|
|
var req;
|
|
|
|
// Suppression de la batterie dans TB_Batteries :
|
|
req = 'UPDATE TB_Batteries SET New_cde=' + shipheart_batteries_commande_forcage_pleine_charge + ' WHERE Cle_primaire=' + id_batterie + ' ';
|
|
//console.log("req = [ " + req + "; ]");
|
|
bdd.requete_unique(req);
|
|
}
|
|
|
|
//=============================================================================================================
|
|
// Reset du SOH
|
|
//=============================================================================================================
|
|
function reset_soh()
|
|
{
|
|
var req;
|
|
|
|
// Suppression de la batterie dans TB_Batteries :
|
|
req = 'UPDATE TB_Batteries SET New_cde=' + shipheart_batteries_commande_reset_soh + ' WHERE Cle_primaire=' + id_batterie + ' ';
|
|
//console.log("req = [ " + req + "; ]");
|
|
bdd.requete_unique(req);
|
|
|
|
// Mise à jour des variables globales pour prise en compte immédiatement :
|
|
champ_formulaire_Soh.text = 100;
|
|
}
|
|
|
|
//=============================================================================================================
|
|
// Reset des compteurs
|
|
//=============================================================================================================
|
|
function reset_compteurs()
|
|
{
|
|
var req;
|
|
|
|
// Suppression de la batterie dans TB_Batteries :
|
|
req = 'UPDATE TB_Batteries SET New_cde=' + shipheart_batteries_commande_reset_compteurs + ' WHERE Cle_primaire=' + id_batterie + ' ';
|
|
//console.log("req = [ " + req + "; ]");
|
|
bdd.requete_unique(req);
|
|
|
|
// Mise à jour des variables globales pour prise en compte immédiatement :
|
|
champ_formulaire_Nombre_cycles.text = 0;
|
|
champ_formulaire_Nombre_decharges_completes.text = 0;
|
|
}
|
|
|
|
|
|
//=============================================================================================================
|
|
// Recherche de l'index d'une certaine valeur dans un modele
|
|
//=============================================================================================================
|
|
function recherche_index_valeur_modele(cible, modele, nom_modele)
|
|
{
|
|
var i;
|
|
|
|
for (i=0; i<modele.count; i ++)
|
|
{
|
|
if (modele.get(i).valeur === cible) break; // Cas où la valeur cible a été trouvée parmi les valeurs du modèle
|
|
}
|
|
if (i === modele.count)
|
|
{
|
|
console.log("Aucune valeur trouvée pour cible = [" + cible + "] du modèle = " + nom_modele);
|
|
i = -1; // Cas où la valeur n'a pas été trouvée parmi les valeurs du modèle
|
|
}
|
|
//else console.log("Valeur trouvée : [" + i + "] pour cible = [" + cible + "] soit texte = [" + modele.get(i).texte + "]");
|
|
return(i);
|
|
}
|
|
|
|
}
|
|
|