Ordinateur de bord pour voiture de collection 7.1
Historique // historic

Historic since version 4.7.

Ce fichier contient la liste des modifications structurelles par versions des différents modules du programme.
… quand j'y pense !
Les modifs du code sont normalement dans l'entete de la fonction, classe, ou fichier concernée.
… quand j'y pense !

Attention
Please read the "attention" below when you make an update. This is the modifications of the files, you need to make in the parammeters files (param.py and others).

Version 7.1

Date
[month] 2021

Sensors : new path

Bescause the number of sensors expands, the sensors definition file (prog/Capteur.py) was parsed in several files :

  • /sensors/base.py for the mother class and method ListerEntrees()
  • /sensors/can.py for CAN BUS based sensors plugged on Acquisition board
  • /sensors/i2c.py for I2C base sensors plugged on RPI
  • /sensors/piGPIO.py for GPIO plug sensors on RPI
  • /sensors/uart.py for UART (RS232) based sensors plugged on RPI
  • /sensors/virtual.py for virtual sensor, without material (Timer)

New Module : logger.py

Allow to log value of selected ClVariable in a file.

  • add a button un "application" panel
  • frequency is setable (line 26 in the file logger.py)
  • create a file like "MES_20211026-221218.txt" to save data.
    see datalogger and logger.py for more details

New Module : GpsDist.py

When the vehicule haven't got wheels and get the speed frome GPS.
Disable km.py and enable GpsDist.py in ListeModules.py .

file param.py : new optionnals parameters

  • add standard tank of Citroen Ami 6 (Thanks to Gilles Roger Boyer)
  • add wheel size of Citroen Ami 6 (135x15) (Thanks to Gilles Roger Boyer)

clvariable.py : modifications

(in addition to new class ClVarThread)

  • add temporization on the True value for the Binary Value of clvariable : add optionnal param CmpDelay (default 0) to set the minimum time to reset to True. It's used for ignition fail, in first time.
  • modifie igniter.py to set minimum time for MOT_MISSINGSPARK

New ClVariable based class : ClVarThread

It's a thread + ClVariable, to avoid delay when the sensors is very slow (like I2C DS18B20 or GPS). Defined in clvariable.py .
Used in modules habitacle.py and GpsDist.py

Can_Modules.py : modifications

In AquisitionSTM32.__init__(), if the version of CAN board make an exception, the programm quit and write the adress of module.

module km.py : modification

  • new clvariable (clVarEngineTime) TPS_FUNCMOT to count the total running time (in hours) of the engine.
  • new class clVarEngineTime based on clvariable class to calculate this time only when the engine is running.
  • new button TPS_FUNCMOT on application to display the var.

module Inclinometre.py : modification

  • bug fix : wiche disable the sensor. The app crash.
    (OK … nobody use this sensor ;-) )

module Entretien.py : modification

  • add possiblity to add maintenance at number of engine running time

IHM : needle disable possiblity

Because nobody use the needles, but it's fun, I add the possibility to disable, or not. (I don't delete it)

Attention
In IHM_param.py you need add the parameter ENABLE_NEEDLE = False or True to disable / enable it.

modification of :

  • IHM.py, Fenetre.__init__() ~line 204 - 2012,
  • IHM.py, Fenetre.RefreshIHM(),
  • Appli.py : button not created if ENABLE_NEEDLE = False.
Note
The needle are loaded on start, but there are not display and refresh. I move the buttons needle, Allure, Véhicule (Appli.py) by 100 pix to the left, and I add a blanck button at 300 pix. If you need the module Epreuve_Speciale.py, you need place the button in this place and disable it.

Other

Attention
Destruction of class ChampAff. This class ChampAff was used in old application and replace by new button BtnVnt since version 6.0 with Special Module. The 2 last fields using ChampAff was in Apply.py for TPS_RUN and PeriodeScan, and I change it for BtnVnt (please see in Apply.py)

Version 7.0

Note
Some modifications are noted 6.3
Date
septembre 2021

news fonctionnalities : Documentation written on doxygen.

Documentation written with DOXYGEN

Attention
doxygen do not support python import like "from XXX import YYY" so I have change
  • "from XXX import YYY" to "import XXX.YYY as YYY"
  • "from XXX import *" to "import XXX" and use XXX.propertie in code. it's possible it need some change in your personal modules.
