Auteur Sujet: Perte des fonctions  (Lu 37299 fois)

Tony04

  • Hero Member
  • *****
  • Messages: 569
    • Voir le profil
Perte des fonctions
« le: octobre 28, 2018, 12:03:22 pm »
Bonjour à tous,

dans la lignée de ma question sur le sifflement des locos (http://forum.locoduino.org/index.php?topic=623.0), je me heurte à un autre soucis de fonctions.

Au club où j'ai fait tester une centrale fonctionnant sous DCCpp avec un MEGA, on me dit que toutes les fonctions se perdent lorsque survient une micro-coupure suite à un mauvais contact sur la voie, je précise bien coupure et non court-circuit qui coupe le DCC.

Avez-vous ce même type de comportement avec cette configuration ?

Bon dimanche à tous et merci pour vos futures réponses.

Cordialement
Antoine

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Perte des fonctions
« Réponse #1 le: octobre 28, 2018, 03:07:45 pm »
Bonjour,
cela dépend en fait du couple décodeur / centrale. Sauf erreur, DCCpp n'envoie les fonctions qu'une fois.
Les décodeurs ne conservent pas la position des fonctions (constaté sur les LENZ), par exemple l'éclairage s'éteint sur une coupure du DCC.
Bien sur les CV, eux, sont conservés.
Donc seules les centrales réémettant les fonctions ne présentent pas cette anomalie.
Cordialement

Tony04

  • Hero Member
  • *****
  • Messages: 569
    • Voir le profil
Re : Perte des fonctions
« Réponse #2 le: octobre 28, 2018, 03:12:50 pm »
Merci Michel, cela confirme les dires des membres du club qui me dident que sur une centrale Lenz la loco ne perd pas les fonctions.

C'est quand même un soucis assez ennuyeux surtout lorsque tu as plusieurs locos sur le réseau.
Penses-tu qu'il y ai une solutions en dehors de renvoyer toutes les xx secondes toutes les fonctions en route ?

CATPLUS

  • Sr. Member
  • ****
  • Messages: 435
    • Voir le profil
Re : Perte des fonctions
« Réponse #3 le: octobre 28, 2018, 03:33:57 pm »
Bonjour Tony

Au risque de me répéter et de rendre impopulaire, les coupures ou micros coupures sont à bannir (voir le câblage).

http://forum.locoduino.org/index.php?topic=356.0
http://teamtrack.soforums.com/t1490-Module-N.htm?start=45


Marcel


Best Regards

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Perte des fonctions
« Réponse #4 le: octobre 28, 2018, 05:56:47 pm »
@ Marcel, il est toujours bon de rappeler les fondamentaux, mais comme on sait la perfection n'est pas de ce monde ...
@ Tony, lançons une bouteille à la mer à destination de ceux qui se sentent de taille à intervenir dans le code de DCCpp pour y ajouter cette option. Option qui a peut-être ses contreparties, car sinon, j'imagine que Gregg y avait pensé.
Cordialement

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3038
  • 100% Arduino et N
    • Voir le profil
Re : Perte des fonctions
« Réponse #5 le: octobre 28, 2018, 10:39:57 pm »
Bonjour à tous,

Il suffit d'ajouter l'envoi périodique des fonctions dans la loop(), ou au moins de les répéter après une coupure longue (supérieure à la durée de réaction des détecteurs de conso)

Cordialement,
Dominique

Tony04

  • Hero Member
  • *****
  • Messages: 569
    • Voir le profil
Re : Perte des fonctions
« Réponse #6 le: octobre 28, 2018, 11:14:48 pm »
Bonsoir (jour) Dominique,

c'est exactement ce que j'ai fait, mais si DCCpp pouvait garder en mémoire comme la vitesse par exemple, ce serait plus PRO, non ?

Bon début de semaine à tous.
Antoine

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3038
  • 100% Arduino et N
    • Voir le profil
Re : Perte des fonctions
« Réponse #7 le: octobre 28, 2018, 11:20:29 pm »
Ce n'est pas facile de demander cela à DCC++ !

Pourquoi ?
Parce que les commandes de vitesses sont inscrites dans des registres qui sont relus périodiquement et indéfiniment; il y en a 12, un par machine.
mais les commandes des fonctions sont inscrites dans un seul registre, pour toutes les machines donc elles ne peuvent pas être répétées.

S'il fallait répéter les commandes il faudrait aussi 12 registres et les multiplier par le nombre de commandes à répéter : c'est une énorme modification et le résultat ne tiendrait plus dans un Uno. Il y aurait peut-être même un risque sur les performances.

Donc forget it et gère les répétitions comme tu le fais déjà.
Cordialement,
Dominique

Tony04

  • Hero Member
  • *****
  • Messages: 569
    • Voir le profil
Re : Perte des fonctions
« Réponse #8 le: octobre 29, 2018, 09:10:48 am »
Bonjour Dominique,

réponse claire et sans appel comme toujours, merci à toi et bon courage pour Orléans où je ne pourrai pas me rendre car je suis en cure à Digne les Bains.

Amicalement
Antoine

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : Perte des fonctions
« Réponse #9 le: octobre 29, 2018, 10:19:07 am »
La non répétition des fonctions fait partie de la norme DCC, la conservation de cette info est à la charge des décodeurs pour des micro-coupures. Malheureusement, si la machine n'est pas équipée avec des condensateurs, dès que l'on 'plante un choux' l'info est perdue.

La solution de renvoyer périodiquement les fonctions est possible, le problème est d'identifier le bon moment...

L'autre solution me parait pourtant acceptable. Utiliser deux registres par machine, avec un registre pour la vitesse et l'autre pour les fonctions, ça marche. Par contre il faut supporter de n'avoir que six machines à piloter.  C'est la stratégie que j'ai employée dans DcDccNanoController, sachant que c'est fait pour un Nano et donc pour une toute petite centrale.

Tony04

  • Hero Member
  • *****
  • Messages: 569
    • Voir le profil
Re : Perte des fonctions
« Réponse #10 le: octobre 29, 2018, 03:29:03 pm »
Bonjour Thierry,

Citer
L'autre solution me parait pourtant acceptable. Utiliser deux registres par machine, avec un registre pour la vitesse et l'autre pour les fonctions, ça marche. Par contre il faut supporter de n'avoir que six machines à piloter.  C'est la stratégie que j'ai employée dans DcDccNanoController, sachant que c'est fait pour un Nano et donc pour une toute petite centrale.

Je me suis retourné vers la solution de renvoyer périodiquement les fonctions de la façon suivante: Suite à un court-circuit, en appuyant le bouton de remise en route du DCC je renvoie toutes les fonctions qui étaient à ON, puis par la suite je refais la même opération toutes les 5 secondes, cela semble convenir aux gars du club. Qu'en penses-tu ?

Par contre ta réponse me fait poser une autre question dont je n'ai pas trouvé la réponse dans la doc html: Combien de machines peut-on gérer en même temps avec DCCpp ?

Antoine

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : Perte des fonctions
« Réponse #11 le: octobre 29, 2018, 03:35:44 pm »
Pourquoi pas toutes les cinq secondes, mais il faut le faire pour toutes les machines qui sont pilotées en vitesse par ailleurs.
Le nombre de machines pilotables est limité par le nombre de registres de répétition de commande DCC utilisés par DCC++. La version de Greeg déclare 12 registres par défaut, un pour les ordres temporaires comme les fonctions, l'interrogation de CVs ou la commande d'accessoires, 11 pour les ordres répétitifs comme la vitesse d'une machine. C'est un moyen terme entre un Nano limité par sa mémoire et un Mega moins limité. Dans DcDccNanoController, j'ai limité à beaucoup moins puisque le but n'est que de piloter une machine. Et puis moins de canaux, c'est moins de mémoire utilisée !

Tony04

  • Hero Member
  • *****
  • Messages: 569
    • Voir le profil
Re : Perte des fonctions
« Réponse #12 le: octobre 29, 2018, 03:53:57 pm »
Citer
Pourquoi pas toutes les cinq secondes, mais il faut le faire pour toutes les machines qui sont pilotées en vitesse par ailleurs.

Oui, c'est comme cela que je fait avec un tableau qui garde en RAM les 5 variables par loco.

Donc je dispose de 11 machines simultanées si j'ai bien compris.


Tony04

  • Hero Member
  • *****
  • Messages: 569
    • Voir le profil
Re : Re : Perte des fonctions
« Réponse #13 le: octobre 30, 2018, 11:18:18 pm »
Bonjour à tous,

j'aimerais bien suivre ton conseil ci-dessous Thierry,
La solution de renvoyer périodiquement les fonctions est possible, le problème est d'identifier le bon moment...
mais j'ai fait des essai avec des mises à jour par la commande TextCommand::parse() qui doit faire perdre beaucoup de temps au MEGA car si j'utilise plusieurs locos avec chacune plusieurs fonctions activées il arrive qu'une loco s'arrête et ne reprend qu'avec une nouvelle commande de vitesse.

J'aimerais beaucoup essayer la même technique que pour l'écriture et lecture des CVs que tu m'as appris ici: http://forum.locoduino.org/index.php?topic=617.msg7017#msg7017 et qui fonctionne à merveille, mais avec la commande DCCpp::setFunctionsMain() (si c'est bien la bonne) et qui à mon avis serait plus appropriée, mais je n'arrive pas à en trouver la syntaxe, je bloque sur le dernier argument "FunctionsState & inStates" que je ne comprend pas malgré mes recherches dans l'aide DCCpp.

Pourrais-tu me donner cette syntaxe pour par exemple allumer la lumière d'une loco avec adresse 12 ?  Ou m'orienter vers une autre solution selon le cas.

Merci par avance

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3038
  • 100% Arduino et N
    • Voir le profil
Re : Perte des fonctions
« Réponse #14 le: octobre 31, 2018, 09:48:19 am »
Bonjour Antoine,

Tu trouveras un exemple dans mon programme de va et vient :
http://www.locoduino.org/spip.php?article232

Dans la fonction Train::feux()

C’est aussi documenté dans la bibliothèque et les exemples.

Amicalement
Dominique
« Modifié: octobre 31, 2018, 09:50:02 am par Dominique »
Cordialement,
Dominique