Dag Ad,
Een veel gemaakte denkfout is dat je veronderstelt dat een macro is gekoppeld aan een loc. Dat is volgens mij niet zo.
Architectuur
De 'gelaagde architectuur' van TrainController zoals ik hem tot nu toe begrijp is als volgt.
1 - Als eerste is er de laag van de realiteit (dingen die je vast kunt pakken, rails, loc's, wissels, seinen, decoders)
2 - Als tweede vinden we de representatie van de realiteit in TrainController (dat is de tweede laag - die geeft virtueel een abstractie van de realiteit weer). Op die laag vind je de loc-, wissel-, terugmelder- en sein-adressen via welke TrainController in contact met de realiteit staat. Op deze laag kun je over je loc bijvoorbeeld aangeven dat 'Engine' is gekoppeld aan F8 van die specifieke loc, terwijl dat bij een andere loc wel F7 kan zijn. In TrainController ebruik je verder allen maar het commando 'Engine' aan of uit. Deze abstractie-laag vertaalt dat voor de onderhanden zijnde loc.
3 - Dan is er een besturings-laag, waarin zaken als schedules een plek hebben en die de treinenloop beïnvloeden, en macro's die daar behulpzaam bij kunnen zijn.
4 - Dan heb je een laatste laag, de presentatie-laag. Daar vind je de vertaling van de realiteit naar een plaatje op je beeldscherm.
Besturing, schedules
Welnu, de besturingslaag bestuurt treinritten. Dat is wat anders dan loc's!!! Een treinrit begint in een blok en eindigt in een blok. Wanneer het schedule wordt gestart dan begint die loc te rijden die in het startblok staat en die wordt dan door het schedule naar het eindblok gebracht (even aannemen dat er geen speciale condities worden gebruikt).
Voor de automatische besturing van de treinenloop zijn dus de schedules de kern, en niet de loc's!
Dan nu naar macro's.
Macro's zijn - als het ware - programmatjes die je aan acties kunt verbinden. Acties zijn bijvoorbeeld het bereiken van een stop-marker, het binnenkomen van een blok (bezetmelder wordt actief), het indrukken van een knop (zoals jij nu wilt). Aan een macro 'hangt' geen trein!
Ik zou de knop niet de macro, maar een schedule laten starten, en aan het begin van het schedule een 'list' van acties hangen die precies doen wat jij wilt, dus in plaats van jouw macro. Waarom? Aan een schedule 'hangt' een startblok en daar staat een loc. Aan het schedule kun je, als je dat wilt, een conditie meegeven dat het alleen geldt voor die ene loc, of voor de groep 'sound-locs'.
De combinatie
Ik heb ook wel eens geprobeerd te doen wat jij nu lijkt te willen en had zo'n macro in het begin van mijn schedule opgenomen. Wat bleek is dat het schedule niet luisterde naar de Delay's die ik in de macro specificeerde. De trein begin gewoon - op basis van het schedule - te rijden en werkte parallel de macro-opdrachten af. Dat is de reden voor het opnemen van de opdrachten in een 'List' in het schedule zelf, dan 'luistert' het scedule wel naar de delay's...
Opmerking
Als ik het goed heb gezien gebruik je nu een aan-uit knop. Misschien is het handiger om in dit geval te kiezen voor een moment-schakelaar, een push-button.
HTH, (Hope This Helps),
Gerard