Note
This historic file is now written for doxygen.

Alarm timer at start

The alarm don't change the diplayed frame after some second at start. The time is adjustable with the ALARM_DISABLE_ATSTART

Attention
You must add the constant ALARM_DISABLE_ATSTART in your param.py .
  • new class based on clvar : Horloge in Apply.py. Just format() is different like ClVariable).
  • in capteurs.py : Timer.read() return only second from start, not [hh, mm, ss]
  • in Apply.py the clvar "TPS_RUN" is now based on class Horloge and value is second only, and the format() function return the string "hh:mm:ss".

Alarm automatic return at default frame

Automatic return to default screen when alarm occure after time defined in : ALARM_RETURN_TIME in param.py

Attention
You must add this parameter in your param.py file. please copy/past the the lines if you don't want erase your param.py

Display refresh time

Class Application -> Constant MASQUEAFFICHAGE in main.py

Acquisition board with new program : 4.0

  • File CAN_Modules.py updated
    • new function GetIgniter()
    • update SetFreqInibTime (see in the file)
  • File Capteur.py : New Sensor : Igniter based Capteur.
  • Attention
    add DegresOffset and TimeCTP0 in param.py It use counter 0 and 1 and require aquisition board with program 4.0 or highter.
    : I change the default wheel speed chanel from counter 1 to counter 2, and fuelmeter from 2 to 3.

Version 6.2

Date
17 octobre 2020
News Sensors in Capteur.py
  • add new "output sensor" : GPIOOUT to set GPIO OUT pin.
  • change "APC" for "GPIOIN" possility to change the pull up/dwn resistor with SetPullUpDwn(True/False)
New Modules : Oil_PressTemp.py
This new module contain follow sensors :
  • oil pressure sensore
  • oil temperature sensore Because add 2 new standard sensors, I remove the NTC EPCOS definition frome param.py and add a new module (sensorsdef.py) to contain all standards sensors. This file contain today :
  • NTC4003_SEGMENTS
  • VDO_0_10bars_segments
  • VDO_NTC (for standadised oil NTC) I moved Ext. Temp Sensor from Vehicule.py frame to Habitacle.py (= Car --> Passenger Compartment) and all his parts (sensors, clvariable and display)
New Modules : OpenAuto.py
  • To set day / night mode via a GPIO
  • To set rear camera via a GPIO
Added Keyboard input
The window now can read keyboard hits. The action is defined in ACTIONKEYS list in IHMparam.py
  • IHM.py modified : added __keypressed(event)
  • IHMparam.py : added ACTIONKEYS It's possible to different have an action for each Frame for a same key.
Added increment and decrement frame to navigate in the screens.
  • IHM.py : added "ChangeFrame"
    Note : Now the Frame Notebook are sorted by the name of the linked button. This button must be named Frame00, Frame01, Frame02, … in the application modules. Now, this name is used to set of the index of the frame (00,01,02,…) If a frame have no button, it will pace at the end. In this way, the keyboard navigation will be same that button position. Note: the position (X,Y) of the button is not check. Please check the good order to have good navigation.
new function : PrintListeActions
In main.py, added PrintListeActions() to … print ListeActions
ActionBouton
Added function to call the action of named button :
  • IHM.py : added ActionBouton(name of the button) So, it's possible to attributate a key to a button (see IHM_param.py)
