TIA Schieben mit Zeit

Sps_rookie

Level-1
Beiträge
19
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Gemeinde,
Ich habe folgendes Problem:
Ich soll ein Schiebregister erstellen, und dies in der Visu darstellen. Es soll Simuliert werden dass der Elektriker die Lampenausgänge durcheinander angeschloßen haben soll. Zudem soll die Parametergeschwindigkeit auch noch durch das Panel einstellbar sein. Einstellbarkeit und Panel habe ich bereits jedoch wie ich das register schieben soll wenn ich nicht das Ausgangswort benutzen kann um auf die Ausgänge zu gelangen und der Timer immer wieder von neu starten soll. Ich habe mir sonst noch überlegt ob man nicht das Bit durch Compare abfragen kann oder mit CASE.
Schieben.pngSoweit bin ich erst, bin dankbar für jeden Tipp
 
Das Timer problem habe ich bereits gelöst leider schiebt er noch nichts weiter. Habe ich den falschen Ansatz oder was könnte ich noch versuchen?

Mfg Rookie
Schieben.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich soll ein Schiebregister erstellen,
Erstellen oder anwenden? 16 Bit? 32 Bit? ...?

Es soll Simuliert werden dass der Elektriker die Lampenausgänge durcheinander angeschloßen haben soll.
Wie macht man das?
(Vermutlich wie im richtigen Leben: die SoftwareAbteilung soll ausbügeln, was die HardwareAbteilung verbockt hat? ;o)

Zudem soll die Parametergeschwindigkeit auch noch durch das Panel einstellbar sein. Einstellbarkeit und Panel habe ich bereits
Was ist ParametrierGeschwindigkeit? Meinst Du, Du sollst den Zeitwert des u.g. Timers über das Panel variieren können?

jedoch wie ich das register schieben soll wenn ich nicht das Ausgangswort benutzen kann um auf die Ausgänge zu gelangen
Was hat das Schieben damit zu tun, dass Du das AusgangsWort (aha, 16 Bit also?) nicht benutzen kannst?
Hat der böse Elektriker die Lampenausgänge kaputtgewütet?
Woran scheitert was? Sollst Du das AW nicht benutzen?

und der Timer immer wieder von neu starten soll.
Das hast Du laut #2 inzwischen im Griff. (Dein eingestelltes Bild ist gaaanz schlecht lesbar)

Ich habe mir sonst noch überlegt ob man nicht das Bit durch Compare abfragen kann oder mit CASE.
Welches Bit? Betrifft dies etwa das NichtBenutzenKönnen des AusgansWortes?

Ich werde leider nicht schlau aus Deiner Beschreibung. Andere anscheinend auch nicht, was die "zahllosen" Reaktionen erklären könnte.

Gruss, Heinileini
 
Was ist ParametrierGeschwindigkeit? Meinst Du, Du sollst den Zeitwert des u.g. Timers über das Panel variieren können?
Genau das meinte ich habe ichbereits gelöst.;)


Was hat das Schieben damit zu tun, dass Du das AusgangsWort (aha, 16 Bit also?) nicht benutzen kannst?
Hat der böse Elektriker die Lampenausgänge kaputtgewütet?
Woran scheitert was? Sollst Du das AW nicht benutzen?
Er hat sie nicht gewürgt, das Lauflicht rennt nur nicht wie normal von oben nach unten sondern springt kreuz und quer, deswegen habe ich am Panel einfach Ausgänge abgefragt. Mit einem AW hätte ich einfach am Ende von SHL sagen können Ausgang ist AW0 z.B. weusste aber so nicht wie das geht.


Das hast Du laut #2 inzwischen im Griff. (Dein eingestelltes Bild ist gaaanz schlecht lesbar)
Tut mir leid

Den Rest habe ich soweit im Griff lediglich eine Reset Funktion macht mir zu schaffen da ich ein CASE verwende um die Ausgänge abzufragen und bei ELSE ist MW=1 das müsste ich noch ausbügeln dann haut es denk ich hin.
Trotzdem danke dafür.:D
 
Zuletzt bearbeitet:
Moin Sps-rookie

So richtig klar ist mir leider immer noch nicht, wie Du dem Elektriker entgegenwirken sollst.
In der Visu kann man sehen, dass Dein Lauflicht richtig funktioniert und die "real existierenden", aber falsch angeschlossenen Lampen zeigen, dass der Elektriker von seiner künstlerischen Freiheit Gebrauch gemacht hat?
Sollst Du nun in Deinem Programm dafür sorgen, dass die Lampen trotz der VerdrahtungsFehler in der richtigen Reihenfolge aufleuchten?
Also das MW so ins AW "zaubern", dass die VerdrahtungsFehler vertuscht werden?
Bit für Bit kopieren? Z.B.
A 1.3 = M 0.0
A 0.7 = M 0.1
u.s.w.
A 1.1 = M 1.6
A 0.2 = M 1.7
?
Ist in Deinem SchiebeRegister immer nur (höchstens) 1 Bit, das den Zustand 1 hat?
Und fragst Du in der CASE-Selection auf
MW = 1
MW = 2
MW = 4
MW = 8
u.s.w.
MW = 16384
MW =-32768
ab?
Bei ELSE ist MW = 1?
Ich sehe bzw. verstehe den Zusammenhang nicht.

