# Ob35



## Automatisierungs-Rookie (9 Januar 2007)

Hallo,
hier einige Problemchen und Verständnisfragen zum Weckalarm-OB35:

Eine CPU kleiner 317 hat nur den OB 35, dies ist http://cache.automation.siemens.com/dnl/Dc0ODY5NQAA_13206730_HB/Opli312cbis314c_d.pdf (Seite 109) zu entnehmen, wurde auch schon im Forum angesprochen (Suche-Funktion ). Da der OB 35 beim bestehenden Projekt schon für einen Sekundentakt verwendet wird muss ich das Ganze umkonfigurieren, um meinen Regler mit einer konstanten Zykluszeit aufrufen zu können ("Unsauberkeiten" durch Regler-Aufruf im OB1 dürfen nicht sein): Der OB 35 wird in einem Takt aufgerufen, dessen Vielfaches 1s ist, damit der 1s-Takt auch weiterhin tadellos läuft. Als neuer Takt für den OB35 kommen 40, 50 oder 100 ms in Frage, kürzere Zeiten (25, 20 ms) werden wohl nicht benötigt. Bei jedem OB35-Aufruf wird dann der Regler aufgerufen und ein Zähler wird inkrementiert. Hat der Zähler sein Limit erreicht (10 bei 100 ms OB35-Zeit, 20 bei 50 ms, 25 bei 40 ms), werden die Anweisungen des Sekunden-Taktes ausgeführt. 

Zusatzfrage: Ohne die Einschränkungen des 1s-Taktes könnte ich die OB35-Zykluszeit in ms-Schritten einstellen? Dies geht zumindest aus http://cache.automation.siemens.com/dnl/jUzMjkwOQAA_1214574_HB/SFC_d.pdf  (Seite 26) hervor: Der Parameter OB35_EXC_FREQ ist vom Typ INT.

Sind diese Erkenntnisse soweit korrekt? Anmerkungen?

Gruß
Rookie


----------



## vladi (9 Januar 2007)

Hi,
der OB35 wird in der Hardwarekonfig(CPU), Weckalarme, eingestellt.
Da kann man z.B. 100ms Zyklus einstellen. Die OB Variable
"OB35_EXC_FREQ" liefert intern die aktl. eingestellte Zykluszeit des OB.
Klar, nach je 10 Aufrufe hast du 1 s Takt.

Gruss: Vladi


----------



## Automatisierungs-Rookie (9 Januar 2007)

*S7-Zähler vs. Eigenbau*

Ich habe gerade überlegt, wie ich einen Zähler der S7 zum Zählen bekommen könnte: ZR und ZV benötigen eine steigende Flanke, welche in jedem OB35-Zyklus anstehen muss, vielleicht könnte man die Bytes 'OB35_STRT_INF' und 'OB35_EV_CLASS' auswerten. Aber irgendwie scheint die Lösung dieses Problems alles andere als trivial zu sein, falls es überhaupt eine Lösung gibt. 

Die schlechte Alternative mit S7-Zähler wäre die Zeit zwischen zwei OB35-Aufrufen zu halbieren, nur damit ich bei jedem 2. Aufruf eine positive Flanke für den Zähler habe - sieht wie gewollt aber nicht gekommt aus! Edit: Halbieren müsste auch nur bei 40 ms Zykluszeit des OB35 sein, ansonsten geht auch die Flanke bei jedem 2. Takt, gescheit sieht es trotzdem nicht aus!

Der Eigenbau-Zähler alá

```
L "Zaehler" // Zaehler ist vom Typ INT
L 1
+I
T "Zaehler"
```
mit anschließender Zähler-Abfrage benötigt deutlich weniger Hirnschmalz und ist zudem schnell in der Ausführung. Ein solcher Zähler dürfte bei euch bevorzugt verwendet werden? Hat sich überhaupt schon mal jemand Gedanken über die Nutzung eines S7-Zählers in diesem Kontext gemacht?


----------



## MSB (9 Januar 2007)

Also ich kann jetzt nur für mich sprechen,
ich habe noch nie einen S7-Zähler verwendet,
da das Handling der Zähler sowieso irgendwie dämlich ist.

Prinzipiell würde ich das auf jeden Fall auch so machen.

Mfg
Manuel


----------



## HDD (9 Januar 2007)

Hi, MSB dito.
ich glaube die Dinger (Zähler S7) werden nur in der Ausbildung benutzt !?

HDD


----------



## Werner54 (9 Januar 2007)

*Vollautomatische Flankenauswertung*



Automatisierungs-Rookie schrieb:


> Ich habe gerade überlegt, wie ich einen Zähler der S7 zum Zählen bekommen könnte: ZR und ZV benötigen eine steigende Flanke,


Hallo, die Flankenauswertung von ZV und ZR erfolgt ohne Hirnschmalz des Studenten: war's eine Flanke, wird der Zählvorgang ausgelöst, sonst nicht.


----------



