//========================================================================================================================================================================
// 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 type de batterie(s) va nécessiter la remise en configuration usine de certains paramètres.
Si vous ne souhaitez pas que cette reconfiguration soit effectuée, notamment si vous avez effectué des réglages spécifiques, cliquez sur ANNULER.
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 tension nominale du parc de batteries va nécessiter la remise en configuration usine de certains paramètres.
Si vous ne souhaitez pas que cette reconfiguration soit effectuée, notamment si vous avez effectué des réglages spécifiques, cliquez sur ANNULER.
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 += "
" + qsTr("Cette batterie est utilisée par l'évènement ci-dessous.
Vous devez modifier ou supprimer cet évènement pour qu'il ne dépende plus de cette batterie avant de pouvoir la supprimer.") + "
";
else message += "
" + qsTr("Cette batterie est utilisée par les %1 évènements ci-dessous.
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) + "
";
for (i = 0; i < nb; i ++)
{
res = bdd.lecture_ligne();
if (!res.isEmpty)
{
message += "‣ " + (i+1) + " : " + res[1] + "
";
}
}
}
//=========================================================================
// 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 += "
" + qsTr("Cette batterie est utilisée par le capteur calculé ci-dessous.
Vous devez modifier ou supprimer ce capteur calculé pour qu'il ne dépende plus de cette id_batterie avant de pouvoir la supprimer.") + "
";
else message += "
" + qsTr("Cette id_batterie est utilisée par les %1 capteurs calculés ci-dessous.
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) + "
";
for (i = 0; i < nb; i ++)
{
res = bdd.lecture_ligne();
if (!res.isEmpty)
{
message += "‣ " + (i+1) + " : " + res[0] + "
";
}
}
}
//=========================================================================
// 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