How to 'effectively' stop outputing signals from the subsystem when it is not triggered on or not enabled?

2 vues (au cours des 30 derniers jours)
Dear All,
I've built a system in Simulink,which tried to interprete binary signals of a certain pattern. A counter was set based on the sampling time, and at each moment when the signal changes from 0 to 1 or from 1 to 0, I'd like to record the counter of that moment, as well as the change characteristics (like rising or falling).
I used the 'trigger subsystems', but the problem is, the subsystem will always output something at each sampling point, even it's not a rising or falling signal that I'm interested. The settings for the triggered subsystem only allow to keep the output either held or reset to a random number.
How to get around this problem and let the triggered subsystem output something only when it's triggered?
Cheers,
Yanbo

Réponses (2)

Albert Yam
Albert Yam le 15 Août 2012
Off the top of my head, At the output of your subsystem (outside), put a switch block, with a known 'invalid' constant (NaN? or -1?) as the other input. The switch signal being the same as the 'enable'.
So if not enabled, you get an 'invalid' value.
  2 commentaires
Yanbo
Yanbo le 20 Août 2012
Thank you for your comment. But speaking of the triggered subsystem, MATLAB help file says the output can only be held when it's not triggered, therefore, cannot be reset by an 'invalid' constant.
Anyway, I will try the your suggestion for the enabled subsystems, see if it works.
Cheers
Albert Yam
Albert Yam le 20 Août 2012
"The switch signal being the same as the 'enable'." Does not mean to replace the enable, it means the signal going into the switch block, the trigger, should be the same signal used for the enable.
By 'invalid' I mean 'something that your code cannot normally produce', not something that will produce an error.
Since the Simulink signal produces an output at every step (as Kaustubha mentioned), if your output is a 1 or 0, then you can't tell if those values are calculated or held (not calculated), but if you see a NaN or -1 or 2, then you know that at that time step, the output is not from calculation.
With the switch block, those 'held' values are not sent out. They terminate at the switch. Enabled values (calculated) pass through the switch.

Connectez-vous pour commenter.


Kaustubha Govind
Kaustubha Govind le 16 Août 2012
Modifié(e) : Kaustubha Govind le 16 Août 2012
There is no way to "stop" outputting signals from any block in Simulink. The Simulink Engine expects blocks to produce some output every time there is a sample-hit. However, you should be able to achieve what you need by having the output reset or to hold the last value and construct additional logic around that (for example, see Albert's answer).

Catégories

En savoir plus sur Subsystems dans Help Center et File Exchange

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by