## crash (9 Januar 2007)

Wie genau muss dein Sekundentakt sein?
Wenn es auf ein paar ms nicht ankommt kannst du doch den Taktmerker verwenden.
Ich hab den schon sehr oft verwendet und man glaubt kaum wie genau das Ding ist.


----------



## Markus (9 Januar 2007)

jupp taktmerkerbyte würde ich auch machen...


----------



## Automatisierungs-Rookie (10 Januar 2007)

Werner54 schrieb:


> Hallo, die Flankenauswertung von ZV und ZR erfolgt ohne Hirnschmalz des Studenten: war's eine Flanke, wird der Zählvorgang ausgelöst, sonst nicht.



Klar, das kapiert glaube ich jeder Auszubildene.

Aber: So wie ich es verstanden habe in- bzw. dekrementiert der Zähler, wenn die positive Flanke vom VKE des vorherigen Zyklusses zum aktuellen VKE vorhanden ist. Der Zähler ist also nicht in der Lage, in jedem Zyklus zu in- bzw. dekrementieren. Einen Unterschied diesbezüglich zwischen dem Aufruf im Weckalarm und dem Aufruf im OB1-Zyklus sehe ich nicht.

Eine weitere "Bastellösung", die mir gerade einfällt: Den Zähler zwei mal aufrufen und den zweiten Zähler mit dem invertierten Signal des ersten Zählers beschalten, einer der beiden Zähler zählt immer. Aber dies kann auch nicht im Sinne einer ordentlichen Programmierung sein.

Bezüglich des Taktmerkers: Das müsste ich mal mit dem verantwortlichen Ingenieur abklären, der hat von Anfang an mit der Anlage zu tun und kennt sich aus. Wenn er sagt, dass ich den Weckalarm nehmen muss dann nehme ich den Weckalarm.


----------



## Unregistrierter gast (10 Januar 2007)

Automatisierungs-Rookie schrieb:


> Bezüglich des Taktmerkers: Das müsste ich mal mit dem verantwortlichen Ingenieur abklären, der hat von Anfang an mit der Anlage zu tun und kennt sich aus. Wenn er sagt, dass ich den Weckalarm nehmen muss dann nehme ich den Weckalarm.


Der Weckalarm ist deutlich genauer als die Taktmerker.
Wenn es auf Genauigkeit ankommt, dann arbeitet man mit Weckalarm-OB.


----------



## Markus (10 Januar 2007)

was heist da wesentlich genauer?

am ende habe ich in beiden fällen einen sps-zyklus als fehler.
er generiert ja im ob35 nur den takt, auswerten tut er ihn ausserhalb im ob1 zyklus...


----------



## Unregistrierter gast (10 Januar 2007)

Markus schrieb:


> was heist da wesentlich genauer?
> 
> am ende habe ich in beiden fällen einen sps-zyklus als fehler.
> er generiert ja im ob35 nur den takt, auswerten tut er ihn ausserhalb im ob1 zyklus...


Klar, 
wenn du die Auswertung weiter hin synchron im OB1 machst, hast du nichts gewonnen.


----------



## Automatisierungs-Rookie (10 Januar 2007)

Markus schrieb:


> er generiert ja im ob35 nur den takt, auswerten tut er ihn ausserhalb im ob1 zyklus...



Nö. Die Anweisungen stehen bisher im OB35 und bleiben auch da, wenn  Cheffe es so will.

Bei der Microcontroller-Programmierung im Studium wurde uns beigebracht, dass eine Interrupt-Service-Routine so kurz wie möglich zu sein hat, idealerweise wird einfach ein Flag gesetzt, das dann im zyklischen Programm ausgewertet wird. Bei der SPS müsste es wenn möglich ist (also nicht bei schnellen Reglern) genauso gehandhabt werden? Wenn es eine Verbesserung darstellt könnte ich es mal vorsichtig ansprechen, auf oberschlau machen kommt bekanntlich nicht so gut!


----------



## Bitpopler (10 Januar 2007)

Automatisierungs-Rookie schrieb:


> Klar, das kapiert glaube ich jeder Auszubildene.
> 
> Aber: So wie ich es verstanden habe in- bzw. dekrementiert der Zähler, wenn die positive Flanke vom VKE des vorherigen Zyklusses zum aktuellen VKE vorhanden ist. Der Zähler ist also nicht in der Lage, in jedem Zyklus zu in- bzw. dekrementieren. Einen Unterschied diesbezüglich zwischen dem Aufruf im Weckalarm und dem Aufruf im OB1-Zyklus sehe ich nicht.



moin,

Einen Counter bei jedem Zyklus zum zählen zu bewegen ist kein Problem ( auf jeden Fall nicht mit Rockwell *duck*).

Im angefügten Beispiel siehst du wie so etwas dort gemacht wird. 

Prinzipiel gilt : zählt der Zähler nicht so soll er zählen, im nächsten zyklus dann wieder von vorne.

mfg


----------

