wo liegt meine feller?

waldy

well-know member
Beiträge
2.047
Reaktionspunkte
144
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo,
ich hätte gerne bei Ihnen eine frage,
ich bin Anfänger in SPS bereich,
udn ich lerne noch S5 und S7
wenn hätten bischen Zeit, könnten Sie sagen, wo liegt meine Feller und warum ist so es.

Das ist Programm, wo mit Wahlschalter muss Zeit an Zeitglider geendert werden mus. Das ist alles in S5 geschriebn ist.

1) in OB1
SPA PB1

2) dann habe ich DB 1 gemacht
1: KT2.2
2: KT 5.2

3) PB1

Netz1

A DB 1
UN E 0.0
L DW 1
T DW0
U E0.0
L DW 2
T DW0

Netz2

U E0.0
L DW0
SE T1
=A0.0

grüß waldemar
 
Timer

Hallo Waldemar,

der Lade- und Transferbefehl wird immer ausgeführt. Somit hast du immer den Wert von DW2 zum Starten des Timers. Du musst das DW0 bedingt beschreiben.

MfG
André Räppel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
danke für antwort und brauche weitere hilfe

hallo vielen Dank für deine Antwort,
ich möchte dich bitten, kannst du bitte es noch in AWL für mich zu schreiben, weil ich bin noch nur "jünger " Anfänger

grüß waldemar
 
Code:
      AUF   DB     1

      L DW 1 

      UN    E      0.0
      SPB   M001

      L DW 2 

M001: NOP   0
      T DW0 



      L DW0 
      U     E      0.1
      SE    T      1
      U     T      1                    //muss meiner meinung rein, zumindest bei S7
      =     A      0.0
 
gibt s dafür ein paar gute bücher

hallo, danke für antwort, ich hätte gerne auch noch wiessen, ob gibt s dafür ein paar gutes bucher, wo steht gutes beschreibung über datenbaustein, weil mit datenbaustein komme noch nicht klar
oder internet seite als PFD datei

gruß waldemar
 
Zuviel Werbung?
-> Hier kostenlos registrieren
S5 oder S7

hallo ,
habe noch mal nachgesehen diese Lösung
ist diese ausruf
auf DB1
in Programmier sprache S7 oder S5
weil es siet so aus, das von S7
weil in s5 siet so aus
A DB1

oder denke ich Falsch?

gruß waldy
 
Hallo waldy

Das ist richtig!
In S5 heisst der Befehl: A DB1
In S7 heisst der Befehl: AUF DB1


Es gibt noch weitere Unterschiede zwischen S5 und S7

Adressierung:
S5 (Wortweise Adressierung)
DW0 -> besteht aus DL0 und DR0
DW1
DW2
DW3

S7 (Byteweise Adressierung)
DBB0
DBB1
DBB2
DBB3

Zugriff:
S5
A DB1
L DW0
T DW1

S7
Variante 1 (wie in S5)
AUF DB1
L DBW0
T DBW2

Variante 2 (vollqualifizierter Zugriff absolut)
L DB1.DBW0
T DB1.DBW2

Variante 3 (vollqualifizierter Zugriff symbolisch)
L "DB_Name".Symbolname1
T "DB_Name".Symbolname2
 
Hallo Waldy,

dann muss man noch beachten, dass man in
STEP5 in einem Programmbaustein (PB) keine
Sprung-Befehle schreiben kann.
Deshalb muss das Beispiel in STEP5 in einen
Funktionsbaustein (FB)geschrieben werden.

und noch ein kleiner Unterschied S7 <--> S5
bei STEP5 muss vor die Sprungmarke ein ' = '
also : SPB =M001&

Frage :
War das Anlegen des Datenbausteins DB1 ein Teil
einer Aufgabe, oder hast Du das so gelöst ?
Man könnte z.B. auch abhängig vom Wahlschalter einen
Zeitwert in ein Merkerwort schreiben und dann die Zeit
starten.

Viel Spass und Erfolg weiterhin

mfg.

Rolf
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wieder läuft nicht

hallo Leute,
Danke alle zusammen für Ihre Hilfe,
ich habe Ihre alle Bemerkungen gemerkt und habe noch mal meine Programme noch mal geschrieben zu versuchen, es siet so aus.
Mit CPU 103 und PG von Siemens


Das ist Programm, wo mit Wahlschalter muss mit 2 verschiedene Zeiten an Zeitglider geendert werden mus. Das ist alles in S5 geschriebn ist.
Impuls für T1 kommt auf E0.0, Signal von wahlschalter auf E1.1 . Die zwei Zeiten: UN 1.1 zeit 1 Sek.; U E 1.1 - 5 Sek

