Varible Zeit

Studiologe

Level-1
Beiträge
57
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.
Ich bekomme das mit den variablen Timern eifnach nicht auf die Reihe :(
Die Hilfe funktion habe ich benutzt und benutze folgende Beitraege als Referenz:

http://www.sps-forum.de/showthread.php?t=2942

Ich moechte einfach nur ein variables takt Signal (aehnlich PWM-Signal) generieren. Dazu habe ich folgende Ueberlegungen getaetigt.

Variable Zeit fuer einen Timer, Timer schaltet Ausgang = Takt den ich brauche :)

ich bekomme das mit den Datentypen einfach nicht auf die Reihe und verstehe nicht wieso ich da nicht einfach Integer Werte wie z.B. 5, 9, 30 eingeben kann. Irgendwie ist das mit der S7 Programmierung etwas komisch verglichen mit der Einfacheit von C/C++.

SIehe Screenshot. was fuer Variablentypen werden erwartet?

S5_Time ist ausgabe des Zeitwertes, richtig?
was muss ich fuer z.b. globale Variablen in der Symboltabelle eintragen, dass sich hier etwas sinnvolles ergibt, was ich fuer mein Projekt (Takt auf Ausgang) benutzen kann?

Ich verstehe nicht, was die Symboltabelle als Adresse fuer Typ Integer eingeben muss. Und wenn ich S5TIME als Typ angebe geht es auch nicht?
Habe schon versucht hier im Forum eine hilfreiche Beschreibung fuer Datentypen zu finden und auch im Netz, doch leider nie genauere Angaben gefunden. Nur Typ Inter, Bereich von -32... bis 32......

Hilfe :)

Danke und schoene Thanksgiving Feiertage!

Studi

Danke
 

Anhänge

  • variable timer.bmp
    470,4 KB · Aufrufe: 30
SIehe Screenshot. was fuer Variablentypen werden erwartet?
Das steht in dem Beitrag, wo Du den Umrechnungsbaustein her hast, ganz genau im Quelltext des Bausteins.
Und auch im Kopfbereich des Bausteins, wie Du ihn jetzt in Deinem Step7-Projekt hast.
Hier noch ein Baustein von unserem User OHGN:
Code:
FUNCTION FC 201 : VOID
TITLE =INT_to_S5 Time

VAR_INPUT
  Einheit : [B][COLOR="RoyalBlue"]BYTE[/COLOR][/B] ; //1=ms 2=s 3=min
END_VAR
VAR_OUTPUT
  S5_Time : [B][COLOR="royalblue"]S5TIME[/COLOR][/B] ; 
END_VAR
VAR_IN_OUT
  IN : [B][COLOR="royalblue"]INT[/COLOR][/B] ; 
END_VAR

Man kann auch beim Bausteinaufruf den Mauszeiger auf einen Bausteinparameter halten - etwas warten - und schon
erscheint ein Tooltip mit der Angabe des erwarteten Datentyps.

S5_Time ist ausgabe des Zeitwertes, richtig?
Richtig. Es ist der aus Einheit und IN berechnete Zeitwert im Format S5TIME.
Die Variable, die Du hier angibst mußt Du nachher bei dem/den Takt-Timer(n) verwenden.

Ich verstehe nicht, was die Symboltabelle als Adresse fuer Typ Integer eingeben muss.
Eine Speicheradresse, die einen INT (16 Bit) aufnehmen kann, z.B. MW40.

Habe schon versucht hier im Forum eine hilfreiche Beschreibung fuer Datentypen zu finden und auch im Netz, doch leider nie genauere Angaben gefunden. Nur Typ Inter, Bereich von -32... bis 32......
Warum in die Ferne schweifen, liegt die Beschreibung aller S7-Datentypen doch direkt vor Deiner Nase:
Einfach mal im Step7-Editor die Zaubertaste F1 drücken und nach "Datentypen" suchen.
Zusätzlich hat das Step7 eine Menge Programmierhandbücher mit allen wichtigen Informationen auf Deinem Rechner
installiert (Start > SIMATIC > Dokumentationen (oder so ähnlich)), z.B. das Handbuch "Programmieren mit STEP 7",
das enthält u.A. die Beschreibung aller Datentypen. Und Handbücher zu FUP, KOP, AWL, ...

Harald
 
Ich habe jetzt noch folgendes kleines Problem.
Die CPU geht immer auf STOP wenn ich folgenden Programmcode ausfuehren lasse (Meldung der CPU unter Diagnose deutet auf programmierfehler....)

Und zwar geht es datum, das ich am OP einen Pushbutton habe, mit dem ich den Zeitwert anpassen kann. Ebenfalls wird der Zeitwert ueber ein EIN/AUSgabe fenster und einen Schieberegler beeinflusst.
Aendere ich den Zeitwert ueber das EIN/AUSGABEFELD, so aendert sich auch der Schieberegler und umgekehrt. Also alles so wie es soll.
Wenn ich allerdings den Pushbutton benutze um den Zeitwert anzupassen, dann erhoeht er mir den Wert um 1 und dann geht die CPU in STOP.
Ich tippe auf einen Mismatch zwischen Datentypen, bin mir aber unschluessig wo der Fehler sitzt.
Ich befuerchte,dass ich wegen der hoehen Zyklenfolge noch einen Timer einbauen muss, damit die Schritte mit denen ich den Zeitwert dekrementiere/inkrementiere kleiner und fluessig ablaufen.

