Analogausgang ansteuern mit 2 Tastern

Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn man keine Ahnung vom speziellen S7-200-AWL und vom S7-200-VKE-Stack hat, dann sollt man besser nicht versuchen, in AWL zu programmieren. Dann ist es angebracht, zunächst nur in der FUP- oder KOP-Ansicht zu programmieren, sich dann die AWL-Ansicht des erzeugten Codes anzusehen und daraus zu lernen. (Das gilt auch für diejenigen, die helfen wollen - "einfach mal die Fresse halten" ;)).

Hier ein paar Grundsätze des S7-200-AWL:
  • Fast alle Befehle sind VKE-abhängig, auch MOVx. MOVx müssen nicht übersprungen werden.
  • Jede NEUE Verknüpfung muß mit LD.. beginnen, U.. und O.. verknüpfen nur das schon bestehende VKE weiter. Auch nach einer Zuweisung!
    Folgt nach einer Zuweisung (= S R) ein U.. oder O.., dann wird KEINE neue Verknüpfung begonnen, sondern die vorherige fortgesetzt (das VKE der Zuweisung wird weiter-verknüpft)
  • Mehrere LD.. nacheinander machen keinen Sinn, wenn nicht danach ein ULD oder OLD kommt.
    Jedes LD.. beginnt einen neuen Verknüpfungszweig, die Zweige müssen irgendwann auch zusammengeführt werden (mit OLD oder ULD). Wenn nicht, dann wird nur der letzte Zweig beachtet, die vorherigen sind überflüssig.


Zu den Codestücken von Detto:
Die Taster-Eingänge E2.0 und E2.1 KEINEN Einfluß auf die Timer T39 und T40, weil nacheinander LD und LDN benutzt werden, das erste LD wird aber nicht beachtet. T39 und T40 sind nur von E0.0 abhängig, laufen also beide synchron, egal welchen Zustand die Taster haben.

Wenn bei diesem Code
Code:
UW<=   MW12, 32000 
+I     +100, MW12
MOVW   MW12, AAW4
das MW12 im Bereich 32001 .. 32767 ist, dann wird das +I und das MOVW NICHT ausgeführt.
Wenn das MW12 nicht noch anderswo beschrieben wird, dann kann AAW4 nur maximal 32100 werden.
AAW4 könnte aber auch negativ werden (-32768 .. -1), weil UW<= das Vorzeichen in MW12 auswertet.


Die Ansteuerung und Begrenzung des Ausgangs auf 6400 ... 32000 könnte man z.B. so machen:
Code:
// inc
LD     E2.0                        // Taster Stellung PLUS
UN     T39                         // Taktgeber
...
+I     +100, MW12

// dec
LD     E2.1                        // Taster Stellung MINUS
UN     T40                         // Taktgeber
...
-I     +100, MW12

// auf 6400 .. 32000 begrenzen und Ausgabe
LD     SM0.0
LPS
UW>    MW12, 32000
MOVW   32000, MW12
LRD
UW<    MW12, 6400
MOVW   6400, MW12
LPP
MOVW   MW12, AQW4

Harald
 
Das Hoch-/Runterzählen mit Autorepeat würde ich etwa so machen (habe es aber nicht getestet):
Code:
// inc mit Auto-Repeat
LD     E2.0                        // Taster Stellung PLUS
U      E0.0
LPS
EU
=      M3.4                        // Beginn Tastendruck
LRD
UN     T39
TON    T39, 4                      // Repeat-Takt
LPP
LD     M3.4                        // Beginn Tastendruck
O      T39                         // Repeat
ULD
+I     100, MW12

// dec mit Auto-Repeat
LD     E2.1                        // Taster Stellung MINUS
U      E0.0
LPS
EU
=      M3.5                        // Beginn Tastendruck
LRD
UN     T40
TON    T40, 4                      // Repeat-Takt
LPP
LD     M3.5                        // Beginn Tastendruck
O      T40                         // Repeat
ULD
-I     100, MW12