1) in OB1
SPA PB1 -sprung PB1
SPA FB1 -sprung FB1
----------------------------------------------------
2) dann habe ich DB 1 gemacht

1: KT1.2 - 1Sekunder Zeit
2: KT 5.2 - 5Sekund
----------------------------------------------------
3) PB1

Netz1

A DB 1 -rufe DB auf

U E0.0 -Impulsstart für Zeitglider SE
L DW0 -lade zeitwerte aus DW0
SE T1

U T1
=A0.0

--------------------------------------------------------

4) FB1

Name hhhhh


A DB1

UN E1.1
SPB =M001

U E1.1
SPB=M002


M001:L DW1
T DW0

M002: L DW2
T DW0




also habe ausprobiert und weiss nicht warum, es ladet nur DW1, nichts anderes,

und ich möchte Ise bitten, bei Hilfe könnten Sie bitte volständige Lösung zu schreiben

gruß waldemar
 
Re: wieder läuft nicht

Hallo Waldy,

ich denke ins DW0 wird immer DW2 geladen und nicht DW1, oder? ;)
Du musst nach Deinem Sprung M001 die Anweisungen mit einem BEA (Bausteinende absolut) beenden, sonst wird immer der Anweisungsteil hinter M002 abgearbeitet.

Ändere Deinen Funktionsbaustein (FB) wie folgt ab:

waldy schrieb:
FB1
Name hhhhh

A DB1

UN E1.1
SPB =M001

U E1.1
SPB =M002

M001:L DW1
T DW0
BEA

M002: L DW2
T DW0
BE

Den Anweisungsteil kannst Du danach noch optimieren. Wir laden generell das DW1 ausser wenn E1.1 = "1" ist, dann springen wir über die Sprungmarke M001 und laden DW2 ins DW0. Der Transferbefehl brauchen wir nur einmal.

waldy schrieb:
FB1
Name hhhhh

A DB1

U E1.1
SPB =M001

L DW1
SPA =M002

M001: L DW2
M002: T DW0
BE

Greetz GonZO ;)
 
wie immer , eine Frage

hallo, zusammen,wie immer - Danke für antwort
erlich gesagt, bei diesem Forum habe ich viles Info bekommen, als ich die Bücher gelesen habe.
Weil nicht in jedem Buch steht klares Beschreibung über jedes Funktions.

Und wie imer habe ich ein paar Frage:)

1) " ich denke ins DW0 wird immer DW2 geladen und nicht DW1, oder"-ich habe gedacht oder richtig gesagt jetzt, ich weiss nicht, wie läuft Ablauf in FB

wenn habe ich geschrieben
"UN E1.1
SPB =M001

dann denke ich, das nur M001 wird ausgefürt, und M002 nicht, weil E1.1 ist "0" und es muss nur nach M001 springen und M002 soll nicht ausgefürt werden.
könnten Sie bitte erklären, wie läft richtige ablauf .

2) bei zweiten Beispiel ist nur einmal Transferbefehl ausgefürt wurde. nur die Frage. Diese Beispil pass zum bei nur bei zwei Position, und wenn brauche mehr (z.B. 4 schaltpunkten) - wie muss ich dann machen / realisieren

gruß waldemar
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Waldy,

zuerst zu Deiner Frage: "wie läuft Ablauf in FB wenn habe ich geschrieben UN E1.1 SPB =M001"

Wenn der E1.1 = "0" ist dann wird der FB folgendermassen durchlaufen:
Code:
FB1 
Name hhhhh 

A DB1 

UN E1.1              ; Wenn E1.1 = '0' ist, dann
SPB =M001            ; springe zur Marke M001

M001:L DW1           ; Lade das DW1
T DW0                ; Transferiere ins DW0
BEA                  ; Bausteinende Absolut
Wenn der E1.1 = "1" ist, dann wird der FB folgendermassen durchlaufen:
Code:
FB1 
Name hhhhh 

A DB1 

UN E1.1              ; Wenn E1.1 = '0' ist, dann
SPB =M001            ; springe zur Marke M001

U E1.1               ; Wenn E1.1 = '1' ist, dann
SPB =M002            ; springe zur Marke M002

M002: L DW2          ; Lade das DW2
T DW0                ; Transferiere ins DW0
BE                   ; Bausteinende

Zu Deiner zweiten Frage: "Bei zweiten Beispiel ist nur einmal Transferbefehl ausgefürt wurde. nur die Frage. Diese Beispiel pass zum bei nur bei zwei Position, und wenn brauche mehr (z.B. 4 schaltpunkten) - wie muss ich dann machen / realisieren

