# anfängerfrage zu timer und op7



## linuxluder (28 März 2008)

hi,

ich habe einen timer, z.b. t7, der von 10 sek nach 0 zählt.
wie kann ich den am op7 anzeigen lassen.
wie lege den timer in einem db ab?

vielen dank, jo


----------



## Larry Laffer (28 März 2008)

Was möchtest du denn genau anzeigen ?
Die Rest-Laufzeit des Timers ? Wenn ja, dann einfach Programmieren :
	
	



```
L T 7
T MW 100
```
MW100 beinhaltet nun die Restlaufzeit des Timers unter Berücksichtigung der Zeitbasis desselben ...


----------



## linuxluder (30 März 2008)

danke larry,

1.
das kapiere ich, aber was meinst du mit "zeitbasis"?


> MW100 beinhaltet nun die Restlaufzeit des Timers unter Berücksichtigung der Zeitbasis desselben ...


2.
könntest du mir evtl. auch noch ein klitze kleines beispiel geben,
wie ich z.b. den startwert via OP7 lesen und schreiben kann?

vielen dank,

gruß jo


----------



## vierlagig (30 März 2008)

arbeitest du mit S5time? dann würd ich dir mal die FAQ hier ans herz legen:

* 	Wie kann ich Zeitwerte für Timer variabel eingeben?*


----------



## Larry Laffer (30 März 2008)

... genau wie schon von 4L gepostet ...
Wenn du den Zeitwert als Variable übergibst, dann kannst du dir auch das höchstwertigste Byte ausmaskieren und weißt damit den Multiplikator für die Restlaufzeit. Des weiteren kannst du dir auf dem Weg auch die schon vergangene Zeit ausrechnen ...

Falls irgend etwas davon dein Ziel sein sollte, dann hättest du es allerdings mit einem IEC-Timer (z.B. SFB4) sehr viel einfacher ...

Gruß
LL


----------



## linuxluder (31 März 2008)

*danke*

Vielen Dank.

Ich wußte bis heute gar nichts von einem SFB4. Die S5-Timer kannte ich.
Aber irgendwie habe ich nun trotzdem keine Ahnung, wie ich die Timer am OP7 auslesen und programmieren kann. Wie gesagt, ich bin eben totaler Laie, der sich das irgendwie mit Ach und Krach zusammenstopselt.
Klar, lesen kann ich auch, trotzdem tue ich mich verdammt hart, sowas http://www.sps-forum.de/showthread.php?t=2942 in die Tat umzusetzen. Wäre es evtl. möglich mir ein kokretes Beispiel zu geben. Klar, sagt jetzt wieder wer, konkreter gehts nicht. Ich meine was, was ich "stur" abtippe für die CPU und was ich "stur" über Protool ins OP7 klopfe.

Vielen Dank, Jo


----------



## AUDSUPERUSER (31 März 2008)

CALL  "TON" , DB4
       IN:=M0.0
       PT:=T#10S
       Q :=  
       ET:=#T_ET
      L     #T_ET                       // Lokalvariable Time
      T     DB1.DBW    0                // Dint Anzeige in Milisekunden. Kann auf OP dargestellt werden


----------



## Simatiker (31 März 2008)

*Jetzt aber...*

Hallo,

also, du brauchst 2 int variablen für das op z.Bsp.
DB1.DBW0, Typ int; Zeitwert für Timer 7
DB1.DBW2, Typ int; aktueller Wert von Timer 7

dann noch eine Variable für den gewandelten Zeitwert z.Bsp
MW 100, Typ S5TIME


```
L     DB1.DBW    0             //int wert vom op max 999
      ITB                                //int wert vom op in BCD wandeln
      L     2#[COLOR=red]10[/COLOR]000000000000    //Zeitbasis [COLOR=red]10[/COLOR] = s
      OW                               //Zeitbasis mit Zeitwert im BCD verknüpfen
      T     MW   100                //in MW100 ablegen
 
      U     E     20.0
      L     MW   100
      SE    T     7
 
      L     T     7                  //lade zeitwert Timer 7 als int
      T     DB1.DBW    2          //aktuellen Zeitwert in DB ablegen
```
 
Beispiel für Zeitwert:

10s -> DB1.DB0 = 0000 0000 0000 1010
DB1.DBW0 -> BCD = 0000 0000 0001 0000
mit OW 10 0000 0000 0000
T MW 100 = 10 0000 0001 0000
MW 100 = 10s in BCD Format


----------



## linuxluder (31 März 2008)

*vielen Dank ...*

für beide Codes.
Ich probiere es sofort aus und melde mich wieder.

DANKE nochmals,

Gruß Jo