new fonctionnality : BtnVnt Alarm now change the frame.
The class BtnVnt change the frame in screen if alarm is on, depending :
  • __ClVarVnt.CValue()
  • __ClVarButton.BValue()
  • IHM_widgets.py : ReLoadState() modified
  • param.py : added BOUTON_CHANGER_ONGLETS (default True, change to False if you won't change)
    Attention
    You must add this parameter in your param.py file. please copy/past the line from recent source
    new function in ClVariable.py ClVariable
    added Addition(ValToAdd) to remove complex operation in other function (ClVarAddition for example) … and avoid ClVariable.Value += xx added set(newVal) to remove complex operation in other function (ClVarSetValue and ResetFuelConso for example) … and avoid ClVariable.Value = xx added __callFunc() : now all parameter Funcxx can be : name of a function in ListAction (a string) directe function without parenthesis
    Limit value for a ClVariable before Alarm
    The limit value is used to change the display (BtnVnt become red). Before, there was only a single limit value min OR max. Now, it's a Min AND max.
    Replaced limit comparison value in ClVariable by a better system :
  • delete Cmp and CmpSeuil,
  • add :
    • CmpBin for binary ClVariable, can be None or True or False for comparison values,
    • SeuilMax for max limite (for example VBAT to 15V),
    • SeuilMin for min limite (for example VBAT to 12V).
    So, it's possible to define a MIN and a MAX. impacted files are :
  • clvariable.py :
    • clvariable.__init__() --> change declaration !!
    • clvariable.BValue()
    • asserv.__init__()
  • Entretien.py : VarEntretien.__init__()
  • all clvariables in all module module
bug correction :
Deleted function :
  • ModeTest Clavariable (not used), with effect on :
  • Frames suppressed : in past, there the notebook contain "screen" Frame, and to add separation (decorating), I created "ListeFrames". It can be confusing, so I prefer remove it. The black panel need not graphical separation. suppressed in :
  • minimum value around 0 for Capteurs.py IANA
    • Vehicule.py, need to remove "Minimum = 0.281," in VBAT Sensor

Version 6.1

Date
17 mai 2020
bug correction
capteurs.py : correction du bug "NoneType * Float" dans tous les classes analogiques (bug à l'implémentation de la compensation)

Version 6.0

Date
30 avril 2020
Note
beaucoup de changement dans le code sont fait pendant le confinement du à la pandémie COV-19. Merci au confinement :-)
envoie de mail :
--> historic.py
  • implementation de l'envoie de l'email avec l'historic.txt et autopref.txt en piece jointe, compressé dans un fichier zip.
  • appli.py --> ajout d'un bouton pour envoyer une archive à la main.
Ajout d'un nouveau module :
--> Epreuve_Speciale.py : permet d'effectuer une "epreuve spéciale" en affichant la vitesse idéale, le temps restant, les km restant, etc. pour chaque "segment" de l'epreuve. --> clvariable.py : ajout fonction Soustraction() en dessous de Addition()
importation des modules :
Avant, tout était géré dans main.py. maintenant, main.py fait appel à un fichier ListeModules.py qui contient un tableau des modules à importer. Ceci permet de ne pas editer le fichier main.py pour activer/desactiver un module. --> main.py : modification des import en haut du fichier, et modification des ligne dans le main qui gèrent l'import et l'init des modules. --> ListeModules.py : création note : ceci ne prend pas encore en compte les alarmes. Si une alarme fait appel à une variable qui se trouve dans un module desactivé, alors ça plante au lancement. note 2 : si une pref est relative à une variable dans un module desactivé, alors elle se retrouve "orpheline" mais ne gène pas le fonctionnement, et ne sera pas perdue.
Starter : si on désactivait le starter, le programme plantait au lancement. Ceci venait de 2
lignes très anciennes dans la boucle run() de la classe application de main.py qui faisaient directement appel au module starter.py --> suppression des 2 lignes qui concernaient le starter auto au démarrage. La fonction est reportée dans starter.py --> starter.py : ajout d'un ClVariable "StartStarter" qui ne s'execute qu'une fois au démarrage pour gérer le lancement ou non du starter au démarrage. Idéalement, ce devrait être elle qui gère la pref du lancement (future evolution ?)
InclinometreLIS3DH:
--> Inclinometre.py : moyennage des valeurs lues
nouveau capteur disponible : LM35 (mesure de t° très précis)
--> Capteurs.py : ajout d'une classe LM35 (voir fichier pour le code, voir vehicule.py pour utilisation). Attention : Necessite de supprimer le pont de résistance sur la carte (à utiliser avec parcimonie donc)
Compensation "statique" des voies analogiques :
Il est désormais possible d'appliquer un facteur de correction, dans le but de corriger les imprecisions de tolérance des composants et de l'alim de la carte acquisition. --> Capteurs.py : toutes les classe analogiques sont concernées, soit : IANA, LM35, Segments et PontDiv. Pour utiliser cette fonction, il faut ajouter "COMP = x.xxx" dans la déclaration du capteur. --> Dans le but de simplifier les futures mises à jour, je préfère enregistrer une constante dans le fichier param.txt ce qui introduit la construction suivante : ANACOMPENS_0x = x.xxx et dans la déclaration du capteur : COMP=param.ANACOMPENS_0x
Changement de methode pour la compensation dynamique de la classe Segments (voies analogiques)
Pour être cohérent avec la correction statique, la correction dynamique est désormais implémentée dans le capteur. --> clvariable.py : suppression de la compensation dynamique. --> Capteurs.py : ajout du parametre "CapteurCompDynamique" à la déclaration Et en plus, c'est plus propre au niveau code !
gestion de la luminosité :
Les luminosités jour et nuit sont désormais des valeurs enregistrées individuellement --> IHM.py : class Fenetre :
  • suppression de la fonction Luminosite()
  • ajout fonction Luminosite_Switch() et Luminosite_Set() --> Appli.py = modification des boutons LuminPlus et LuminMoins pour adaptations à ce nouveau protocole
apparence des champs :
création du champ large (initialement pour les épreuves spéciales) --> IHM_widget.py :
  • widgets BtnVnt : création de LabelTailleText pour appliquer une taille différente au text hors du champ (le nom du champ) --> /parts/ *.py : changement des champs par des boutons "cdn_150b", c'est plus joli, sauf pour l'onglet application (les infos de temps d'execution et temps de boucle ne sont pas jugées essentielles à la beauté de l'appli)
Fonction appelées par les boutons :
possibilité de mettre Func = Fonction au lieu de Func = "Fonction"
  • si Fonction dans le même module/fichier
  • rappel : utilisation de str Func = "Fonction", fonction doit être listé dans ListeActions[] --> IHM_widget.py
correction de bug :
--> entretien.py : La Frame du module entretient s'appelait Frame4 comme le module Habitacle. Je l'ai renommé Frame5 ;-)
création de l'utilitaire de compensation "compensation.py"
Permet de déterminer le coefficient de compensation à applique sur les voie analogiques
création de l'utilitaire de mise à jour "UpDate.py"
permet de comparer les dossiers source et cible, et de choisir les fichiers à copier ou non. Limitation : ne supprime pas de dossier (mais les fichiers dedans oui). le dossier racine doit contenir le fichier "main.py"

