anfängerfrage zu timer und op7

Was möchtest du denn genau anzeigen ?
Die Rest-Laufzeit des Timers ? Wenn ja, dann einfach Programmieren :
Code:
L T 7
T MW 100
MW100 beinhaltet nun die Restlaufzeit des Timers unter Berücksichtigung der Zeitbasis desselben ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
... 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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 
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

Code:
      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
 
hi,

habs probiert, und zwar so:
Code:
      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.
Code:
      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
 
kann das stop-ereignis vorerst nicht bestätigen, im plcsim läuft der abschnitt... was steht im diagnosepuffer?
 
damit ist die symboltabelle gemeint ... glaub ich :ROFLMAO: ... also MW100 in den lokaldaten eines bausteins ist eher ungewöhnlich und wirklich mal nicht schön ...

was steht im diagnose-puffer nach stop?
 
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
Angeforderter OB: Programmierfehler-OB (OB 121)
Prioritätsklasse: 1
interner Fehler, kommendes Ereignis
16:57:19.783 03.04.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
 
das ereignis davor ist der wandlungsfehler, der fordert den OB121 an und da der nicht geladen ist, fliegste an der stelle raus ... :rolleyes:

mach mal ne min/max begrenzung für dein word ...
wie larry schon sagte max: 999
 
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!;)
 
Zurück
Oben