----------



## linuxluder (3 April 2008)

hi,

habs probiert, und zwar so:

```
L     DB110.DBW    0                        
      ITB                                         
      L     2#10000000000000                      
      OW                                           
      T     MW   109
```

Die Eingabe  und die Übertragung des Wertes aus dem OP7 in die CPU klappt. 

Wenn ich aber das übertrage, dann geht mir die CPU in STOPP.

```
L     DB110.DBW    0                       
      ITB                                         
      L     2#10000000000000                      
      OW                                           
      T     MW   109                              
      U     E      3.0
      L     MW   109
      SE    T      7

      L     T      7                              
      T     DB110.DBW    2
```

Was mache ich da falsch?



Vielen Dank, Jo


----------



## vierlagig (3 April 2008)

kann das stop-ereignis vorerst nicht bestätigen, im plcsim läuft der abschnitt... was steht im diagnosepuffer?


----------



## linuxluder (3 April 2008)

also,

ich denke das liegt an



> dann noch eine Variable für den gewandelten Zeitwert z.Bsp
> MW 100, Typ S5TIME



ist damit die deklarationstabelle des bausteines gemeint?
falls, könnte ich mal nen screenshot haben. sorry, ich kenn mich kaum aus.


----------



## vierlagig (3 April 2008)

damit ist die symboltabelle gemeint ... glaub ich  ... also MW100 in den lokaldaten eines bausteins ist eher ungewöhnlich und wirklich mal nicht schön ...

was steht im diagnose-puffer nach stop?


----------



## Simatiker (3 April 2008)

Hallo,

im Symboleditor! Spalte Datentyp!


----------



## Larry Laffer (3 April 2008)

Welchen Wert hast du denn im DB100.DBw0 stehen ?
Mehr wie 999 darf es nicht werden, sonst klappt es mit dieser Form der Wandlung nicht ...


----------



## vierlagig (3 April 2008)

Larry Laffer schrieb:


> Welchen Wert hast du denn im DB100.DBw0 stehen ?
> Mehr wie 999 darf es nicht werden, sonst klappt es mit dieser Form der Wandlung nicht ...



genau und in diesem fall würde im diagnosepuffer stehen:



> BCD-Wandlungsfehler
> betroffenes Register: Akku 1
> OB-Nummer:     1
> Bausteinadresse:     16
> ...


----------



## linuxluder (3 April 2008)

Ereignis 1 von 100:  Ereignis-ID 16# 4562
STOP durch  Programmierfehler (OB nicht geladen oder nicht möglich, bzw. kein FRB vorhanden ) 
Unterbrechungstelle im Anwenderprogramm:  Zyklisches Programm (OB 1)  
Prioritätsklasse:    1
FC-Nummer:   100
Bausteinadresse:    118 
Bisheriger Betriebszustand: RUN
Angeforderter Betriebszustand: STOP (intern)
interner Fehler, kommendes Ereignis
16:43:35:018   03.04.08


----------



## Larry Laffer (3 April 2008)

... und was passiert im FC100 an Adresse 118 ...?


----------



## vierlagig (3 April 2008)

das ereignis davor ist der wandlungsfehler, der fordert den OB121 an und da der nicht geladen ist, fliegste an der stelle raus ... 

mach mal ne min/max begrenzung für dein word ... 
wie larry schon sagte max: 999


----------



## Simatiker (3 April 2008)

mit dem Datentyp kommst du nur in Konflikt wenn du in KOP oder FUP schreibst ist hier ja nicht der Fall. Hab das grad mal getestet. 
Zum 999 Maximalwert, in Winccflex genügt es im Eigenschaftsfenster bei Darstellungsformat 0999 oder 999 einzugeben, dadurch wird die Eingabe für die Variable auch auf 999 begrenzt.

Zu deinem Fehler, zeig doch mal was so drin steht in deinem FC 100!


----------



## linuxluder (3 April 2008)

L     Db110.dbw    0                       
      Itb                                         
      L     2#10000000000000                      
      Ow                                           
      T     Mw   109                              
      U     E      3.0
      L     Mw   109
      Se    T      7

      L     T      7                              
      T     Db110.dbw    2


----------



## Simatiker (3 April 2008)

Hast du im DB auch beide variablen deklariert?
DBW 0 als INT und DBW 2 als INT?


----------



## linuxluder (3 April 2008)

nein, könntest du mir von der deklarationstabelle einen screenshot schicken?
dann sehe ich, wie das aussehen sollte


----------



## Simatiker (3 April 2008)

Wenn das der Fehler wäre würd dort aber irgendwas mit "Bereichslängenfehler beim schreiben" stehen aber guck trotzdem mal!
Steht aber nichts anderes im FC100?
Screenshot?


