MathieuA a écrit:Petite question idiote: Peux tu m'expliquer comment tu lance l'émulation de RUN ?
Pour passer dans les séquences de CODE de détection il faut être en RUN, mais pour être en RUN, il faut le réseau physique derrière… Le mode émulation de RUN est une astuce qui permet de passer en mode RUN sans avoir le réseau, c’est donc un outil de DEBUGAGE très pratique.
Pour l’utiliser, il faut:
1- cocher la case … RUN Run Emulation,
- Emul01.png (7.5 Kio) Consulté 261 fois
2- lancer une interface DCC. Et là on peut faire du RUN sans le réseau, quand une LOCO arrive sur une zone de détection, la LOCO est en attente de synchro, la trame d’interrogation est bien envoyée sur le DCC, et par je ne sais pas quel mécanisme… la réponse est traitée comme toujours possitive, ce qui simule la détection, la LOCO continue sa marche…
- Emul02.png (6.52 Kio) Consulté 262 fois
MathieuA a écrit:Alors finalement c'était bien un décalage d'adresse ?
Avec des adresses S88, je ne sais toujours pas pourquoi, mais la trame est détectée en erreur par la DLL XpressNet et il n’y a donc pas de simulation de détection. Ce que j’ai fait est tout bête, j’ai fait une moulinette pour faire +512 sur les adresses…
MathieuA a écrit:Il s'avère qu'un autre problème est apparu en parallèle, en fait maintenant mon oncle a des KVB intempestifs qui apparaissent au hasard sur certaines loco (voir toutes parfois).
La prise en charge KVB est une fonction que j’ai écrite pour le cas où une LOCO grille un signal, dans ce cas
CDM faisait un STOP RUN pour tout bloquer alors qu’il ne s’agit de d’UNE LOCO.Il y a dans CDM un certain nombre de cas où le CODE détecte une anomalie qui est plus moins LOGuée, plus ou moins maîtrisée, maintenant j’applique la même stratégie, faire un appel à la prise en charge KVB pour tenter de garder la main… Mais si le CODE détecte une anomalie, la bonne attitude est de trouver la cause de cette anomalie pour la corriger…
Dans le cas (initial) que tu soumets, nous sommes dans la fonction
DET_ComputeOpTrnDistToLeaveDetector() pour recalculer la distance du prochain détecteur...
long DET_ComputeOpTrnDistToLeaveDetector(pOP_TRN pOpTrn, pPERIPH pLeaveDetector)
/* intermediate segments */
while (pSegment != pEndSegment)
{
if (!PLC_GetNextConnectedSegment(&pSegment, &pEnterPort, FALSE, FALSE))
{ /* PROBLEMN !!! */ ⇐ Commentaire de Jean-Pierre
if (pSegment != pEndSegment)
{
if (pOpTrn->pNextDetector != NULL)
lIndexNextDetector = OBJ_GetObjectIndex(pOpTrn->pNextDetector);
if (pLeaveDetector != NULL)
lIndexLeaveDetector = OBJ_GetObjectIndex(pLeaveDetector);
//***BugStopRun.7.03.06***
// SIMU_StopRun( TRUE, FALSE, TRUE );
/// Nous Stopons seulement le train en cause !!!
/// Pour repartir, il faut libérer le train de son itinéraire
/// et le repositionner
// SIMU_EmergencyShutDown(pOpTrn, "Anomalous operation", "DET_ComputeOpTrnDistToLeaveDetector" );
sprintf(sMessage, " Seg %ld, EndSeg %ld", OBJ_GetObjectIndex(pSegment), OBJ_GetObjectIndex(pSegment));
INFO_LogActions(pOpTrn, sMessage);
sprintf(sMessage, "DET_ComputeOpTrnDistToLeaveDetector(), next det %ld leave det %ld", lIndexNextDetector, lIndexLeaveDetector);
KVB_StopKVB(pOpTrn, sMessage); // DET_ComputeOpTrnDistToLeaveDetector()
return 0L;
}
}Maintenant que je peux refaire des Emulation de RUN, je cherche à comprendre pourquoi Jean-Pierre a mis ce commentaire PROBLEM
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problème...
Michel.