Forum: PC Hard- und Software state flow Bedienung für ein Simulink Model


von Halb_leiter (Gast)


Lesenswert?

Hallo, Profis ;)

Ich versuche eine Zustandsmachine zu erzeugen. Der Eingang ist ein 
Vektor mit 1000 Einträgen.
Die Bedienung für ein Wechsel in eine Richtung ist[vector(vector < 494 | 
vector > 631)] und zurück [vector(vector > 494 & vector < 631)]. Ich 
bekomme aber Fehlermeldung im diagnostic viewer Fenster "Illegal use of 
a matrix or vector type where a scalar was expected". Wieso? Wenn ich 
die Bedinungen   in the Matlab command window eingebe, gibt es keine 
Fehlermeldungen.

Infos über den Block A: READY, entry: Ready=1;
Infos über Block B:NOT_READY, entry: Ready=0;

Vielleicht hat jemand eine Idee, woran es liegen könnte??

von WR (Gast)


Lesenswert?

Hallo Halb_leiter,
kann das sein, dass da Klammern fehlen?
Probiere doch bitte mal:
  [vector((vector < 494) | (vector > 631))]
  [vector((vector > 494) & (vector < 631))]

von WR (Gast)


Lesenswert?

...und dann noch:

wieso eigentlich vector von vector?
Genügt da nicht
  [(vector < 494) | (vector > 631)]
  [(vector > 494) & (vector < 631)]

Und soll bei vector=494 und bei vector=631 wirklich der alte Zustand 
erhalten bleiben?

von Halb_leiter (Gast)


Lesenswert?

Hallo,

danke.

Habe beide Möglichkeiten ausprobiert. Es kommt immer wieder die gleiche 
Fehlermeldung.

Zwischen den Zeitpunkten ( die Einträge im Vektor entsprechen den 
Zeitpunkten)    494<t<631 herrscht ein Zustand, sonst der andere 
Zustand.

von WR (Gast)


Lesenswert?

...bitte um Klarstellung:
ist "vector" eine Zeit im Integerformat oder ein Array(Boolean) of 
Integer?

von Halb_leiter (Gast)


Lesenswert?

Also im Matlab Workspace heißt es dann
vector 1000x1 double.

Sieht dann so aus

1
2
3
4
5
..
1000

von WR (Gast)


Lesenswert?

vector ist also ein rein numerischer Wert.
Ausdrücke wie
(vector < 494) | (vector > 631)
geben als Ergebnis einen booleschen Wert zurück!

Diese Ausdrücke sind somit völlig sinnlos:
y = vector(vector < 494 | vector > 631)

bedeutet:
  y = vector von (true oder false)
wobei vector hier als Array mit 2 Elementen unterstellt wird.
Also
  vector(true)=numerischer Wert
und
  vector(false)=numerischer Wert


Oder beschreibe bitte die Aufgabe komplett!

von Halb_leiter (Gast)


Lesenswert?

Also

im Block 1 steht ja drin:
entry: READY=1
im Block 2:
entry: READY=0;

Eigentlich wollte ich das ja auch erreichen, dass der Ausgang der 
Zustandsmachine die Werte 0 oder 1 annehmen kann.

Also zwischen den Zeitpunkten 494<t<631  soll dann der Zustand 0 sein, 
sonst 1. Also möchte den Zustand (bereit: READY=1/nicht bereit:READY=0) 
eines Gerätes (z.B Waschmaschine) darstellen. Die Zyklusdauer ist 137 
Minuten, die Waschmaschine läuft zwischen den Zeitpunkten 494 und 631 
und ist dann natürlich während dieser Zeit nicht bereit, weil sie ja 
schon läuft. Vor dem Zeitpunkt 494 und nach dem Zeitpunkt 631 ist sie ja 
dann bereit, weil sie eben nicht läuft.

von WR (Gast)


Lesenswert?

Ich sehe hieraus keine Notwendigkeit einer Zustandsmaschine, denn 
"vector" scheint ein Wert zu sein, der immer anliegt, nicht nur ab und 
zu. Eine Zustandsmaschine hat ja Speichervermögen, was hier nicht 
zusätzlich benötigt wird.
Wenn ich es nun richtig verstehe, genügt dieser Ausdruck:

READY = (vector < 494) | (vector > 631)

READY nimmt außerhalb des Bereiches 494...631 den Wert "true" und 
innerhalb dieses Bereiches den Wert "false" an.

ok?

von Halb_leiter (Gast)


Lesenswert?

Ja die Zustandsmachine ist nicht notwendig, wollte ich es trotzdem mal 
versuchen.

Also dieses größer oder kleiner macht Probleme.

So funktioniert es zum Beispiel:

[Timeslot(494) | Timeslot(634)].

von Halb_leiter (Gast)


Lesenswert?

Halb_leiter schrieb:
> Ja die Zustandsmachine ist nicht notwendig, wollte ich es trotzdem
> mal
> versuchen.
>
> Also dieses größer oder kleiner macht Probleme.
>
> So funktioniert es zum Beispiel:
>
> [vector(494) | vector(634)].

von WR (Gast)


Angehängte Dateien:

Lesenswert?

Wenn es unbedingt eine Zustandsmaschine werden soll, könnte es so 
aussehen wie im Bild.

(READY=0) AND (t=631) -> READY:=1
(READY=1) AND (t=494) -> READY:=0

von Halb_leiter (Gast)


Lesenswert?

Danke für die Hilfe

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.