----------



## linuxluder (3 April 2008)

im db110 habe ich nun noch folgendes reingeschrieben

die cpu geht nun nicht mehr in STOP ;-)

Aber: Den Wert, den ich am OP7 angebe, den sehe ich nun auch nicht mehr in der CPU, d.h. ich kann nicht mehr "beobachten" ???


----------



## Simatiker (3 April 2008)

So jetzt nochmal mit Bild!


----------



## Larry Laffer (3 April 2008)

Holla ...
gibt es den DB100 mit den DBw's 0 und 2 (egal wie die deklariert sind) oder gibt es die nicht ...?

Wenn nicht, dann "Baustein erzeugen - Typ DB - mindestens die beiden Worte z.B. als INT anlegen - nochmal testen"

Das kann es doch aber nicht sein ... oder ...?


----------



## Larry Laffer (3 April 2008)

linuxluder schrieb:


> Aber: Den Wert, den ich am OP7 angebe, den sehe ich nun auch nicht mehr in der CPU, d.h. ich kann nicht mehr "beobachten" ???


 
Natürlich kannst du den Wert beobachten ... warum nicht ...?


----------



## linuxluder (3 April 2008)

so, ich kann nun den wert wieder beobachten, das geht

so, ich übergebe per op7 an die cpu z.b. den wert 12 in db100.dbw0

dann setze ich den eingang e3.0: nun sollte doch der timer laufen, tut er aber nicht ?!

sowas wie 

```
U     E    3.0
      L     S5T#5M
      SV    T      1
      U      T      1
      =      M      10.0
```

habe ich schon oft gemacht

was mache nun hier falsch?


----------



## Larry Laffer (3 April 2008)

Hast du den Timer vielleicht noch irgendwo im Programm verwendet ?
Wird der Baustein bedingt bearbeitet ?


----------



## linuxluder (3 April 2008)

nein und nein

t7 habe ich nur hier in verwendung

und 


der baustein wird "immer" angearbeitet

danke, jo

was ich zudem nicht verstehe, dass mw109 beim beobachten den wert 0 hat?
der sollte doch, wenn ich das halbwegs verstanden habe, den wert von db110.dbw0 haben, oder?


----------



## vierlagig (3 April 2008)

linuxluder schrieb:


> was ich zudem nicht verstehe, dass mw109 beim beobachten den wert 0 hat?
> der sollte doch, wenn ich das halbwegs verstanden habe, den wert von db110.dbw0 haben, oder?



nein, den wert von


```
L     DB110.DBW    0                       
      ITB                                         
      L     2#10000000000000                      
      OW
```
also von dem integer db110.dbw0 in bcd gewandelt und mit 2#10000000000000                      oder verknüpft ...


----------



## linuxluder (3 April 2008)

ok, ja, so meinte ich es auch, aber zumindest sollte in mw109 nicht 0 stehen

da steht immer 2000 (BCD) drin


----------



## Larry Laffer (3 April 2008)

Nur mal so am Rande (wegen der Sache mit dem DB ...) - Hat das OP überhaupt Kontakt zu dem SPS-Programm (bzw. der SPS) ?

Nachtrag:
"0" wäre der Initialwert des DB100.DBW0 ...


----------



## linuxluder (3 April 2008)

klar, wenn ich den wert für db110.dbw0 am op7 ändere, sehe ich ihn sofort unter "beobachten" verändert


----------



## Larry Laffer (3 April 2008)

... dann sollte er aber auch mit Hex2000 verodert im MW landen ...

Ich sehe gerade, dass du ein MW109 verwendest ... Das ist zur Hälfte mit in einem MW108 und in einem MW110 mit drin ... Hast du die vielleicht irgendwo im Einsatz ...?


----------



## linuxluder (3 April 2008)

ich habs nun mit mw120 probiert, geht auch nicht

ich gebs für *heute *auf, ...

ich schraube meine ansprüche mal zurück

mir würde es reichen, wenn ich eine timer lediglich am op7 beobachten könnte, in vom op7 programmieren zu können muss nicht sein

also

```
U     E    3.0
      L     S5T#5M
      SV    T      1
      U      T      1
      =      M      10.0
```
wenn ich Timer T1 am op7 sehen könnte, wie er sich veränfert natürlich, wäre ich schon zufrieden


vielen dank, jo


übrigens: allen beteiligten vielen dank!!! bis hierhin


----------



## Larry Laffer (3 April 2008)

