Step 7 einzelnes Bit setzen/rücksetzen (Datenwort)

Hucky

Level-2
Beiträge
218
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin....
Ich habe da mal ne Frage...
Bei einem Azubi-Projekt habe ich unter anderem einen FU über Profibus angeschlossen. Da ich unabhängig von den gesetzten Bits im Steuerwort z.B. die Drehrichtung bei einer Drehzahl < 300 u/min über Tastendruck togglen möchte würde ich gerne nur das entsprechende Bit setzen.
Auf einem 6510 Prozessor (8 Bit) würde ich das jetzt folgendermassen machen:
lda Adresse
ora #04 (Bit 2)
sta Adresse

löschen:
lda Adresse
and #FE
sta Adresse

Kann ich so etwas in FUP programmieren, oder geht das nur mit AWL ?

Das Steuerwort würde ich dann z.B. in DB10.DBW0 "zwischenspeichern" um es dort ändern zu können und je nach Verknüpfung ins passende PAW schieben.

Bei dem Projekt ist eine CPU 315 im Einsatz, die mit dem Simatic Manager programmiert wird.

Danke :)

Hucky
 
Zuletzt bearbeitet:
Hallo, benutzt du S7 300/400 oder 1200/1500 ?
In der Classic Welt (300/400) gibt es mehrere Möglichkeiten, die meisten jedoch in AWL. Z.B so wie der von dier gezeigte Code

Code:
L DB10.DBW0
L W#16#4
OW //Oder Wort
T DB10.DBW0

Und halt mit UW FE hex fürs Löschen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Bit in Deinem Datenwort kannst Du genauso zuweisen wie jeden Merker, Eingang , Ausgang. Die Schreibweise wäre z.B: = DB10.DBX0.5. Das funktioniert auch fehlerfrei in FUP oder KOP. Allerdings gilt es zu beachten, dass sich bei einem absoluten Zugriff auf DB-Adressen die Adressen verschieben, wenn etwas vor der entsprechenden Adresse in den DB eingefügt wird.
 
@TP-Inc
Hi
Ich habe das jetzt folgendermaßen gemacht - funktioniert aber nicht ?! Zumindest tut sich nichts wenn ich DB10.DBW0 in einer Variablentabelle beobachte :confused:

Code:
u e0.0
l db10.dbw 0
l 2#100
ow
t db10.dbw 0

un e0.0
ldb10.dbw 0
l 2#1111111111111011
uw
t db10.dbw 0

@M-Ott
Hi
jo, sollte für meine Zwecke auch gehen - hab ich vorhin nicht dran gedacht, des Weiteren wäre das andere Beispiel für mich sehr interessant, da ich meist versuche von anderen Systemen (CPU / Mikrocontroller) abzuleiten - leider fehlt mir dazu des Öfteren die passende Syntax.


Hucky
 
Erstmal, Lade/Transferiere Befehle sind nicht VKE abhängig, das UE0.0 bringt garnichts, L/T Befehle mussen mit Sprungbefehlen ( SPB, SPBN) übersprungen werden.

Und versuch mal das ergebnis woanders hinzuschreiben, z.B. In ein Merkerwort das nicht verwendet wird. Du setzt nämlich dein DB-Wort, und in der nächsten Anweisung setzt du es wieder zurück, da der Rücksetz Befehl nicht übersprungen wird.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Hucky
Solange Du nicht in SCL programmierst, solltest Du nicht versuchen, Dir die Programmierung von woanders abzuleiten. Du hast da gerade 9 Zeilen Code programmiert und das was Du willst ist eigentlich nur
Code:
U E0.0
= DB10.DBX0.2
Der Code, den Du dafür verwendest, versteht später niemand mehr außer Dir und er frisst unnötig Speicher und Zykluszeit. Gewöhn Dir so einen Mist gar nicht erst an!
 
hast ja recht, mir geht es auch ums verstehen, bzw. wie ich manches in S5/S7 umsetzen kann ;)

Hucky
 
Nochmal eine Frage :
Warum funktioniert folgender Code:
Code:
 u e0.0
spb ein
l db10.dbw 0
l 2#1111111110111111
uw
t db10.dbw 0
spa ende
ein: l db10.dbw 0
l 2#1000000
ow
t db10.dbw 0
ende: nop 0

und der andere Code nicht ?!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@TP-Inc
Ich hatte deine Antwort überlesen.
Alles klar ! Danke ;)
So etwas ähnliches hatte ich auch mal vor Jahren bei einer S5, vlt. kann ichs mir ja jetzt mal merken :roll:
Ich mach so etwas halt zu wenig und muss mich immer erst komplett wieder rein arbeiten.

Danke nochmal :D

Hucky
 
Zurück
Oben