14 votes

Comment concevoir un circuit combinatoire permettant de suivre le contenu d'un train, même s'il n'est pas à l'arrêt ?

J'essaie de concevoir un circuit combinateur qui émettra un signal avec le contenu du train lorsqu'un train se trouve à l'arrêt (c'est-à-dire le même signal que le mode "Lire le contenu du train" de l'arrêt), mais lorsque le train part, il doit maintenir le signal au contenu du dernier train jusqu'à l'arrivée du train suivant.

En pseudo-code :

If T > 0                  # If a train is at the station
    Output = Everything   # Output train contents
Else
    Output = Output from previous tick
End

Pour l'instant, j'ai ça :

Le premier combinateur arithmétique est réglé sur Each * -1 -> Each qui est ajouté au signal de l'arrêt du train au tick suivant pour donner les changements entre chaque tick comme un "signal delta".

Le combinateur du décideur est réglé sur T >= 0 -> Everything de sorte que ce "signal delta" soit ignoré au moment où le train quitte la gare. (T > 0 indique qu'un train est en gare, donc le "delta-T" sera négatif lorsque le train partira).

Enfin, ces données sont introduites dans un simple système d'accumulation. Each + 0 -> Each combinateur arithmétique qui s'alimente également lui-même, agissant comme la cellule mémoire du système.

Le résultat est que la cellule mémoire se met à jour en permanence si j'ajoute ou retire des éléments du train pendant qu'il est à la gare, et qu'elle se souvient correctement du contenu lorsque le train part.

Cependant, je n'ai pas réussi à trouver comment le réinitialiser correctement à l'arrivée du prochain train, donc actuellement, chaque train qui arrive à la gare ajoute au compte actuel plutôt que de l'écraser.

J'ai essentiellement besoin de m'assurer qu'à l'arrivée du train, le contenu actuel de la cellule mémoire est soustrait du "signal delta", mais je continue à me battre pour obtenir le bon timing tout en empêchant la valeur de T de la cellule mémoire (dont je ne me soucie pas par ailleurs) d'interférer sans utiliser une tonne de combinateurs.

9voto

Snorkpete Points 75

J'ai réussi à trouver une solution qui semble fonctionner sans nécessiter trop de combinateurs.

working train content tracker

Tous les combinateurs sont orientés avec l'entrée en haut, la sortie en bas.

De gauche à droite, les deux combinateurs arithmétiques supérieurs sont réglés sur Each + 0 -> Each y T + 0 -> T . Cela isole le signal T sur la droite, et le signal de gauche est juste là comme un retard pour garder les données + signal de validation en synchronisation avec le signal de validation isolé.

Sur la rangée du milieu, le décideur de gauche est réglé sur T > 0 -> Everything qui fournit la fonctionnalité de mise à jour, tandis que le décideur de droite est réglé sur T = 0 -> Everything qui active la mémoire lorsque le train est parti, de sorte que la sortie combinée de cette ligne est toujours soit le contenu du train, soit la valeur de rétroaction puisque les deux conditions sont disjointes.

La rangée du bas filtre le signal T à l'aide d'un combinateur arithmétique. T * -1 -> T avec un autre retard Each + 0 -> Each et ce signal filtré est réinjecté dans le décideur le plus à droite de la rangée du milieu. Cela empêche la valeur de retour de T d'interférer avec la logique de validation de la rangée du milieu.

J'aurais aimé éviter les combinateurs de retard, et je ne suis toujours pas sûr à 100% que la boucle de rétroaction à deux cycles fonctionnera correctement dans tous les cas, mais cela semble suffisant pour le moment.

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X