Step 7 Lauflicht programmieren .... mit S7-200

AndyKa

Level-1
Beiträge
9
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallohallo liebes Team :)


wieder einmal stehe ich an .... - die Hilfedatei bzw PDF ist mir momentan keine Hilfe, drum schreibe ich hier :)

mein Anliegen :

ich spiele mich momentan mit den Grundfunktionen herum und blicke nicht dahinter - Ziel soll sein mit einem Schieberegister ein, z.B. Byte zu definieren, welches in einem definierten Takt weiter geschoben wird -
also Byte 00000000 - Start mit einem eingeschobenem Bit, und mit jedem Takt soll es geschoben werden ...
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
und schiebt es wieder am Anfang :
00000001
usw


Ok, Schieberegister SHL oder SHR ist mir klar ... Takt ist auch kein Problem ... um 1 weiterschieben behirne ich glaub ich auch - nur, wie greife ich darauf zu ?
Wenn ich den MB1 als Ausgang definiert habe, wie definiere ich pro stelle nen Ausgang ? ... - es soll ja dann der LSB (Stelle ganz rechts) beim A0.0 leuchten, MSB (Stelle ganz links) beim A0.7 (hypothetisch).

ist das dann MB1.0 und MB1.1 usw für die Bit-Stelle ? .... klapt irgendwie leider nicht so ....

habt Ihr vielleicht eine kleine Gedankenhilfe für mich ? .... bin leider mit der S7-200 recht neu erst unterwegs, und kenne leider nur die LOGO ...



danke vorab für Eure Hilfe :)

Andy
 
Die Ausgangs-Bits A0.0 bis A0.7 bilden gleichzeitig das Ausgangsbyte AB0, genau wie die Merkerbits M1.0 bis M1.7 das Merkerbyte MB1 bilden
Wenn Du also das Merkerbyte MB1 auf das Ausgangsbyte AB0 überträgst, übernehmen die einzelnen Ausgangsbits den Zustand der zum MB1 gehörenden Bits.

Das bedeutet, nachdem Du Dein MB1 geschoben hast, den neuen Zustand auf das AB0 übertragen:
Code:
[FONT=Courier New]LD     Immer_ein:SM0.0
MOVB   MB1, AB0[/FONT]

Oder gleich das AB0 schieben (ungetestet):
Code:
[FONT=Courier New]LD     E0.0
LPS
U      Takt_1s:SM0.5
EU
SLB    AB0, 1
LRD
UB=    AB0, 0
MOVB   1, AB0
LPP
NOT
MOVB   0, AB0[/FONT]





PS: Ich liebe es, das man bei der S7-200 auch in KOP/FUP auch mit nur einem Byte rechnen, schieben, vergleichen usw. kann.
:cool:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke -- nur 2 Fragen noch :

das Byte hat ja 8 Bit - aber die S7-200 Standart nur 6 Ausgänge - also A0.0 bis A0.5 - was passiert mit A0.6 und A0.7 beim AB0 Byte ? ... gibts dann dunkelphasen beim "Schieben = leuchten" ? .... - sorry, kanns erst morgen testen bis ich wieder zur SPS kann :) ...

bzw., Frage 2 .... wo gibt es sinnvolle Beschreibungen zu diesen Funktionen ? :

Eingang_001.jpg


lieben Dak für Dein Bemühen

Andy
 
.... bin grad so schön drinnen :) ....

stimmt das ? - ein "richtiges" Lauflicht ... - läuft links - rechts - links - rechts ......

Code:
Network 1 // 2 Sekunden Timer
LDN    T36
TON    T36, +200

Network 2 
LDW<=  T36, +100
=      M0.0

Network 3 //
LD     E0.0
LPS
U      M0.0
EU
UN     M2.1
SLB    AB0, 1
LRD
U      M0.0
EU
UN     M2.0
SRB    AB0, 1
LRD
UB=    AB0, 0
MOVB   1, AB0
LPP
NOT
MOVB   0, AB0

Network 4 // Rauf
LD     SM1.1
LDB=   AB0, 0
NOT
U      M2.0
OLD
=      M2.0

Network 5 // Runter 
LDB=   AB0, 0
LDB=   AB0, 7
NOT
U      M2.1
OLD
=      M2.1


oder liege ich da total falsch ??
 
Meine hat alle 8 Ausgänge, also A0.0 bis A0.7.
:p

Wenn Du Lampen nicht anschließen kannst, weil es keine realen Ausgänge gibt, werden diese auch nicht leuchten.
:p :p

