# AWL: SPBN und Co



## SPS-Fee (12 März 2016)

Grüßt euch. 
Ich hätte da mal eine grundlegende Frage:  
Unser Dozent arbeitet in Beispielen immer mit SPBN. 
Ich habe seit geraumer Zeit das Gefühl, dass da oft drauf verzichtet werden kann.  
Hier mal ein Beispel von ihm: 

```
U e0.0 
  U e0.1 
SPBN X000
 = A4.0 
X000: NOP 0
```
Das funktioniert aber genauso gut auch ohne dem Sprung.  
Bei folgendem Code ist der Sprung wieder sinnvoll: 

```
U E0.0 
  U E0.1 
SPBN X001 
  L 100 
  T MW10 
X001: NOP 0
```

Nun schau ich schon den ganzen Abend im weltweiten Goockel-Netz um für mich eine Erklärung zu finden,
wann ein Sprung benötigt wird und wann darauf verzichtet werden kann. Leider war da nichts für mich dabei.  

Kann mir bitte jemand die Regel erklären, wann ich einen Sprung nehmen muss und wann die nachführende Aktion (1. Beispiel =A4.0) nur abgearbeitet wird, wenn die vorherigen Bedingungen (1. Beispiel U E0.0 und U0.1) erfüllt sind?

Besten Dank im Voraus.
 LG Fee


----------



## Thomas_v2.1 (12 März 2016)

Der Unterschied ist, dass du das Verknüpfungsergebnis was bei SPBN abgefragt wird direkt einer BOOL Variable zuweisen kannst. Bei allen anderen Typen ist das nicht möglich, darum ist dort immer ein Sprung notwendig.

Bei deinem ersten Beispiel macht es zudem einen Unterschied, ob du es mit Sprung oder ohne programmierst. Wenn mit Sprung, dann wird A4.0 nur einmalig auf true gesetzt, und niemals auf false. Sobald einmalig E0.0 und E0.1 auf true sind, bleibt A4.0 für alle Ewigkeit ebenfalls auf true, sofern er nicht an anderer Stelle zurückgesetzt wird (oder die SPS neugestartet wird).


----------



## SPS-Fee (13 März 2016)

Besten Dank.
OK, das mit dem niemals auf False hab ich kapiert.

Das heißt also, dass bei folgendem Code alle Zuweisungen auf die folgenden 3 Bits nur ausgeführt werden wenn E0.0=1 UND E0.1?


```
U E0.0
U E0.1
= A4.0
S A4.1
R A4.2
```

Wenn ich aber bei:
 U E0.0 
U E0.1
...... nicht nur Bits setzen möchte sondern auch vergleichen, laden, transferieren umwandeln und was auch immer, dann benötige ich immer einen Sprung?

Schreibe ich dann nachfolgend richtig, um die Bits nicht dauerhaft zu setzen (kein FALSE-möglich-Problem vom 1. Beispiel)?


```
U 0.0
U 0.1
= A4.0
S A4.1
R A4.2
U 0.0
U 0.1
SPBN X000
L100
T MW20
X000: NOP 0
```

Danke dir.


----------



## PN/DP (13 März 2016)

Einen VKE-abhängigen Sprung braucht man immer dann, wenn man Anweisungen, welche nicht VKE-abhängig sind, VKE-abhängig ausführen will. Dann muß man die Anweisungen ggf. überspringen.

Harald


----------



## Thomas_v2.1 (13 März 2016)

Deine Beispiele sind alle verschieden.

Bei einer Zuweisung mit "=" wird direkt der Zustand des VKEs auf die Variable geschrieben, unabhängig vom Ergebnis der vorhergehenden Verknüpfung. Also wenn VKE = false, dann ist dein Ausgang false. Ist das VKE = true, dann ist auch dein Ausgang true.

Setzen/Rücksetzen ("S" / "R") verhalten sich anders, und sind eher vergleichbar mit einem Sprung. Ein Setzen und auch ein Rücksetzen wird nur ausgeführt, wenn das VKE = true ist.

U E0.0
S A0.0

ist von der Funktion her identisch mit:
U E0.0
SPBN XX
= A0.0
XX: NOP 0


----------



## SPS-Fee (13 März 2016)

PN/DP schrieb:


> Einen VKE-abhängigen Sprung braucht man immer dann, wenn man Anweisungen, welche nicht VKE-abhängig sind, VKE-abhängig ausführen will. Dann muß man die Anweisungen ggf. überspringen.
> Harald



Genau danach habe ich lange gegoockelt, aber leider nichts passendes gefunden.
Eine Liste mit Anweisungen, die nicht VKE-abhängig sind, wäre für mich sehr hilfreich


----------



## Thomas_v2.1 (13 März 2016)

SPS-Fee schrieb:


> Genau danach habe ich lange gegoockelt, aber leider nichts passendes gefunden.
> Eine Liste mit Anweisungen, die nicht VKE-abhängig sind, wäre für mich sehr hilfreich



In diesem PDF steht alles drin was du benötigst. Um das Datenblatt zu verstehen ist wichtig, dass du weißt was die Bits im Statuswort bedeuten die dort erwähnt werden.

https://support.industry.siemens.com/cs/ww/de/view/31977679


----------



## SPS-Fee (13 März 2016)

Thomas_v2.1 schrieb:


> Deine Beispiele sind alle verschieden.
> Bei einer Zuweisung mit "=" wird direkt der Zustand des VKEs auf die Variable geschrieben, unabhängig vom Ergebnis der vorhergehenden Verknüpfung. Also wenn VKE = false, dann ist dein Ausgang false. Ist das VKE = true, dann ist auch dein Ausgang true.
> Setzen/Rücksetzen ("S" / "R") verhalten sich anders, und sind eher vergleichbar mit einem Sprung. Ein Setzen und auch ein Rücksetzen wird nur ausgeführt, wenn das VKE = true ist.


Soweit ist mir alles verständlich. Komme mit = S und R klar.
Waren nur als Beispiele gemeint.


----------



## SPS-Fee (13 März 2016)

Thomas_v2.1 schrieb:


> In diesem PDF steht alles drin was du benötigst.


Besten Dank, da hab ich ja für den Sonntag viel zu tun. Wissen pur ;-)


----------



## borromeus (13 März 2016)

SPS-Fee schrieb:


> Grüßt euch.
> Ich hätte da mal eine grundlegende Frage:
> Unser Dozent arbeitet in Beispielen immer mit SPBN.
> Ich habe seit geraumer Zeit das Gefühl, dass da oft drauf verzichtet werden kann.
> ...



Der Dozent sollte keinesfalls dozieren.
Das ist ja schrecklich!


----------



## SPS-Fee (13 März 2016)

borromeus schrieb:


> Der Dozent sollte keinesfalls dozieren.
> Das ist ja schrecklich!



Das war jetzt mal ein krasses Beispiel.
Für mich war es halt nicht 100% ersichtlich, warum man nach mancher Abfrage (z.B. U E0.0 U E0.1) keinen Sprung benötigt und manchmal schon.
Wurde aber in den letzten Nachrichten gut erklärt.

Leider sind wir seit Freitag schon in den Oster-Ferien sonst hätte ich ihn mal genauer befragt.
Ansonsten läuft der Kurs gut und wir haben gerade mit Analog begonnen.

Jetzt muss ich nur schauen, ob ich Analogwertverarbeitung auch daheim üben kann, was ja mit Digitalverarb. und PLCSIM gut ging.
Im Kurs haben wir ein Übungsboard mit Ventilen und Füllstandsanzeige. Daheim habe ich nur die Software zum Üben ;-(

LG


----------

