Auteur Sujet: e-stop emergency stop avec DCC++  (Lu 1741 fois)

msport

  • Hero Member
  • *****
  • Messages: 658
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
e-stop emergency stop avec DCC++
« le: mars 15, 2018, 10:13:20 pm »
Bonsoir à tous,

j'aimerais compléter mes manettes avec un e-stop (emergency stop).
C'est prévu pour une locomotive avec DCC++ : il suffit d'envoyer -1 comme vitesse et la locomotive s'arrête immédiatement, sans inertie. (c'est documenté)
Ce que j'aimerais, c'est de pouvoir arrêter toutes les locomotives. Auriez vous vu quelque chose prévu avec DCC++ ?
Dans la norme MOROP, NEM671, il est prévu en 4.2 un arrêt d'urgence général par reset des données non volatiles des décodeurs.
J'ai tenté d'écrire -1 dans le CV 1 d'une locomotive d'adresse 0 (qui semble prévue pour une diffusion générale -broadcast-) mais ça n'a rien donné.
<t 1 0 -1 1> par exemple. Aucune manette en parallèle.

Si cela existe et si quelqu'un a la syntaxe via DCC++, merci d'avance.
Peut-être avec la bibliothèque de DCCpp de Thierry ? Emergency envoie-t-il un broadcast ?

http://www.morop.org/index.php/fr/nem-normes.html / http://www.morop.org/downloads/nem/fr/nem671_f.pdf
autre info : https://dccwiki.com/Term:E-Stop
« Modifié: mars 15, 2018, 10:23:55 pm par msport »
Cordialement

bobyAndCo

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 362
  • HO avec DCC++
    • Voir le profil
Re : e-stop emergency stop avec DCC++
« Réponse #1 le: mars 15, 2018, 10:38:06 pm »
Dans mon cas, mais je ne sais pas s'il est reproductible pour toi, toutes mes locos (13) sont enregistrées dans un objet tableau dans mon gestionnaire. Je fais tout simplement une boucle de la taille du tableau et j'envoie autant de commandes que de locos <t ID @ -1 1>.

$scope.setUpLocos = function () {
// On met toutes les locos à l'arrêt
for(var i = 0; i < $scope.locomotives.length; i++) {
$scope.locomotives[i].vitesse = -1;
$scope.locomotives[i].sens = 1;
var data = "t ";
data += $scope.locomotives[i].id;
data += " ";
data += $scope.locomotives[i].address;
data += " ";
data += $scope.locomotives[i].vitesse;
data += " ";
data += $scope.locomotives[i].sens;
data = "<" + data + ">";
$scope.sendReq(data);
$scope.locomotives[i].vitesse = 0;
}
}

Bien amicalement

Christophe

nopxor

  • Jr. Member
  • **
  • Messages: 80
    • Voir le profil
Re : e-stop emergency stop avec DCC++
« Réponse #2 le: mars 16, 2018, 05:59:58 am »
Bonjour,

Pour un arrêt d'urgence, pourquoi ne pas utiliser la commande <0>, coupure générale de l'alimentation DCC ?

bobyAndCo

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 362
  • HO avec DCC++
    • Voir le profil
Re : e-stop emergency stop avec DCC++
« Réponse #3 le: mars 16, 2018, 07:26:43 am »
Il y a au moins une raison, le locos équipées de PowerPacks ne vont pas s'arrêter immédiatement ce qui est pourtant le but recherché.

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1709
  • 100% Arduino et N
    • Voir le profil
Re : e-stop emergency stop avec DCC++
« Réponse #4 le: mars 16, 2018, 08:52:02 am »
Pour quelle raison il serait nécessaire de faire un arrêt d’urgence général en moins de temps que l’envoi de la commande de vitesse -1 a toutes les locos comme le fait Christophe ?


Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1438
    • Voir le profil
Re : e-stop emergency stop avec DCC++
« Réponse #5 le: mars 16, 2018, 09:01:07 am »
Je lis dans la norme que l’adresse 0 est l’adresse de diffusion : https://dccwiki.com/Address_Range#Address_Zero

Il est même dit explicitement:

Citer
An example at the DCC system level is E-STOP command which will halt all trains immediately without disconnection of track power.

Ben alors, on lit pas la norme les DCCistes  ;D

Ah oui, msport, la norme dit également qu’on ne doit pas assigner l’adresse 0 a un décodeur vu qu’elle est réservée pour la diffusion.
« Modifié: mars 16, 2018, 09:03:27 am par Jean-Luc »
Cordialement

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 500
    • Voir le profil
Re : e-stop emergency stop avec DCC++
« Réponse #6 le: mars 16, 2018, 09:23:37 am »
Du côté de DCCpp, rien de plus que DCC++. Par contre dans ma biblio DcDccNanoController, l'arrêt d'urgence coupe physiquement le jus sur toutes les voies. Et effectivement ça ne solutionne pas le problème des locos équipées de condensateurs. De plus, je pense que je pourrais au moins tenter de coller à la norme en envoyant un ordre de vitesse à -1, ce qui n'est pas le cas aujourd'hui...

msport

  • Hero Member
  • *****
  • Messages: 658
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Re : e-stop emergency stop avec DCC++
« Réponse #7 le: mars 16, 2018, 10:07:22 am »

Ben alors, on lit pas la norme les DCCistes  ;D

Ah oui, msport, la norme dit également qu’on ne doit pas assigner l’adresse 0 a un décodeur vu qu’elle est réservée pour la diffusion.

Mais si, mais si, je sais lire, j'ai le socle commun  :)

