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??
Hallo Halb_leiter, kann das sein, dass da Klammern fehlen? Probiere doch bitte mal: [vector((vector < 494) | (vector > 631))] [vector((vector > 494) & (vector < 631))]
...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?
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.
...bitte um Klarstellung: ist "vector" eine Zeit im Integerformat oder ein Array(Boolean) of Integer?
Also im Matlab Workspace heißt es dann vector 1000x1 double. Sieht dann so aus 1 2 3 4 5 .. 1000
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!
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.
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?
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)].
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)].
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.