B Bearbeite? Was soll das???

A

Anonymous

Guest
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo Leute!

Ich sitz hier grad vor dem Zählerprogramm und da wird gleich dreimal dieses komische B aufgeführt. Also die Bücher geben nichts so richtig her oder ich hab schlechte Bücher. Ich kann mir jedenfalls unter indizierter Bearbeitung oder Referenzierung nichts vorstellen. Was macht denn nun der Befehl B???

Teile aus dem Programm... ist ein FB

;
NAME: ZW-ERF
BEZ : DBZW B
BEZ : DWNR DKF
BEZ : Z-EI EBI
BEZ : HIBI EBI

UN =Z-EI
S =HIBI

U =HIBI
U =Z-EI
SPB =M001
BEA

M001: RB =HIBI
B =DBZW
LW =DWNR
T MW 200
B MW 200
L DW 0
L KF +1
+F
B MW 200
T DW 0
BE

Wie das ding jetzt zählt kann ich mir denken, aber das B stört mich unwahrscheinlich... was ist denn wenn ichs weglasse???

Gruß mclear
 

jogi

Well-known member
Beiträge
81
Punkte Reaktionen
0
Hi mclear,

hihi, weglassen ist auch 'ne Idee :ROFLMAO:
Im günstigsten Fall zählt er einfach nicht, im ungünstigeren, jedoch wahrscheinlicheren Fall schmiert Deine Maschine ab !

Spaß beiseite, es gibt 2 Varianten vom B - Befehl

1. B =(Bezeichnername), hier also B =DBZW

Es wird derjenige Datenbaustein geöffnet, der beim Aufruf des FB's am Bezeichner DBZW angegeben wurde.

2. die zweite Variante verbindet den B-Befehl mit dem Befehl in der folgenden Zeile.

also:

B MW200
L DW0

bedeutet: es wird mit dem L-Befehl dasjenige Datenwort in den AKKU geladen, dessen Nummer im MW200 steht.

Umgekehrt geht's natürlich auch

B MW200
T DW0

schreibt folglich den AKKU1 in das Datenwort, dessen Nummer im MW200 steht.

Gruß Jörg
 

Guido

Well-known member
Beiträge
104
Punkte Reaktionen
7
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo mclear,

Das "B" steht wie du auch schon gesehen hast für "Bearbeite" und wird für
die Indirekte Adressierung in S5 gebraucht.

Code:
NAME: ZW-ERF 
BEZ : DBZW B 
BEZ : DWNR DKF 
BEZ : Z-EI EBI 
BEZ : HIBI EBI 

UN =Z-EI 
S =HIBI 

U =HIBI 
U =Z-EI 
SPB =M001 
BEA 

M001: RB =HIBI 
B =DBZW   // Öffnet den DatenBaustein der ZählWerte
LW =DWNR  // Lädt die DatenWortNummeR in Akku 1
T MW 200  // Schreibt den Inhalt aus Akku 1 in MW 200
B MW 200  // Bearbeitet die in MW 200 stehende Adresse
L DW 0    // Lädt den Wert aus DatenWort [MW200] in Akku 1
L KF +1   // Lädt die Zahl "1" in Akku 1
+F        // Addiert Akku 1 und Akku 2
B MW 200  // Bearbeitet MW200 nochmals
T DW 0    // Schreibt das Resultat der Addition in DatenWort [MW200]
BE

Frage: Geht es sich bei diesem Problem immer noch um den Zähler der bei 65535 wieder auf "0" springt ?
http://www.sps-forum.de/phpBB2/viewtopic.php?t=1159

Gruss
Guido
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
mclear schrieb:
Hallo Leute!

Ich sitz hier grad vor dem Zählerprogramm und da wird gleich dreimal dieses komische B aufgeführt. Also die Bücher geben nichts so richtig her oder ich hab schlechte Bücher. Ich kann mir jedenfalls unter indizierter Bearbeitung oder Referenzierung nichts vorstellen. Was macht denn nun der Befehl B???
Er "ersetzt" die angegebene Adresse durch die die in dem Wort hinter B steht:

Code:
	L	KF42	// ich habe hier eine Konstante genommen, weil
				// es einfacher zu erklären ist

	T	MW 200	// MW200 enthält jetzt 42
	B	MW 200	// bei der nächsten Operation wird der Inhalt von MW 200
				// als Adresse verwendet
	L	DW 0	// nämlich hier: statt DW0 wird DW42 benutzt
	L	KF +1
	+F
	B	MW 200
	T	DW 0	// und hier auch
	BE
 

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
301
Topic Steuerung????????????????

Hi,
gilt das nur für S5? Habe ich noch nie gesehen. Und in der Topicüberschrift steht ja nichts drin :cry: .

Gruß pt
 
OP
A

Anonymous

Guest
Zuviel Werbung?
->Hier kostenlos registrieren
cool

Danke für die superschnellen Antworten! Ich bin immernoch an dem Problem mit dem Zähler bei der S5. Also mit dem komischen B verhält es sich ja fast wie mit Zeigern in C. Deshalb war da auch was von Referenz zu lesen. Waren die bei Siemens früher echt schon so schlau? Das hat ja Microsoft bei Visual Basic heute noch nicht hinbekommen... :lol:

Aber jetz nochma zum Zähler... Ich hab mir gedacht ich lade einfach den Zählwert aus dem DB und vergleiche ihn mit 0. Wenn er 0 ist dan sll ein anderes DW um 1 inkrementiert werden. Es ist also fast so wie Guido mir das vorgeschlagen hatte.

Leider funzt es nicht:

;
A DB 10
L DW 0
L KF +0
!=F
SPB =M001
BEA

M001: A DB 10
L DW 2
L KF +1
+F
T DW 2

BE

CPU geht in STOP und der USTACK sagt der Betriebsschalter wäre angeblich auf STOP geschalten. Den hab ich natürlich nicht auf STOP. Es geht solange bis der Wert erreicht ist wo um eins inkrementiert werden soll, dann wars das. Und ich weiß nicht warum???
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
Das Programm sieht korrekt aus. Bist du sicher, dass dein DB10 mindestens DREI Datenworte (DW0,DW1,DW2) hat? Datenworte werden in der S5 nicht byteweise gezählt.

Kürzere Version:
A DB 10
L DW0
L Kf0
<>f
BEB // bedingt beenden statt Ende überspringen

// Das A DB 10 must du nicht wiederholen
L DW1 // wenn du keinen besonderen Grund hast, das übernächste Wort zu nehmen...
lkf1
+F
T DW1
 
OP
A

Anonymous

Guest
Hmmm, langsam werd ich aber sauer... Eigentlich müsste es so gehen, aber jetzt schreibt er gleich garnichts mehr ins DW. Wahrscheinlich kann er BEB nicht leiden :evil:
Aber mal im ernst, er geht nicht mehr in den STOP, dafür schreibt er aber auch nicht in das Datenwort. Ich hab mir auch übelegt das ja hier noch ein ganz großer Denkfheler drin ist. Wie oft bzw. wie lange führt er denn diese Inkrementieraktion aus? Doch bestimmt so oft und lange wie DW0 0 ist. Und das kann schonmal ne halbe Stunde dauern...
Vielleicht sollte ich doch diesen FB benutzen und mir ein neues Hilfsbit suchen.
 

Guido

Well-known member
Beiträge
104
Punkte Reaktionen
7
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo mclear,

hier ein Vorschalg wie du deinen FB ändern kannst
um den Zähler auf zwei Datenwörter zu erweitern.
Code:
NAME: ZW-ERF 
BEZ : DBZW B 
BEZ : DWNR DKF 
BEZ : Z-EI EBI 
BEZ : HIBI EBI 

UN =Z-EI 
S =HIBI 

U =HIBI 
U =Z-EI 
SPB =M001 
BEA 