// auf 6400 .. 32000 begrenzen und Ausgabe
LD     SM0.0
LPS
UW>    MW12, 32000
MOVW   32000, MW12
LRD
UW<    MW12, 6400
MOVW   6400, MW12
LPP
MOVW   MW12, AQW4

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,
Du hast föllig recht. Normalerweise programmiere ich in KOP.
Dabei sollte ich auch bleiben und keine Tips geben über Sachen wo ich keine Ahnung von habe.
Leider hatte ich keine CPU zur Hand um mein Programm zu überprüfen.
 
Wenn man keine Ahnung vom speziellen S7-200-AWL und vom S7-200-VKE-Stack hat, dann sollt man besser nicht versuchen, in AWL zu programmieren. Dann ist es angebracht, zunächst nur in der FUP- oder KOP-Ansicht zu programmieren, sich dann die AWL-Ansicht des erzeugten Codes anzusehen und daraus zu lernen. (Das gilt auch für diejenigen, die helfen wollen - "einfach mal die Fresse halten" ;)).
Harald

Hallo Harald,

vielen Dank für die Tipps.
Allerdings kann man im Buch von Habermann "Step7-Crashkurs" folgendes auf Seite 47 nachlesen:"nachdem das VKE zugewiesen worden ist, wird das VKE begrenz und es kann eine neue Verknüpfung begonnen werden.
VKE-begrenzende Befehle sind z.B. Zuweisungen (= A0.0, =M0.0)

ZITAT ENDE
So bin ich auch erst einmal an meine Programmierung herangegangen.
Der zweite LD Befehl (LDN) kam daher, dass ich den Quellcode hier aus dem Forum übernommen habe, habe ihn in der Zwischenzeit in ein UN umgewandelt.
Das aber nur am Rande, denn meine Frage geht auf Deine Aussage "speziellen S7-200 AWL" hin:

In wiefern hat die 200er eine spez. AWL. Denn im angesprochenen Buch wird auch folgender Code als "Klammerbefehl" angegeben:
Code:
U(
O E0.1
O E0.2
)
U E0.3
= A0.0
Was für mich bedeuten würde E0.3 und einer der beiden Eingänge 0.1 oder 0.2
weisen den Ausgang A0.0 den Wert "1" zu.

Wenn ich das aber so in meine Step7 eingebe, erhalte ich eine Syntax Fehlermeldung
Das Buch von Habermann ist für die 300er ausgelegt, ich bin aber davon ausgegangen, dass solche "Grundlagen" für jede S7 zutreffen.

Gilt das mal wieder NICHT für die S7-200??

Danke für die kurze Info.

Detto
 
Hallo,

S7-200 --> Microwin ( AWL nicht direkt mit Step 7 vergleichbar. (Irgendwo aufgekauft von Siemens, daher andere Oberfläche/Editor/Befehle))

S7-300 / 400 -->Step 7 ( AWL wie in deinem Handbuch)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

S7-200 --> Microwin ( AWL nicht direkt mit Step 7 vergleichbar. (Irgendwo aufgekauft von Siemens, daher andere Oberfläche/Editor/Befehle))

S7-300 / 400 -->Step 7 ( AWL wie in deinem Handbuch)

... und wieder ist das ein AUGENBLICK wo ich bereue, dass ich mich nicht HIER zuerst schlau gemacht habe!!!
icon8.png


und das am MONTAG VORMITTAG **grrrr**

Danke für die Info.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
OK, die 200er ist halt etwas anders. Aber eigentlich muss man doch nur die "Vokabeln" der Sprache beherrschen. Der Rest ist Logik :)

JA ABER:

Es nervt schon, wenn man im Buch :

U(
O xyz
O xyz
)

liest und es auch LOGISCH VERSTEHT
icon6.png
icon6.png
icon6.png


dann aber dieser Maschine doch gewinnt, weil sie einfach sacht: kenn ich nit mach ich nit!!!!!!!!!!!
icon8.png
icon8.png


Aber der Mensch kann ja um 3 Ecken denken (zumindest viele) und man findet wieder einen Weg, der S7 das dann doch beizubringen