Version 5.4

Date
11 janvier 2020
Modifications
correction bug du can.Notifier qui ne quittait pas correctement PID : ajout possiblité de ne pas quitter lorsqu'on atteint erreurmax Regulateur.py historic.txt : passage des parametre de l'email dans les préférences possibilité d'avoir une pref au format texte resolution bug ne quitte pas
  • le bouton quitter appelait DemandeQuitter() qui fait une requète
  • sortie de quitter() de la classe Application (est maintenant placée dans main.py)
  • break dans boucle principale
  • fenetre fermée avec .destroy() au lieu de .quit()
  • gestion d'un self._stopevent pour chaque thread quand possible (sauf can notifier) ... changement gestion horloge
  • destruction horloge.py
  • suppression dans IHM.py
  • ajout d'une clvar + bouton avec gestion de l'horloge

Version 5.3

Date
03 aout 2019
Modifications
possibilité de changer la taille du texte dans les boutons (pour le module entretien) ajout d'une fonction GetPreference dans le fichier historique pour ne pas quitter en erreur si pref non trouvé (première execution sans fichier AutoPref.txt par exemple) gestion des erreurs bus CAN :
  • ajout d'un test du bus can à l'init CANBusClass (ce qui permet de savoir si le pb vient du pi ou de la carte en face, en gros)
  • changement de code dans la le comptage des erreurs BUS CAN : si on a une bonne lecture/ecriture alors on reset le compteur d'erreurs
  • l'absence de réponse d'un module CAN renvoyait une valeur par défaut. Maintenant, elle renvoie None.
  • ceci entraine une modification du code des capteurs
  • au démarrage, test chaque carte acquisition en passant par la class Module, et gestion des erreurs correcte sortie, etc. (et plus juste planté…)
  • support de la phase renvoyée par la carte acquisition (mais pas encore exploitée)
  • dans appli.py --> ajout du test de temps param.POWEROFF_TIME déplacement de la conf des variables à sauvegarder dans les preférence (historic.py) dans les fichiers /part/ pour pouvoir mieux isoler un module dans alarme.py, vérification de l'existence des variables lors de la création d'une alarme ( difficile de déplacer la création dans /part/ à cause de la hierarchie des alarmes) ajout du module /prog/I2C_Modules.py et /parts/Inclinometre.py