Das Programm prüft nicht, ob alle Ausgänge auch wirklich vorhanden sind. Für die Arbeitsweise des Programms spielt das ja auch nicht wirklich 'ne Rolle. Nur die Übertragung der berechneten neuen Zustände auf die realen Ausgänge ist in diesem Fall nicht möglich.
Willst Du die dadurch entstehenden Dunkelphasen vermeiden, mußt Du das Programm entsprechend anpassen und das Bit x.0 eher wieder setzen.


Alle Befehle, die in dieser Shortlist aufgeführt sind, findet man auch im linken Baum unter Operationen. Dort anklicken (oder auf die im Programm eingefügte Operation) und dann auf F1 (oder über das Kontextmenü) -> die Hilfe hilft!
:cool:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
habe leider nur die CPU 222 ... die hat nur 6 Ausgänge ... aber, ich denke soweit hab ich jetzt kein Problem das Byte bei 5 auf 0 zu setzen :)

und die Hilfe ist recht gut und schön, aber man muss sich doch auch einiges erarbeiten bei der Hilfe, weil dann doch nicht alles drinnen steht .... wär schö eine Gesamtübersicht zu haben von den Zuweisungen ....
 
Ich würd's so lösen:
Code:
[FONT=Courier New]Network 1 //  2 Sekunden Timer
LDN    T37
TON    T37, +20

Network 2 // Lauflicht
LD     E0.0
LPS
U      T37
LPS
U      M0.0
SLB    AB0, 1
LPP
UN     M0.0
SRB    AB0, 1
LPP
LPS
UB=    AB0, 0
MOVB   1, AB0
LPP
NOT
MOVB   0, AB0

Network 3 //  Richtung
LD     A0.0
LD     A0.7
NOT
U      M0.0
OLD
=      M0.0[/FONT]
Du hast 2 Richtungen und ein Bit hat 2 Zustände. Es reicht also eins, um die Richtung festzulegen.

Dein Timer ist immer nach 2 Sekunden nur genau einen Zyklus wahr. Ist doch ideal, um genau dann die Bits zu schieben.
Mit dem Timerwert-Vergleich hast Du ein Bit, das immer eine Sekunde und damit mehrere Zyklen lang wahr ist. Deshalb benötigst Du dabei eine Flankenauswertung, damit nur im ersten Zyklus nach dem Wahr-Werden geschoben wird.
Nachteil erkannt?

Die Statusbits (SMB1) müssen immer direkt nach der Schiebeoperation (oder welche Operation man überwachen will) ausgewertet werden. Erfolgen noch Opertionen dazwischen, verändern diese auch wieder die Statusbits.

Ist hier aber auch gar nicht nötig, diese auszuwerten. Ich geh' mal davon aus, Du erkennst bei mir, wann die Richtung geändert werden muss? Es sei denn, die äußeren Bits sollen immer die doppelte Zeit leuchten (1x für hin, 1x für zurück).

Die Timerauflösung würde ich nur so genau, wie unbedingt nötig auswählen. Von denen mit 10ms Auflösung hast Du nur 8 und mit 1ms sogar nur 2 zur Verfügung. Wenn man sich das Quasen gar nicht erst angewöhnt, braucht man es sich auch nicht wieder ab zu gewöhnen.
 
habe leider nur die CPU 222 ... die hat nur 6 Ausgänge ... aber, ich denke soweit hab ich jetzt kein Problem das Byte bei 5 auf 0 zu setzen :)
5 so oder so nicht! Sondern bei meinem ersten Beispiel 2#01000000 = ?
Und auf 0 auch nicht!
;)



und die Hilfe ist recht gut und schön, aber man muss sich doch auch einiges erarbeiten bei der Hilfe, weil dann doch nicht alles drinnen steht .... wär schö eine Gesamtübersicht zu haben von den Zuweisungen ....
Du kannst Dir zwar das Handbuch von Siemens runterladen, aber im Wesentlichen entspricht es der Hilfe. Nur in dem Ausgedruckten blättert es sich besser.
Und ich persönlich finde die Hilfe von MicroWin um einiges verständlicher als die von Step 7. Vor allem die Beispiele unter den Beschreibungen (noch dazu in allen 3 Sprachen) fand' und find' ich oft sehr hilfreich. Die sind mir am Anfang gar nicht so aufgefallen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ohhh - Denkfehler :)

es muss natürlich der Bytewert sein :) .... also in meinem Fall fürs erkennen des siebenten Ausgangs natürlich als Dezimalwert : 64 !!!! ... und dann 1 zuweisen :)
aber deine Lösung gefällt mir weit besser :)
und vielen Dank bzgl. der hilfreichen Tips zum Umsetzen ... - das mit den 1ms, 10ms und 100ms hatte ich gesehen ... aber nicht so beachtet :) .... lieben Danke ...

werde deine Infos beherzigen :)
 
Zuletzt bearbeitet:
Zurück
Oben