@ Verpolt: Danke für den LINK, das Dokument habe ich selbstredend, nur sind da in meinen Augen viele Dinge sehr genau erklärt, andere wiederum nur oberflächlich oder nicht so einfach verständlich (zumindest für mich)
Trotzdem DANKE

Detto
 
Zuletzt bearbeitet:
Hiiiiiiiiiiiiiiiiilfe ich verzweifle....

...ich weiß schon, warum ich kein Programmierer geworden bin - Computer und STEUERUNGEN mögen mich nicht!!!!!!!!!!
icon8.png


Also ich versuche gerade einen Analog EINGANG auf meinem TP zu signalisieren.
AUSGÄNGE (analog) habe ich über Merkerworte dargestellt, da das mit dem direkten Ausgangswert z.B. AAW6 irgendwie nciht funktioniert hat.
Ich habe dann einfach das dazugehörige MW genommen und siehe da es klappte.

So jetzt wollte ich meine analogen Prozessdaten darstellen.
Also 1. Test man nehme einen Wert und schiebe den ins Merkerwort


MOVW +19200, MW20

Das klappt wunderbar.
Jetzt das ganze mit den Prozessdaten, dazu einen mA Geber an den AEW geklemmt. Die Reihenfolge ist CPU 224XP (sind ja AEW0 und AEW2)
Daneben sitzt das erste EM231 Modul und das hat ja AEW4 bis AEW10. Auch schön die Brücke zw A+ und RA eingebaut und mit Messgerät
den Strom REAL gemessen (der fließt, logo is ja Realwelt)

Dann pfiffig wie ich bin geschrieben:

MOVW AEW4, MW20

Das sollte doch bedeuten, dass (so steht es in der Anleitung) das Wort von AEW4 in das Wort MW20 übertragen wird OHNE den Wert zu ändern.

Quizfrage: WAS mache ich schon wieder falsch?

Achso Nebenbei: Schalter 1 bis 3 des EM231 ON, ON, OFF wie im Handbuch vermerkt für 4 - 20mA

Detto
 
Tach auch,

bin einen Schritt weiter.
Ich habe mich so schwach daran erinnert, das Analogeingänge nicht in das Prozessabbild übernommen werden.
Dann habe ich einfach mal folgenden Code verwendet

Code:
LDW>   AEW4, 6400
MOVW   AEW4, MW18

und siehe da der analoge Wert wird eingelesen und an das MW18 übergeben - soweit einen Schritt weiter.
Allerdings passt der Zahlenbereich nicht.

Ich gebe direkt 20mA in die EM231 und der Eingang liefert nur 16.000 als Wert.
Daraufhin noch einmal das Handbuch zur Hand genommen, die Schalter 1 bis 3 verglichen:
EIN - EIN - AUS
Nur um gaaaaar keine Missverständnisse aufkommen zu lassen Die weißen Dips sind "oben" (weg von der Platine) und
auf dem roten DIP Gehäuse ist ein Pfeil nach OBEN mit der Bezeichnung ON,
von daher gehe ich davon aus, dass wenn die Dips OBEN sind das ON bedeutet.

Dann hatte ich die Vermutung, dass das GAIN Poti verstellt ist....
Fehlanzeige bekomme nur Werte zw 15.000 und 18.000 hingekurbelt.

Jetzt geht meine Vermutung dahin, das es ja 2 INTEGER Bereiche gibt, grob 0 - 32.000 und den -16.000 bis +16.000

Frage: Muss ich der CPU das irgendwo mitteilen, dass der INTEGERBEREICH 0 - 32.000 ist oder wo kann ich das einstellen.

Danke für die Hilfe

Detto

NACHTRAG: Die CPU fängt erst bei etwa 9,5 mA an überhaupt zu zählen. Unter 9,5mA bleibt der Wert konstant auf 192 (der im Handbuch angegebene "Versatz" nehme ich an)
und dann zählt der WERT erst hoch.
 
Zuletzt bearbeitet:
Zurück
Oben