Version 5.2

Date
27 janvier 2019
gros changement structurels :
mise en place des dossiers /prog/ et /parts/ le dossier prog/ contient les modules de code le dossier parts/ contient les modules de sous ensembles fonctionnels (starter, consommation,...) Donc maintenant, les objets sont regroupes par sous ensemble fonctionnels, : Les capteurs, les ClVar et les objets graphiques d'une mme sous ensemble sont dans le mme fichier. Si on veut dŽsactiver le PID (par exemple) il suffit de ne pas le charger. ce qui entraine :
  • fichier Capteur_Liste.py : suppression du fichier complet
  • fichier clvariable.py : suppression de la liste de clvar a la fin
  • fichier IHM_param.py : suppression des listes de widgets --> ça entraine aussi un changement des raccourcis sous Raspbian pour prendre en compte les dossiers, il faut spécifier le chemin d'execution. ajout module ventilateur ; mise en commun de la classe de base dans ClVariable ; déplacement des redŽfinitions des classe dans les /parts/ pour Starter et Regulateur crŽation d'un capteur PWMOut sur lequel est maintenant basŽ ServoMoteur (modif de ClVariables.py ; Starter.py ; Regulateur.Py ; Capteurs.py création de Habical.py) selection des Frame par leur nom et plus par leur numero (modif IHM.py ; /parts/appli.py ; /parts/Habitacle.py ; IHM_param.py) ajout changement de Frame lors d'une alarme pour afficher automatiquement la Frame concernée (définie dans l'alarme) (modif IHM.py ; alarmes.py) gestion du taux d'erreur sur bus CAN : si 10 erreurs de lecture ou ecriture sur le bus CAN, alors on quitte l'appli (modif CAN_Modules.py ; main.py) passage de certaines constantes en majuscule pour etre plus respectueux de la bonne facon de faire en python (la suite viendra) & deplacement des constantes liees au Starter ou PIDRegulateur dans leur module respectif possibilité de passer une ClVariable qu'une fois au démarrage avec FMASQUE = FMASQUEONETIME ajout module entretien

Version 5.1

Date
06/01/2019
Note
Normalement ces modifs devaient être intégrées dans la 5.0 mais j'ai diffusé la 5.0 donc je crée une 5.1.

L'apparence ne change pas ajout de la notion de service. des sous sytèmes peuvent partager des fonctions pour qu'elles soient accessibles à d'autre partage dans une propriete "ListeActions" partage via une methode "Get_ListeActions()"

suppression des thread des asservissements : comme il est possible de personaliser la frequence pour chaque variable (avec , les thread d'asservissement ne sont plus utils.

  • suppression de la classe threadAsserv() d'asservissement
  • changement mineur dans les classes Asserv() et ses filles pour gerer le changement
  • reglage du FMasque et FNumber pour que les asservissements soient exécutés après les lecture des variables d'entrées

autres

  • nouveaux fonctionnement des mŽthodes appelŽes par les boutons : Maintenant, la propriété __Func des bouton est une chaine qui doit exister dans main.py -> ListeActions . ListeAction est un dictionnaire qui contient des clŽs : "string" : mŽthode. Les méthodes existent par ailleurs. Si __FuncParam = None, alors aucun parametre n'est passé, sinon __FuncParam est le parametre.
  • suppression de la clvariable BTN_ACT (action des boutons sur le programme)
    • reprise de clVariable.py (dŽclaration des actions)

Envoi de mail avant l'extinction avec des infos de roulage dedans

archivage du fichier historic a la première utilisation de l'annee

Version 5.0

Date
sept 2018

Globalement, l'apparence ne change pas, mais le programme est revu en profondeur.

  • modification du fonctionnement de l'action des BtnVnt et LabelDef:
  • modification des prŽfŽrences : La ligne de pref est toujours lue et écrite par le module pref, mais maintenant la chaine de pref est interprétée par la ClVariable, ce qui permet d'avoir des prefs autres que des nombres.

réglages : l'allumage des feux change la luminositŽ de l'Žcran

Version 4.6

Date
?/2018

Changement de l'ordre de chargement des modules changement de structure des sous-ensembles, simplification du chargement pour limiter es effets de bords et rendre plus compréhensible le code.

Long time ago…

… Les modifs n'ont pas étées tracèes auparavant …