Ganz einfach (Schalter mit 4 Stellungen über E1.1/E1.2)":
Code:
Schalterstellung '1'    E1.2 =' 0' + E1.1 = '0'      DB1/DW1
Schalterstellung '2'    E1.2 =' 0' + E1.1 = '1'      DB1/DW2
Schalterstellung '3'    E1.2 =' 1' + E1.1 = '0'      DB1/DW3
Schalterstellung '4'    E1.2 =' 1' + E1.1 = '1'      DB1/DW4
Code:
FB1 
Name hhhhh 

A DB1 

U E1.1              ; Schalterstellung '4' eingestellt ?
U E1.2
L DW4               ; Lade DW4
SPB =M001       

UN E1.1             ; Schalterstellung '3' eingestellt ?
U  E1.2
L DW3               ; Lade DW3
SPB =M001

U  E1.1             ; Schalterstellung '2' eingestellt ?
UN E1.2
L DW2               ; Lade DW2
SPB =M001

                    ; Wenn nichts zutrifft ist Schalterstellung '1' eingestellt !
L DW1               ; Lade DW1
M001: T DW0         ; Transferiere ins DW0
BE

Greetz GonZO ;)
 
frage über kleinichkeit

hallo Greetz!
eigentlich bei Dir mit 4 Schaltpunkten finde ich ganz gut,
weil ich habe in ganz andere Richtung ausgedacht z.B.

U E0.0
SPB=M001

U E0.1
SPB=M002

E E0.2
SPB=M003

U E0.3
SPB=M004


M001:L DW1
T DW0
BEA

M002:L DW2
T DW0
BEA

M003: L DW3
T DW0
BEA

M004:LDW4
T DW0
BE

wie meinst Du, ist das richtig bei mir vorgestelt diese Programm?

also, habe heute "BEA" in meine alte rogramm nachgeschrieben und die läuft jetzt richtig, dann habe mit deine optimierente Programm ausprobiert- funktionier ohne Problem!!!

und wie immer habe noch ein paar Frage:

1) wenn schreibe ich neue DB in Programmiergerät und da kommt zuerst "0"
ich wolte es mit Leertaste igninorieren, aber geht nicht, ich solte zuerst z.B. eine null rein schreiben und dann Programme abgespielt, habe dann noch mal rein in DB gekommen, und diese null position war Weg, nur ab1 DW, warum ist es?

2) noch eine frage, z.B. ich schreibe in programm
U E1.1
S M1

und wenn jetzt schreiben ich z.B.
U E0.0
SPA=M001

die Frage: sind das gleiche Märker oder das ist verschiede Merker mit verschiedene Funktion?

3) früher habe ich gedacht, wenn schreibe ich in FB:
U E0.0
SPB=M001
U E1.1
SPB=M002

M001:L DW1
M002:L DW2

also, wenn E0.0 ist 1, dann solte nur Sprung M001 aktivvieren und M002 solte unaktiviert bleiben, tja Falsche gedanke bei mir.
Kannst du mitte sagen, warum M002 wird ausgeführt, obwohl hat keine Befehl von SPB=M002.

gruß waldy
 
Hi Waldy,

Bravo :lol: Du hast es verstanden. An Deinem Programm-Code gibt es nicht's zu korrigieren. Bestenfalls noch optimieren. Aber das kommt mit der Zeit.

Code:
U E0.0 
SPB=M001 

U E0.1 
SPB=M002 

E E0.2 
SPB=M003 

U E0.3 
SPB=M004 


M001:L DW1 
T DW0 
BEA 

M002:L DW2 
T DW0 
BEA 

M003: L DW3 
T DW0 
BEA 

M004:LDW4 
T DW0 
BE

Zu Deiner Frage:
noch eine frage, z.B. ich schreibe in programm
U E1.1
S M1
und wenn jetzt schreiben ich z.B.
U E0.0
SPA=M001
die Frage: sind das gleiche Märker oder das ist verschiede Merker mit verschiedene Funktion?
Das sind zwei grundverschiedene Funktionen.
Bei dem einen handelt sich um einen Merker (z.B. M1.0 -> M x.y x Byteadresse y Bit). Dieser dient zur Speicherung eines Signalzustandes.

Das andere wird Marke oder auch Label (=M001) genannt. Diese wird verwendet bestimmte Adressen im Programmspeicher zu markieren und den Programmcode über Sprungbefehle an diesen Adressen fortzusetzen. Die Marke muss nicht unbedingt M001 heissen. Man kann auch eine beliebige 4-stellige Buchstaben/Zahlen Kombination bilden.

z.B.
U E0.0
SPB =TST1

U E1.0
SPB =TST2

Nachteil ist aber, das beim Auslesen des Programmes aus dem AG Speicher die Buchstaben/Zahlen verloren gehen und durch die altbekannten Marken/Labels M001 M002 etc. ersetzt werden.

