WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Schalter zw. 0 und 1 springen mit jedem Simulationsschritt

 

MatlabErlerner
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2016, 15:05     Titel: Schalter zw. 0 und 1 springen mit jedem Simulationsschritt
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein Problem in Simulink. Dazu muss ich vorweg sagen, dass ich mit Simulink bisher nahezu keine Erfahrungen habe und deshalb hoffe, dass mir hier geholfen werden kann.
Ich möchte eine Nachricht, die aus insgesamt 184 einzelnen konstanten Werten besteht, nacheinander verschicken, um sie in einem weiteren Simulink-Modell zu empfangen und wieder zu einer Nachricht zusammenzusetzen.
Dazu möchte ich erst 92 Werte mit der ersten Nachricht verschicken und dann 92 Werte mit der zweiten Nachricht.
Die 184 Werte sind über einen Mux-Block zusammengefasst. (siehe Bild mit dem Ausschnitt einiger Werte)

Mein Problem ist es nun die zwei Nachrichten zu erstellen und dann nacheinander abzuschicken (bzw. erst einmal nacheinander auszugeben, bspw. durch die Anzeige in einem Scope-Block). Das heißt ich möchte mit jedem Zeitschritt der Simulation, dass ein Teil der Nachricht rausgesendet wird. Also als Beispiel soll im ersten Zeitschritt die erste Nachricht mit den ersten 92 Werten rausgesendet werden, dann im zweiten Zeitschritt der Simulation soll die zweite Nachricht mit den restlichen 92 Werten rausgesendet werden. Im dritten Zeitschritt der Simulation soll dann wieder die erste Nachricht mit den ersten 92 Werten rausgesendet werden usw.
Habt ihr eine Idee, wie man das ganze in Simulink umsetzen kann? Ich habe testweise es mal mit einem Puls-Generator-Block probiert, allerdings ist das nicht gerade eine elegante Lösung und vorallem möchte ich die Umschaltung nicht an den Pulsgenerator binden, sondern an die Simulationsschritte. D.h. ich möchte, wie oben beschrieben, dass zwischen den beiden Nachrichtenteilen bei jedem Simulationsschritt umgeschaltet wird und der andere dann gesendet wird!

Ich danke euch für eure Hilfe schonmal im Voraus! Stehe total auf dem Schlauch und wäre für jeden Rat dankbar!

Beste Grüße
Max

test.slx
 Beschreibung:

Download
 Dateiname:  test.slx
 Dateigröße:  24.34 KB
 Heruntergeladen:  366 mal
Private Nachricht senden Benutzer-Profile anzeigen


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 09.05.2016, 17:58     Titel:
  Antworten mit Zitat      
Für solche Art Umschaltaufgaben sind FlipFlops meist sehr geeignet.
Hier besonders das R-S-FlipFlop (Rücksetzen, setzen)
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2016, 15:24     Titel:
  Antworten mit Zitat      
Hallo Martina,

vielen Dank für deine schnelle Antwort. Ich habe schon ein bisschen mit den FlipFlops herumprobiert, aber irgendwie komme ich noch nicht so recht weiter. Hast du vllt. einen Implementierungsvorschlag? Wie gesagt, ich bin, was Simulink angeht, absoluter Neuling.
Ich habe ja zwei Eingänge (R und S). Womit verbinde ich diese, da mein einziger möglicher Eingang ja die gesamte Nachricht ist. Den Pulse-Generator-Block möchte ich ja eliminieren, da mit jedem Simulationsschritt umgeschaltet werden soll.
Desweiteren habe ich noch das Problem, dass die Nachricht am Ende nicht aus 184 Werten, sondern beispielsweise aus 627 Werten bestehen soll. Diese 627 Werte möchte/muss ich auf dann 7 Nachrichten (627/92 = 6,815 -> 7) aufteilen und nacheinander verschicken. Es sollte also nachher als Ergebnis (z.b. in der Anzeige über ein Scope-Block) in jedem Simulationsschritt eine Nachricht mit 92 Werten verschickt angezeigt werden.
Beispiel: Simulationsschritt = 0,2 sec
Dann folgende Werte als Ergebnis:
0 sec (Start der Simulation): ersten 92 Werte der 627 werte großen Nachricht
0,2 sec (erster Simulationsschritt): zweiten 92 Werte der 627 werte großen Nachricht
0,4 sec (zweiter Simulationsschritt): dritten 92 Werte der 627 werte großen Nachricht
usw.

Wie realisiere ich dies? Über weitere hilfreiche Tipps wäre ich super dankbar!

Liebe Grüße und besten Dank euch allen vorab
Max
Private Nachricht senden Benutzer-Profile anzeigen
 
Tom_Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2016, 21:22     Titel:
  Antworten mit Zitat      
Hallo,

ich muss sagen, ich kenn mich auch nicht sehr gut aus in Simulink.
Ich würde das Problem aber so lösen:
Du hast ja einen Mux mit 184 Eingängen. Den würde ich erst mal wieder mit einen Demux mit 2 Eingängen in jeweils zwei Signale mit 92 Werten aufteilen.

Dann gibt es mehrere Möglichkeiten. Z.B. kannst du einen Stateflow mit 2 Zuständen nehmen, der erste Zustand beschreibt einen Ausgang mit 0 und der zweite den Ausgang mit 1. Und das geht dann auf einen Switch, wo auch die beiden Signale mit den 92 Werten drauf gehen.

Auch möglich wäre ein Zähler der in jedem Simulationsschritt eins nach oben zählt, also 0->1->2->3->4->5 usw. Dannach eine Modulo Operation mit der Konstante 2. Der macht draus auch wieder eine 0->1->0->1->0 usw. Das kann wieder auf einen Switch.

Gruß Tom
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2016, 13:16     Titel:
  Antworten mit Zitat      
Hallo Tom,

vielen Dank für deine Antwort. Leider konnte ich erst heute deine Hilfestellungen umsetzen, da ich im Urlaub war.
Das klappt super über den zweiten Vorschlag, den du genannt hast. Einzig die Realisierung eines Zählers hat mir größere Probleme bereitet. Ich habe es über den Counter-Block gelöst (siehe Anhang). Gibt es da andere Möglichkeiten?

Meine zweite Frage lautet wie folgt:
Und zwar gehe ich in diesem Modell davon aus, dass die Nachricht lediglich 184 Werte groß ist und sich somit in 2 teilen lässt. Wie realisiere ich das ganze denn, wenn die Nachricht bspw. 376 Werte groß ist, sich also in 3 Nachrichten teilen muss?

Zu guter letzt würde ich gerne wissen, wie ich es realisiere, dass die Nachricht, die ich in einzelnen Elementen erhalte, zu einer ganzen wieder zusammengesetzt werden kann. Dafür müsste das Modell ja bei bspw. 3 Einzelnachrichten, die zu einer großen Nachricht wieder zusammengesetzt werden sollen, temporär über die Simulationsschritte speichern. Also die erste Nachricht kommt mit dem ersten Simulationsschritt an, die zweite Nachricht mit dem zweiten Simulationsschritt und die dritte Nachricht mit dem dritten Simulationsschritt. Bis zum dritten Simulationsschritt muss das Modell sich also die erste und zweite Nachricht 'merken', um diese wieder zusammensetzen zu können. Wie kann ich dies realisieren?

Vielen Dank für eure Hilfen
Max

test.slx
 Beschreibung:

Download
 Dateiname:  test.slx
 Dateigröße:  22.42 KB
 Heruntergeladen:  354 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.