Step 7 S5 Timer... was will mir dieser Kuenstler mitteilen...

Gelee

Level-1
Beiträge
11
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an alle!

Ich hab da ein kleines Verstaendnisproblem mit einer Anlage und einem vorgegebenem Standard Funktionsbaustein (mit entsprechender mechanischer Einheit) von meinem Arbeitgeber.
Es geht dabei um Kunststoffschweissung eines Zukaufteils an unsere Produkte. Wir haben da frei einstellbare Parameter mit Druck, Temperatur und Zeit.
Problematisch bei dem Verfahren ist, das Zeiten zwischen Produkt und Bauteil immer unterschiedlich sind und damit die Bewegungen immer Synchronisiert werden müssen um die beiden Teile im gleichen Moment (absetzen vom Heizelement) zusammengefuehrt werden. Soviel zum grobem Verstaendnis der Funktionsweise...

Nun hat mich besagte Anlage heute etwas geaergert und ich hab mir dann mal den verschluesselten Baustein geoeffnet und angeschaut. Tolles Konstrukt, anscheinend alter S5-Programmierer... Alles in AWL... undurchschaubar Kompliziert fuer mich als Quereinsteiger im Programmieren und wie es Firmenstandards an sich haben MUSS ja alles und jedes ueberwacht und moeglichst noch nach IEC programmiert sein.

Und natuerlich alles mit ,von aussen angeschalteten, S7-Timern...

Jetzt zu dem Codeschnipsel vom Baustein, den ich nicht ganz verstehe:

Code:
      L     #E1_Zeit1
      L     #E1_Zeit2
      +I    
      T     #E1_GesamtZeit
      L     #E2_Zeit1
      L     #E2_Zeit2
      +I    
      T     #E2_Gesamtzeit
      L     #E2_Zeit1
      L     #E2_Zeit2
      -I    
      T     #Time_diff  
      L     10
      *I    
      T     #Time_diff
      L     #Time_diff
      T     #Temp              // Lokaldatenwort 30
      T     #Dif_tempo       // Stat-Variable
      U     L     30.7           // Hier hoert mein Verstaendnis auf...
      SPBN  M01a

Warum wird hier mit diesem einzelnem Bit entschieden!? Ich verstehe echt nicht, was das bewirken soll...

Edit: Warum kann ich keine Umlaute verwenden!?
 
Zuletzt bearbeitet:
Wenn Temp vom Datentyp Int ist und an Lokaldatenadresse 30.0 beginnt, dann ist das Bit 30.7 das Vorzeichenbit in dieser Integervariable.
D.h. wenn 30.7 gesetzt ist, dann ist der Wert von Temp negativ.

Edit: Korrektur s.u.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich nehme an Time_diff ist vom Datentyp TIME ? Oder zumindes DINT. Is ja auch egal. Jedenfalls wir der Differenzwert nach LW30 geschrieben (#Temp). Wenn diese Differenz einen bestimmten Wert überschreitet, nämlich das Bit 7 im LW30 Logisch 1 wird ( U L30.7) wird der Coder unter SPBN M01a ausgeführt. Jetzt müsste man wissen was für Datentypen da im Spuel sind.
 
Edit: Das LW30 ist als WORD definiert!

Und für weiteres Verstaendniss, normalerweise sind typische Gesamtzeiten nicht mehr als 20 -35 Sek.

Edit2: Das nachfolgende muss ja dann dafür da sein, bei entsprechenden Zeitunterschieden entweder E1 oder E2 zuerst zu starten!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Mein erster Post war doch richtig, L30.7 ist gesetzt wenn der Wert als Integer interpretiert negativ ist.
Mit WORD funktioniert das genauso, wenn die Operation -I ist, also auf 16 Bit Integer. Mit den Datentypen nimmt AWL das nicht so genau.

Was hat das denn mit S5 Timern zu tun? Denn mit diesen Zeitwerten lässt sich nicht so einfach rechnen.
 
Ich hab mir jetzt nochmal die High-Byte/Low-Byte Siemens-Geschichte vor Augen geführt und stimme dir zu, Thomas! Das AWL Datenformate nicht so genau nimmt, war mir auch klar. Aber ich verweise einfach mal auf deine Signatur ;).