Zu Deiner Frage:
U E0.0
SPB=M001
U E1.1
SPB=M002

M001:L DW1
M002:L DW2

also, wenn E0.0 ist 1, dann solte nur Sprung M001 aktivvieren und M002 solte unaktiviert bleiben, tja Falsche gedanke bei mir.
Kannst du mitte sagen, warum M002 wird ausgeführt, obwohl hat keine Befehl von SPB=M002.

Zum Verständnis sei dazu gesagt, das Lade- und Transferbefehle keinerlei Auswirkungen auf das Verknüpfungsergebnis haben.
Ich möchte dies in Deinem Beispiel verdeutlichen und dazu den VKE und den AKKU1 mitbetrachten.
Ich gehe in Deinem Beispiel davon aus das der E0.0 = "1" ist. Im DW1 steht 2005 im DW2 steht 2001.
Du kannst erkennen das immer DW2 ins DW0 übertragen wird.
Code:
Anweisung            VKE       AKKU1
U E0.0                1        0000 
SPB=M001              1        0000
U E1.1 
SPB=M002 

M001:L DW1            1        2005
M002:L DW2            1        2001
T DW0                 1        2001
Im nächsten Beispiel gehe ich davon aus das der E1.1 = "1" ist.
In diesem Fall würde das Programm trotz des Fehlers korrekt ablaufen.

Code:
Anweisung            VKE       AKKU1
U E0.0                0        0000 
SPB=M001              0        0000
U E1.1                1        0000
SPB=M002              1        0000

M001:L DW1                              
M002:L DW2            1        2001
T DW0                 1        2001

Ich hoffe ich konnte Deine Fragen soweit es geht beantworten.

Greetz GonZO ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
es ist geschaft

hallo alle zusammen,
ich möchte vielen Dank sagen an alle, Ihre Antworten hat mir gut geholfen und jetzt es klappt bei mir gut (na ja , bis Profi mir noch zu lange weg machen muss man, aber hauptsache es klappt bei mir)

gruß waldy
 
...Bestenfalls noch optimieren. Aber das kommt mit der Zeit.

Code:
L DW 1
U E0.0 
SPB=M001 
L DW2 
U E0.1 
SPB=M001 
L DW 3
E E0.2 
SPB=M001 
L DW 4
U E0.3 
SPB=M001
BEA

T DW0 
BE
[code]
[/quote]
ist eine Optimierung auf kurzen Code. Die Ausführungszeit ist allerdings für E0.3 (4 x laden) ein bisschen länger als für E0.0 (1 x laden). Für die Praxis ist manchmal auch noch interessant, was passiert wenn mehr als ein Eingang gleichzeitig  1 ist. Hier hat E0.0 Vorrang, wahrscheinlich ohne dass das ausdrücklich gewollt ist
 
kleine korrektiur

hallo alle zusammen,
also, wenn habe ich richtig DB gelernt, dann in lätzte vorschlag würde ich kleine korrektur machen,
z.B.:

ich denke so muss sein

L DW 1 L DW 1
U E0.0 U E0.0
SPB=M001 SPB=M001
L DW2 L DW 2
U E0.1 U E0.1
SPB=M001 SPB=M001
L DW 3 L DW 3
E E0.2 U E0.2
SPB=M001 SPB=M001
L DW 4 L DW4
U E0.3 ich denke, das diese sätze brauchen wir nicht,
SPB=M001 es wird sowieso geladen
BEA

T DW0 M001: T DW0
BE BE
Code:
rechts steht meine vorschlag

kann sein, dass ich auch ein paar feller habe

gruß waldy :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
widerholung

hallo, da oben habe ich etwas nicht richtig gemacht, deswegen schreibe ich noch mal,
ich denke so muss Programme nach korrektierung aussehen

L DW 1
U E0.0
SPB=M001
L DW 2
U E0.1
SPB=M001
L DW 3
U E0.2
SPB=M001
L DW4


M001: T DW0
BE




gruß waldy
 
DB1 ???

Hi waldy
ich habe lange Zeit mit S5 nicht gearbeitet. aber habe ich in Erinnerung dass
bei S5 DB1 ist ein Systemdatenbaustein, und nur mit Vorsicht zum Genießen.
Herby
 
ich mache nur erfahrung

hallo herby,
danke für antwort,
na ja, über mich kann ich noch nicht so viel erzähle, ich begienne nur SPS lernen, und wenn darf ich fragen, wie weit bist du schon gekommen.
ich interesiere mich noch weiter in S7.
z.B. ich weiss nicht, wie kann man mit Analogbaugruppe spannung am eingang messen und bearbeiten

gruß waldy
 
Zurück
Oben