Bevor du aufgibst ...
Stell doch mal dein ganzes Programm hier ein. Da kann kein großer Fehler drinstecken ...
Die geposteten Code-Beispiele funktionieren auf jeden Fall, wenn sie auch korrekt eingesetzt werden ... Da ist irgend etwas anderes im Busch ...


----------



## Simatiker (3 April 2008)

*Aufgeben???*

Ich denke auch das du wahrscheinlich ein Problem bei der Verbindung zum OP7 hast. Im Anhang mal ein Screenshot vom FC100, hab das mal markiert wo der Wert vom OP online beobachten kannst (unter anderem) und wenn da bei dir kein wert steht dann kommt vom OP auch nix in DB110.DBW0 und andersrum genauso mit DBW2.
Womit projektierst du denn das OP7?
Schönen Abend noch....


----------



## linuxluder (4 April 2008)

hi,

nun ja, aufgegeben habe ich nicht, nur gestern hats zeitlich nicht mehr geklappt.

also, ich habe mal die relevanten bausteine fc150 und db110 "ausgedruckt" und angefügt. symbole in der symboltabelle habe ich mal nicht festgelegt; muss ja in meinem fall nicht sin, oder?

vielleicht findet ihr den fehler, würde micht sehr freuen.

vielen dank im voraus, gruß jo


----------



## Larry Laffer (4 April 2008)

... ich hatte eigentlich an das ganze Programm gedacht.
Der FC150 ist für mich erstmal OK, auch an dem DB kannst du eigentlich nicht viel verkehrt machen. Ich vermute den vorhandenen Fehler im Zusammenspiel mit etwas anderem ...

Gruß
LL


----------



## linuxluder (4 April 2008)

hi ll

anbei meine komplettes programm ausgedruckt und gepackt.

danke jo

p.s.: bist du evtl auch bei icq oder skype vertreten?


----------



## Larry Laffer (4 April 2008)

... du hättest das Projekt doch mit "Datei - Archivieren" auch zu einem ZIP-File machen können. Dann hätte ich es mal testen können. Auch in Sachen Querverweise. Würdest du mir den Gefallen tun ...?

Auf den ersten Blick sieht das aber gar nicht schlecht aus ...
Was ist mit der Anbindung zum OP ? Hast du die auch in der Projektierung mit drin ?

ICQ und Skype ist nicht ...

Gruß
LL


----------



## Larry Laffer (4 April 2008)

Eine Sache ist mir dann doch noch aufgefallen ...
Ich habe keine Stelle in deinem Programm gefunden, wo du den FC100 aufrufst ... Habe ich da nun etwas übersehen oder du ?


----------



## linuxluder (4 April 2008)

ich habe "nur" step7 light

ich kann exportieren in *.awl, *.sdf, *.seq, *.k7e

wie hast du es gern?


----------



## Larry Laffer (4 April 2008)

Upps ... check mal das in meinem letzten Beitrag ...


----------



## linuxluder (4 April 2008)

habs mal so gemacht ...


----------



## Larry Laffer (4 April 2008)

... was soll das sein ...?
Da kann ich nichts damit anfangen ...
Hast du mal gecheckt, ob du den FC100 in deinem Programm überhaupt aufrufst ...?


----------



## linuxluder (4 April 2008)

*oh gott ich habs*

du hast den entscheidenden hinweis gegeben



> Eine Sache ist mir dann doch noch aufgefallen ...
> Ich habe keine Stelle in deinem Programm gefunden, wo du den FC100 aufrufst ... Habe ich da nun etwas übersehen oder du ?



also, jedenfalls hat ein CALL FC100 die lösung gebracht.

ich kapiere nur nicht warum das NW1 aus dem FC100 trotzdem immer abgearbeitet wurde, auch CALL FC100

irgendwie check ich nun nichts mehr ??!

trotzdem vielen hertlichen danke für die geduldige unterstützung

gruß jo


----------



## Larry Laffer (4 April 2008)

Die Frage kann ich dir nicht beantworten ...
Wenn du allerdings den Baustein (FC100) nicht aufrufst, dann kann er auch nicht bearbeitet werden ... danach hatte ich aber auch schon mal ganz zu Anfang dieses Thread's gefragt ... na egal. Nun hast du es ja.
Tut es denn nun, was du willst ...?


----------



## linuxluder (4 April 2008)

ja, es geht, nun ja, dann kann ich mich ja bald an die nächste aufgabe machen; irgendwann flieg ich aus dem forum

danke nochmals


----------



## Larry Laffer (4 April 2008)

linuxluder schrieb:


> irgendwann flieg ich aus dem forum


 
Warum das denn ...
Nur wer aufgibt, der verliert ...

Bis in Zukunft mit dem nächsten Problem ...


----------