Dans mon message, j'ai bien relevé que l'adresse 0 était une adresse de diffusion générale  = broadcast.

Mais je demandais si il existait une syntaxe DCC++ pour l'exploiter, autrement dit comment faire comprendre -1 au CV1 de toutes les locomotives en une fois. Peut être cette compréhension est dépendante de chaque décodeur ?

Effectivement la solution béton est de l'envoyer via un tableau de locomotives.

Apparemment, la séquence de bits est décrite dans la norme en 4.2 du MOROP, resterait à l'implémenter en complément à DCC++ si ce n'est fait.
Paquet de données DCC de base pour la remise à zéro générale des décodeurs
Format des données DCC de base:
1111111111111111 0 00000000 0 00000000 0 00000000 1
Synchronisation Octet de
données 1
Octet de
données 2
Octet de
données 3
(octet de
contrôle)
Le paquet de données DCC pour la remise à zéro générale des décodeurs est constitué de trois
octets dont tous les bits sont à zéro. Lorsqu’un décodeur reçoit ce paquet de données, il doit
effacer toutes ses mémoires non permanentes (y compris les données de vitesse et de sens de
marche) et revenir à son état normal de mise sous-tension. Si la motrice est en mouvement, le
décodeur doit lui appliquer un arrêt d’urgence.
Dans les 20 millisecondes qui suivent un paquet de remise à zéro générale, une station de
commande ne doit pas envoyer un paquet de données avec une adresse comprise entre
01100100 (adresse 100) et 01111111 (adresse 127) bornes incluses, sauf si elle souhaite passer
en mode « Service ». 5)
http://www.morop.org/downloads/nem/fr/nem671_f.pdf
Cordialement

msport

  • Hero Member
  • *****
  • Messages: 658
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : e-stop emergency stop avec DCC++
« Réponse #8 le: mars 18, 2018, 11:41:19 pm »
Bonsoir,
dans l’impressionnant article initial de Dominique sur DCC++ ( http://www.locoduino.org/spip.php?article182 ) je lis :

" A cela s’ajoute quelques utilitaires comme :
"M" pour envoyer un paquet DCC de 2 à 5 octets sur la voie principale (commande DCC) "


Avant que je ne me noie dans les entrailles de DCC++, est-ce que du premier coup d'oeil, l'un d'entre vous, peut-être Dominique lui-même, pourrait, si c'est jouable, me donner la commande style <M 65535 0 0 0 0 0 0 1> qu'on devrait envoyer à la Base Station pour un e-stop suivant les valeurs binaires du message précédent.

En plus, il faut probablement inhiber la Base Station en plus de couper le courant (<0>) car les différentes manettes vont se dépêcher de relancer les locos. Y a t-il un mode "service " dans la Base Station comme semble le prévoir la norme MOROP (cf message précédent)

Merci d'avance.

Cordialement

msport

  • Hero Member
  • *****
  • Messages: 658
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Re : Re : e-stop emergency stop avec DCC++
« Réponse #9 le: mars 19, 2018, 02:26:38 pm »

En regardant de plus près, le e-stop est un paquet de trois octets : 0 0 0 , avant il y a la synchro, au milieu les bits 0 de séparation et ensuite le bit 1 final.
J'ai donc testé <M 0 0 0> ... et ça marche ! (enfin bon, ça s'arrête. Mais il faut savoir ce qu'on veut)

Merci à Jean-Luc pour son rappel à l'ordre :

Ben alors, on lit pas la norme les DCCistes  ;D

Cordialement

bobyAndCo

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 362
  • HO avec DCC++
    • Voir le profil
Re : e-stop emergency stop avec DCC++
« Réponse #10 le: mars 19, 2018, 09:05:34 pm »
Merci d'avoir cherché... et trouvé. C'est effectivement intéressant et important pour la sécurité sur nos réseaux... enfin, ceux qui sont en DCC, les autres, euuuh !!!

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1438
    • Voir le profil
Re : e-stop emergency stop avec DCC++
« Réponse #11 le: mars 19, 2018, 10:27:04 pm »
J'ai un arrêt d'urgence sur mon réseau. Un message CAN est envoyé aux cartes canton qui coupent le jus.  ;)
Cordialement

msport

  • Hero Member
  • *****
  • Messages: 658
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Re : e-stop emergency stop avec DCC++
« Réponse #12 le: mars 19, 2018, 11:05:12 pm »
... coupent le jus ...
oui, mais comme dit, avec nos super capacitors, stay alive et power packs qui font encore avancer nos locos pendant 15s à toute vitesse, ça ne suffit pas.
Par contre pour les accessoires, c'est bien ce qu'il faut quand on commence à sentir le chaud du coté d'un moteur d'aiguillage ou autre.
D'accord avec le CAN, ça n'arrive pas, mais il y a d'autres protocoles moins fiables.  ;)
Après avoir fait fumer un antique relais bistable, j'ai testé une détection de consommation (quand elle s'éternise) sur l'alimentation des accessoires à base de MAX471 + arduino.
Cordialement

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1438
    • Voir le profil
Re : e-stop emergency stop avec DCC++
« Réponse #13 le: mars 19, 2018, 11:06:36 pm »
J'ai pas de capas dans les locos. C'est incompatible avec la PWM. Chaque alimentation traction mesure le courant et coupe en cas de court jus. De plus chaque alimentation traction a un fusible 800mA au cas où.
« Modifié: mars 20, 2018, 08:49:03 am par Jean-Luc »
Cordialement