Gruss, Heinleini
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Heinileini,
Sollst Du nun in Deinem Programm dafür sorgen, dass die Lampen trotz der VerdrahtungsFehler in der richtigen Reihenfolge aufleuchten?
Also das MW so ins AW "zaubern", dass die VerdrahtungsFehler vertuscht werden?
Bit für Bit kopieren? Z.B.
A 1.3 = M 0.0
A 0.7 = M 0.1
u.s.w.
A 1.1 = M 1.6
A 0.2 = M 1.7
?
Ist in Deinem SchiebeRegister immer nur (höchstens) 1 Bit, das den Zustand 1 hat?
Und fragst Du in der CASE-Selection auf
MW = 1
MW = 2
MW = 4
MW = 8
u.s.w.
MW = 16384
MW =-32768
ab?
Bei ELSE ist MW = 1?
Schieben.jpgSchieben2.jpgSchieben3.jpg
Habe es so gemacht, und es geht. Verstehe aber noch nicht was der Unteschied ist wenn die IF Abfrage hinter oder vor dem CASE steht. Tut mir Leid wenn ich mich nicht richtig ausdrücken konnte habe deswegen Screenshots gemacht.
Trotzdem danke ;)
 
Zuletzt bearbeitet:
Moin Sps-rookie!

Zum FUP-Bildchen:
Ich verstehe "SHR" nicht. Ist das nicht Schiebe nach rechts? Schiebe nach links wäre richtig, da Du das MW300 mit 1 vorbesetzt (im FUP beim Starten und im ELSE-Zweig der CASE-Selektion).

Das MW300 := 1 würde ich aus der CASE-Selektion heraus nehmen und stattdessen die Anweisungen, die Du in der IF-Abfrage stehen hast, in den ELSE-CASE-Zweig schreiben. Die IF-Abfrage entfällt dann.
Die CASE-Selektion ist dann nur noch dafür zuständig, die Merker auf die Ausgänge zu übertragen und beeinflusst nicht mehr das SchiebeRegister.
Bis wohin das SchiebeRegister laufen soll, bevor es neu gestartet wird, muss dann allerdings noch im FUP realisiert werden.
Und zwar, ganz zu Anfang, über dem jetzt vorhandenen, MW300 vergleichen, ob es grösser als z.B. 9192 ist und wenn ja, mit MOVE 0 nach MW300 kopieren.

Zu IF vor CASE oder CASE vor IF:
Die Befehle in Deiner IF-Abfrage werden nur ausgeführt, wenn MW300 = 0 ist.
Wird die CASE-Selektion vor der IF-Abfrage durchlaufen, so sorgt sie dafür, dass MW300 = 0 durch MW300 = 1 ersetzt wird und somit die IF-Abfrage nie den Fall erleben wird, dass MW300 = 0 ist.

Deine CASE-Selektion beginnt mit 2. Ist das Absicht?

Gruss, Heinileini
 
Hi Heinileini,
Da hast du Recht, habe mich mit SHR vertan, habe es asugebessert.
Das MW300 := 1 würde ich aus der CASE-Selektion heraus nehmen und stattdessen die Anweisungen, die Du in der IF-Abfrage stehen hast, in den ELSE-CASE-Zweig schreiben. Die IF-Abfrage entfällt dann.
Die CASE-Selektion ist dann nur noch dafür zuständig, die Merker auf die Ausgänge zu übertragen und beeinflusst nicht mehr das SchiebeRegister.
Bis wohin das SchiebeRegister laufen soll, bevor es neu gestartet wird, muss dann allerdings noch im FUP realisiert werden.
Und zwar, ganz zu Anfang, über dem jetzt vorhandenen, MW300 vergleichen, ob es grösser als z.B. 9192 ist und wenn ja, mit MOVE 0 nach MW300 kopieren.
Das hört sich viel besser an als meine Option und macht jetzt auch mehr Sinn.
[
QUOTE]Zu IF vor CASE oder CASE vor IF:
Die Befehle in Deiner IF-Abfrage werden nur ausgeführt, wenn MW300 = 0 ist.
Wird die CASE-Selektion vor der IF-Abfrage durchlaufen, so sorgt sie dafür, dass MW300 = 0 durch MW300 = 1 ersetzt wird und somit die IF-Abfrage nie den Fall erleben wird, dass MW300 = 0 ist.[/QUOTE]
Jetzt habe ich es vewrstanden. Vielen Dank.

Deine CASE-Selektion beginnt mit 2. Ist das Absicht?
Es war so gelöst da ich zuerst die Abfrage auf 1 starten ließ, jedoch blieb dann immer das erste Licht an weil es ja nicht zurückgesetzt wurde. Außerdem hatte ich noch ein Beispiel mit Multiplikation gehabt da konnte ich die Abfrage gleich kopieren.:D
Jedenfalls Vielen Tag läuft jetzt.
 
Zurück
Oben