M001: RB =HIBI 
B =DBZW   // Öffnet den DatenBaustein der ZählWerte 
LW =DWNR  // Lädt die DatenWortNummeR in Akku 1 
T MW 200  // Schreibt den Inhalt aus Akku 1 in MW 200
L KF +1   // Lade Wert "1" in Akku 1
+F        // Addiere Akku 1 & Akku 2
T MW 202  // Legt den Neuen Wert in MW202 (Ist also ein Zeiger auf das nächste DW)

B MW 200  // Bearbeitet die in MW 200 stehende Adresse 
L DW 0    // Lädt den Wert aus DatenWort[MW200] in Akku 1 
L KF +1   // Lädt die Zahl "1" in Akku 1 
+F        // Addiert Akku 1 und Akku 2 
B MW 200  // Bearbeitet MW200 nochmals 
T DW 0    // Schreibt das Resultat der Addition in DatenWort [MW200] 

B MW 200  // Bearbeitet die in MW 200 stehende Adresse 
L DW 0    // Lädt den Wert aus DatenWort[MW200] in Akku 1 
L KF +1000
<F 
BEB

L KF +0   // Lädt die Zahl "0" in Akku 1 
B MW 200  // Bearbeitet MW200
T DW 0    // Schreibt "0" in DatenWort[MW200] 

B MW 202  // Bearbeitet die in MW 202 stehende Adresse 
L DW 0    // Lädt den Wert aus DatenWort[MW202] in Akku 1 
L KF +1   // Lädt die Zahl "1" in Akku 1 
+F        // Addiert Akku 1 & Akku 2 
B MW 202  // Bearbeitet MW202 nochmals 
T DW 0    // Schreibt das Resultat der Addition in DatenWort[MW202]
BE


OK ok....ich weiss... das sieht kompliziert aus... ist es auch ;-)
Im Beispiel wird hier das "B" sogar 7X gebraucht, aber so bleibt der FB
im ursprünglichen Style und dein Zähler ist auf zwei Datenworte aufgeteilt.
DW 'X' zählt immer von "0" bis "999" und DW 'X+1' zählt die 1000er....
Du must allerdings darauf achten dass das zweit (neue) Datenwort noch frei ist.

Gruss
Guido
 
OP
A

Anonymous

Guest
B Bearbeite

@plc_tippser,

ja, das gilt nur für die S5. Beim Konvertieren von STEP5 auf STEP7 muss man da ein bisschen Handarbeit machen.

Gruss
Question_mark
 

andre

Well-known member
Beiträge
268
Punkte Reaktionen
37
Re: cool

mclear schrieb:
Leider funzt es nicht:

;
A DB 10
L DW 0
L KF +0
!=F
SPB =M001
BEA

M001: A DB 10
L DW 2
L KF +1
+F
T DW 2

BE
Wenn ich das richtig sehe, wird das Datenwort 2 in jedem SPS-Zyklus um 1 erhöht, solange der Zähler in Datenwort 0 den Wert 0 hat. Er soll aber sicher nur einmal addiert werden? Sonst hat DW 2 in Kürze einen extrem hohen Wert. In dem Falle würde ich noch eine Sperre mit einem Merker programmieren, damit bei jedem 0 von DW 0 das DW 2 um 1 erhöht wird.
 
OP
A

Anonymous

Guest
Zuviel Werbung?
->Hier kostenlos registrieren
Vielen Dank für die zahlreichen Antworten. Ich habs jetzt glaub ich soweit das es funktioniert. Danke nochmal Guido... ich hab zwar nicht deine Lösung exakt übernommen, aber die Idee kam mir wo ich mir dein Listing durchgeschaut habe. Den original FB musste ich auf jeden Fall so lassen, da noch andere Sachen damit gezählt werden. Nur eben so langsam, das die wahrscheinlich nie Überlaufen. Ich mach jetzt einfach einen Sprung in den FB wenn es soweit ist und das HIBI hab ich mir neu gesucht. Habs vorhin getestet funzt einwandfrei. Ach ja, bei der Siemens Simatic S5 ist FFFF offensichtlich 65534 bzw. -32767.

Grüße mclear
 
Oben