Nachfolgender Code ist im Anhang als Screenshot mit Symbolinformationen. Sorry da wusste ich leider nicht wie ich diese mit kopieren kann.
Code:
      U     DB1000.DBX   11.7
      SPB   ADDT
      SPA   NADD

ADDT: NOP   0
      U     M      0.1
      L     DB1000.DBW    8
      L     MW   578
      +I    
      T     DB1000.DBW    8

NADD: NOP   0
      U     DB1000.DBX   12.0
      SPB   SUBT
      SPA   NCHN

SUBT: NOP   0
      U     M      0.1
      L     DB1000.DBW    8
      L     MW   578
      -I    
      T     DB1000.DBW    8

NCHN: NOP   0
Studi
 

Anhänge

  • code.JPG
    code.JPG
    32,4 KB · Aufrufe: 14
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Toki
und danke fuer die rasche Antwort.
Ja habe den DB1000 vorher schon eingesetz fuer die Kommunikation zwischen OP und CPU, da hat alles einwandfrei funktioniert.
Es ist eine S7 315-2DP verbaut, die eigentlich soweit ein nummernband haben sollte:

DB
Number, max. 1023 ; Number band: 1 to 1023
Size, max. 16 Kibyte

Ich denke es ist eine Datentyp Vermischung hier, kann aber leider nicht erkennen wo...
Ideen?
 
Kannst du denn mal nen Screenshot vom Diagnoseeintrag machen?
Bzw. U-Stack...
Vielleicht finden wir dort noch nen Hinweis
lupe

Toki
 
Frage 1:
Was steht im MW 578?

Frage 2:
Wann wird das Bit DB1000.DBX 11.7 (Pushbutton?) wieder zurück gesetzt?
Ein Lösung wäre am Ende der Aktion zurücksetzen:
Code:
      U     DB1000.DBX   11.7
      SPB   ADDT
      SPA   NADD
 
ADDT: NOP   0
      U     M      0.1
      L     DB1000.DBW    8
      L     MW   578
      +I    
      T     DB1000.DBW    8
 
NADD: NOP   0
      U     DB1000.DBX   12.0
      SPB   SUBT
      SPA   NCHN
 
SUBT: NOP   0
      U     M      0.1
      L     DB1000.DBW    8
      L     MW   578
      -I    
      T     DB1000.DBW    8
 
NCHN: NOP   0
[COLOR=red]     U     DB1000.DBX   11.7[/COLOR]
[COLOR=red]     R     DB1000.DBX   11.7[/COLOR]
 
Was steht im MW578? Warum verwendest Du da nicht eine Konstante (z.B. "L 1")?
Geht das DB1000.DBW8 auf den Parameter IN Deines S5-Zeitumrechnungsbausteins oder direkt an einen Timer?
Der Zeitwert an einem Timer muß im BCD-Format (genauer: S5TIME-Format) sein.

Harald
 
Im MW578 steht eine 1, also dass immer um 1 inkrementiert oder dekrementiert wird. Im moment ist keine Begrenzung programmiert, da bastle ich noch im Moment dran.
Das Bit DB1000.DBX 11.7 (Pushbutton?) wird zurueckgesetzt sobald ich den Pushbutton am OP loslasse.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und ja,
ich gehe mit dem Wert von DB1000.DBW8 auf den Parameter IN des S5-Zeitumrechnungsbausteins.
siehe Screenshot.
Zuvor schreibe ich den Wert aber zurueck in den DB1000 als globale Uebergabe,
damit auch am OP der aktuelle Wert wieder ausgegeben werden kann.

Ist da vielleicht das Problem, dass ich den Wert am OP anzeige manipuliere, und dann zurueckschreibe waherend ich weiter manipuliere?
 

Anhänge

  • code2.JPG
    code2.JPG
    44,1 KB · Aufrufe: 5
Keine Ahnung was Du da machen willst,
jedenfalls halte ich den Code für Unsinn...
vielleicht verstehe ich aber auch den tieferen Sinn nicht.

1. das Reinspringen in GRN2 lässt auch GRN9 durchlaufen
2. CLR, L S5T#0ms, SE T62 was soll das bringen
3. Einen Timer 3x aufzurufen kann nicht wirklich gut sein.

Was willst Du denn im NW 9 machen?
 
Das Bit DB1000.DBX 11.7 (Pushbutton?) wird zurueckgesetzt sobald ich den Pushbutton am OP loslasse.
Wie borromeus schon sagt, L S5T#0MS finde ich auch nicht gut.
Ich nehme an du willst das die Zeit frisch gestartet werden soll, die Verriegelung würde ich dann eher bei dem ersten Aufruf der Zeit machen.

Übrigens den Merker 0.1 brauchst Du nicht, Lade-/Transfer-Anweisungen sind VKE unabhängig:
Code:
      U     DB1000.DBX   11.7
      SPB   ADDT
      SPA   NADD
 
ADDT: NOP   0
[COLOR=red]    U     M      0.1  // <-- kann entfernt werden[/COLOR]
      L     DB1000.DBW    8
      L     MW   578
      +I    
      T     DB1000.DBW    8
 
NADD: NOP   0
      U     DB1000.DBX   12.0
      SPB   SUBT
      SPA   NCHN
 
SUBT: NOP   0
[COLOR=#ff0000]    U     M      0.1  // <-- kann entfernt werden[/COLOR]
      L     DB1000.DBW    8
      L     MW   578
      -I    
      T     DB1000.DBW    8
 
NCHN: NOP   0
 
Zurück
Oben