Irgendwie war mir, ganz dunkel, so das S7-Timer nichts anderes als S5-Timer sind... Bin jetzt gar nicht Firm in S5, falls ich einen Fehler gemacht habe, korrigiert mich gerne... Bin nur Elektroniker und ärger mich halt mit hochkomplexen AWL-/IEC-Programmierten S7 rum...
 
Bei den Timern (also T..) sind die Zeitangaben BCD codiert. Wenn jemand eine Zeitangabe für einen Timer in einer Word-Variable ablegt was durchaus mal gemacht wird, dann lässt sich mit diesen Zeitwerten nicht mit +I oder -I rechnen, zumindest nicht wenn sie schon im BCD-Format sind.
Wenn die Zeitwerte aus deiner Berechnung oben dann doch auf einen Timer (EVERZ, usw.) gehen, dann muss der Zeitwert erst in BCD umgewandelt werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das passiert dann auch weiter unten in diesem Baustein... da hätte ich eigentlich auch selbst drauf kommen koennen, was da passiert...

Trotzdem Danke!

Edit: Zeiten werden im Baustein von außen als INT vorgegeben...
 
Zuletzt bearbeitet:
Es ist zwar nicht falsch, das höchstwertige Bit einer INT-Zahl als "VorzeichenBit" zu bezeichnen, aBär dadurch wird leider ein grobes Missverständnis provoziert.
Nämlich das Missverständnis "ich kann eine INT-Zahl negieren, indem ich das VorzeichenBit invertiere"!
Es wäre (nicht nur) deshalb durchaus sinnvoll, das "VorzeichenBit" aus dem Gedankengut zu verbannen.
Schliesslich kann man in AWL - egal, ob S7 oder S5 - das programmieren, was man meint, s.u..

Code:
      L     #E1_Zeit1
      L     #E1_Zeit2
      +I    
      T     #E1_GesamtZeit
      L     #E2_Zeit1
      L     #E2_Zeit2
      +I    
      T     #E2_Gesamtzeit
      L     #E2_Zeit1
      L     #E2_Zeit2
      -I    
      [COLOR=#ff0000]T     #Time_diff   // überflüssig, wird 3 Zeilen später ohnehin überschrieben.  [/COLOR]
      L     10
      *I                 // definiert die StatusBits A0 und A1 - kann man unten mit SPM auswerten
      T     #Time_diff
     [COLOR=#ff0000] L     #Time_diff   // überflüssig, steht noch im Akku.[/COLOR]
      [COLOR=#ff0000]T     #Temp        // überflüssig - wenn's nur für den entfallenen U L 30.7 gebraucht wurde.[/COLOR]
      T     #Dif_tempo   // Stat-Variable
[COLOR=#0000ff]      L     0            // lesbarer programmiert (?) - entfällt, wenn unten SPM statt SPB benutzt wird
      <I                 // lesbarer programmiert (?) - entfällt, wenn unten SPM statt SPB benutzt wird
      SPB   M01a         // lesbarer programmiert (?)
[/COLOR]

In den Anfängen von AWL gab's nicht alle Befehle, die man gebraucht hätte und der Spruch "never change a running program" wurde leider zu oft bemüht, wenn der Befehlssatz erweitert wurde und man auf eine lesbarere Schreibweise hätte umstellen können. Sogar bei der SINUMERIK 810 fehlte - besonders in der frühen Version - in AWL so ziemlich alles, was man gebraucht hätte ;o(
AWL ist nicht von Hause aus unlesbar - schlimmstenfalls für viele ungewohnt.
Häwenaissuiikend!
PS:
in rot: die ProgrammZeilen, die entfallen können
in blau: die geänderten bzw. hinzugefügten ProgrammZeilen
 
Zuletzt bearbeitet:
Just for Fun hab ich eben mal ne Quelle von dem Baustein generiert und die Zeilen vom Code gelesen...

über 6000 Zeilen AWL Code für diesen Block... Da würde ich nichts optimieren wollen...
 
Zurück
Oben