Datenbaustein Daten zusammenfügen

TheBigMemph

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi...
Habe ein Problem, und zwar ein Fahrstuhl ...
Habe 3 Etagen, die drei Drücker E0.0 E0.1 und E0.2 schreiben Ganze Zahlen in meinen Datenbaustein...
E0.0 eine 1 E0.1 eine 2 und E0.2 eine 3
Wenn der Fahrstuhl in einer Etage ankommt schiebt der DB sich automatisch nach oben ... bis er vollständig leer ist (also nur noch Nullen drin stehen).
Nun ist mein Ziel die ganzen vielen Zahlen zusammenzufügen ...
Also alle 1,2 und 3 die im DB sind sind ja Etagen und er soll ja nicht von 1 nach 2 und dann wieder nach 1 ... also soll die 1 wegfallen wenn schon eine drin ist bzw diese sollen sich einfach zusammenfügen...
Habe das mal so gedacht:

Code:
L DBW 0
L DBW 1
<I 
SPB OK1
T DBW 1
TAK 
T DBW 0
OK1: NOP 1
L DBW 1
L DBW 2
<I 
SPB OK2
T DBW 2
TAK 
T DBW 1
OK2: NOP 1
L DBW 0
L DBW 1
<I 
SPB OK3
T DBW 1
TAK 
T DBW 0
OK3: NOP 1

Für mich ist das so logisch...funzt aber einfach nicht...
Wenn ich den Datenbaustein wieder einmal zurückgeschoben habe (das mache ich mit dem SFC20) speichert er,wenn ich einen der drei Taster drücke direkt zwei Werte in den DB ... und ich habe keine Ahnung wieso ...
Beim ersten Durchlauf (soll heißen der Fahrstuhl hat noch keine Etage erreicht und den Datenbaustein noch nicht nach oben geschoben) sortiert er garnicht ...

sehr verzweifelt bin

mfg
Memph
 
Erst mal, bevor das hier weiter analysiert wird

Code:
L DBW 0
L DBW 1
<I

Das überschneidet sich. DBW0 ist ein Wort und belegt Byte 0 und 1.

Also das nächste DW ist 2. Das kommt mehrfach in dem Code vor.

Wenn du den Aufzug nur einmal halten lassen möchtest, solltest du bevor du den Wert in den DB einträgst den DB auf die Einträge durchsuchen und wenn die Etage schon da ist, wird nichts eingetragen.

pt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi...


Für mich ist das so logisch...funzt aber einfach nicht...
Wenn ich den Datenbaustein wieder einmal zurückgeschoben habe (das mache ich mit dem SFC20) speichert er,wenn ich einen der drei Taster drücke direkt zwei Werte in den DB ... und ich habe keine Ahnung wieso ...
Beim ersten Durchlauf (soll heißen der Fahrstuhl hat noch keine Etage erreicht und den Datenbaustein noch nicht nach oben geschoben) sortiert er garnicht ...

Wird der SFC mehrere Zyklen durchlaufen? Das solltest du dann abfangen. Z.B. mit einer positiven Flanke.

pt
 
plc tippser hat vollkommen Recht, die Datenworte überschneiden sich.
Korrigiert man allerdings den Fehler, so wird das nächste Problem auftreten:

Code:
L DBW 0  // der Wert aus DBW 0 wird in Akku 1 geschrieben
L DBW 2  // Akku 1 wird in Akku 2 geschoben und der neue Wert aus DBW 2 in Akku 1 geschrieben
<I       // Vergleiche Akku 1 auf größer Akku 2
SPB OK1  // Akku 1 größer Akku 2 ? Dann springe. Sonst...
[COLOR=red]T DBW 2  // Schreibe Inhalt von Akku 1 in DBW 2[/COLOR]
[COLOR=red]TAK      // Tausche Inhalt von Akku 1 und Akku 2[/COLOR]
[COLOR=red]T DBW 0  // Schreibe Inhalt von Akku 1 in DBW 0[/COLOR]

Wie man sieht, werden die Werte wieder in ihre ursprünglichen Datenworte zurück geschrieben. Sollen die Werte ausgetauscht werden, so sollte die Programmierung eher so aussehen:

Code:
L DBW 0  // der Wert aus DBW 0 wird in Akku 1 geschrieben
L DBW 2  // Akku 1 wird in Akku 2 geschoben und der neue Wert aus DBW 2 in Akku 1 geschrieben
<I       // Vergleiche Akku 1 auf größer Akku 2
SPB OK1  // Akku 1 größer Akku 2 ? Dann springe. Sonst...
[COLOR=blue]T DBW 0  // Schreibe Inhalt von Akku 1 in DBW 0[/COLOR]
[COLOR=blue]TAK      // Tausche Inhalt von Akku 1 und Akku 2[/COLOR]
[COLOR=blue]T DBW 2  // Schreibe Inhalt von Akku 1 in DBW 2[/COLOR]

Ich hoffe das hilft das Problem zu lösen
 
Zurück
Oben