Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Real in INT wandeln? & Liste der SFC/SFB?

  1. #1
    Registriert seit
    25.03.2005
    Ort
    Dortmund
    Beiträge
    139
    Danke
    25
    Erhielt 5 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin moin,


    die Technikerschule hat mich nun auch mal wieder in die Bedrängnis gebracht, mich mit der S7 zu befassen.
    Für jemanden, der nur mit Allen Bradley Steuerungen zu tun hat, ist das eine ziemlich Umstellung.
    Aber ich will ja hier nicht über Vor- und Nachteile der verschiedenen Systeme lamentieren, sondern zwei Fragen stellen.

    Zum einen stand ich heute vor dem Problem, dass ich einen REAL-Wert in einen INT-Wert umwandeln wollte.

    Mit dem "Runden"-Befehl (wie immer der Baustein auch richtig hiess - er rundet auf jeden Fall den Wert) konnte ich aus dem REAL-Wert einen DINT Wert machen.
    Nun bliebe ja theoretisch die Möglichkeit, das zweite Wort de DINT Wert zu nehmen und als INT Wert zu behandeln. (Dass ich vorher prüfen muss, wie groß der Wert ist und dass er nicht den Rahmen des INT sprengt, versteht sich von selbst.)Da bliebe dann nur die Frage, was mit dem Vorzeichen passiert? Das wird doch in Bit 31 bzw. in Bit 15 gespeichert, oder?
    Und wie mache ich das, wenn ich den DINT-Wert in der Schnittstelle eines FCs angelegt habe? Da steht zwar eine Adresse (in diesem Falle 0.0), aber ich habe leider keine Ahnung, wie ich diese Adresse ansprechen kann. (Merker würde ich gerne vermeiden)




    Die andere Frage wäre, ob es irgendwo eine Liste der SFC und SFB Bausteine aus den Standard Libraries gibt? Die Hilfefunktion vom Simatic Manager hat mir da nicht weitergeholfen.




    Vielen Dank schonmal im vorraus.



    Gruß

    Hauke (der im Mai 2012 endlich Techniker ist )
    Zitieren Zitieren Real in INT wandeln? & Liste der SFC/SFB?  

  2. #2
    Registriert seit
    20.02.2008
    Beiträge
    332
    Danke
    16
    Erhielt 40 Danke für 37 Beiträge

    Cool

    Kurz und kompakt:

    RND: Round Real to DINT
    DTI: DINT TO INT

    SFB/SFC-Liste: http://www.automation.siemens.com/do...S7_SFC.pdf?p=1

    Wenn Du einen FC/FB als Unterprogramm aufrufst, wird automatisch die projektierte Schnittstelle angezeigt, die Du dann mit Konstanten/Variablen beschreiben kannst. Variablen sind Merker oder Datenbausteinvariablen. Solltest Du die Schnittstelle eines bereits aufgerufenen Bausteins nachträglich ändern, wird dieser rot dargestellt. Rechter Mausklick -> Zugriff aktuallisieren, dann ist meist wieder alles OK.
    Geändert von asci25 (22.03.2010 um 22:45 Uhr)

  3. Folgender Benutzer sagt Danke zu asci25 für den nützlichen Beitrag:

    HSThomas (23.03.2010)

  4. #3
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von HSThomas Beitrag anzeigen
    Da bliebe dann nur die Frage, was mit dem Vorzeichen passiert? Das wird doch in Bit 31 bzw. in Bit 15 gespeichert, oder?
    Das Vorzeichen bleibt an vorderster Stelle.
    Code:
    1000 0000 0000 0000 0000 0000 0000 0000
    >------ DBW 0 -----<>------ DBW 2 -----<
    >----------------- DBD 0 ----------------<
    Zitat Zitat von asci25 Beitrag anzeigen
    DTI: DINT TO INT
    Den Befehl gibt es nur in SCL, in AWL brauchst Du den nicht.
    Zitat Zitat von HSThomas Beitrag anzeigen
    Und wie mache ich das, wenn ich den DINT-Wert in der Schnittstelle eines FCs angelegt habe? Da steht zwar eine Adresse (in diesem Falle 0.0), aber ich habe leider keine Ahnung, wie ich diese Adresse ansprechen kann. (Merker würde ich gerne vermeiden)
    Wo steht da 0.0?
    An der Schnittstelle des FC musst Du ja einen Namen angeben.
    Und in der FC einfach:
    L #Namen
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  5. Folgender Benutzer sagt Danke zu Paule für den nützlichen Beitrag:

    HSThomas (23.03.2010)

  6. #4
    Registriert seit
    20.02.2008
    Beiträge
    332
    Danke
    16
    Erhielt 40 Danke für 37 Beiträge

    Standard

    Zitat Zitat von Paule Beitrag anzeigen
    Den Befehl gibt es nur in SCL, in AWL brauchst Du den nicht.


    AWL: DTI
    SCL: DINT_TO_INT()

    Zitat Zitat von Paule Beitrag anzeigen
    ...brauchst Du den nicht.
    Wichtige Besonderheit: Siemens verwendet das Motorola-Format - nicht das Intel-Format.

    Das Vorzeichen befindet sich in DBW2, nicht in DBW0! In DBW0 findest Du den für einen Integer verwertbaren Zähl-Wert. Der Befehl DTI fasst Vorzeichen und Wert in einem 16-Bit-Wort zusammen. Ohne DTI wird aus einer 65535 (DINT) sonst eine -1 (INT), bei positiven Zahlen ( <32768 ) merkst Du dieses Verhalten nicht.
    Geändert von asci25 (22.03.2010 um 23:38 Uhr)

  7. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Hallo Hauke,

    auch die Step7-Onlinehilfe enthält die Beschreibung aller SFB und SFC
    Im Simatig-Manager auf
    * Hilfe > Hilfethemen ...
    * im Reiter Inhalt ganz unten (vorletztes): Aufruf von Referenzhilfen (KOP...) Doppelklick
    * Sprachbeschreibungen, Bausteinhilfen ...
    * nun steht rechts u.A.: Hilfe zu SFBs/SFCs

    oder einfach im Bausteinordner einen vorhandenen SFC/SFB markieren und F1.

    Mit Step7 wird normalerweise auch das PDF mit der Beschreibung der SFB/SFC installiert:
    Start > SIMATIC > Dokumentation > Step7 > STEP 7 - System- und Standardfuntionen für S7-300 und S7-400

    Dritte Variante: Im KOP/AWL/FUP-Editor:
    * Ansicht > Übersichten Ctrl-K (oder Einfügen > Programmelemente Ctrl-G geht auch)
    In dem neuen Teilfenster (links) ganz unten: Bibliotheken > Standard Library > System Function Blocks
    einen SFB oder SFC markieren und F1


    Hilfe zu AWL-Operationen
    im AWL-Editor den Cursor in die Zeile mit einer AWL-Operation stellen oder eine Operation eintippen und F1


    Umwandeln REAL -> INT
    "RND" wandelt REAL -> DINT, umwandeln DINT -> INT ist nicht nötig (es gibt auch keine AWL-Operation dafür).
    Es reicht zu prüfen, ob das RND-Ergebnis im Bereich -32768 ... +32767 liegt, dann ist der INT schon richtig
    mit Vorzeichen. Wichtig: Falls mit Vergleichsoperation, dann >D und <D, NICHT >I und <I !!!

    Du brauchst nun nur die niederwertigen 16 Bit weiterverarbeiten. Wenn der INT positiv ist, dann ist das
    H-Word des DINT alles 0-Bits, wenn der INT negativ ist, dann ist das H-Word des DINT alles 1-Bits.
    Also die Bits 15 bis 31 sind dann alle gleich und sind quasi alle Vorzeichen! Das ist sowas von redundant,
    deshalb können die Bits 16 bis 31 einfach wegfallen. Bit 15 als Vorzeichen ist ja noch da.

    Meine REAL -> INT Wandlung geht so:
    Code:
          L     #REAL_Wert
          RND               // REAL -> DINT
          SPO   ERR         // Abbruch, wenn Fehler bei RND (zu groß, zu klein, NaN)
          PUSH              // Akku2 = Akku1 = DINT-Wert
          ITD               // Akku1.0-15 -> DINT
          ==D               // wenn dabei das gleiche wie in Akku2 rauskommt,
          SPB   OK          // dann ist das Ergebnis im Bereich -32768 ... +32767 
    
    ERR:  NOP   0           // Fehler: Wandlung nicht möglich
    //    ...               // Fehlerreaktion
    
    OK:   T     #INT_Wert   // Wandlung erfolgreich, untere 16 Bit -> INT
    Bei Siemens-SPSen kommt im Speicher zuerst das H-Word und danach das L-Word:
    DBD0 (oder MD0) sei der 32-Bit DINT mit den Bits 0 bis 31
    DBW0 (oder MW0) sind die höherwertigen Bits 16 bis 31 inklusive Vorzeichen
    DBW2 (oder MW2) sind die niederwertigen Bits 0 bis 15 = das 16-Bit INT

    Das Vorzeichen des DINT ist Bit 31 und liegt an Adresse DBX0.7 (oder M0.7).
    Das Vorzeichen des INT ist Bit 15 und liegt an Adresse DBX2.7 (oder M2.7).

    Gruß
    Harald
    Zitieren Zitieren Step7-Hilfen und ein paar Sachen richtigstellen ...  

  8. Folgende 2 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    Edelk (03.06.2015),HSThomas (23.03.2010)

  9. #6
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.733
    Danke
    317
    Erhielt 1.522 Danke für 1.283 Beiträge

    Standard

    Zitat Zitat von asci25 Beitrag anzeigen

    AWL: DTI
    Wann hast du das letzte mal versucht, diesen Befehl in AWL zu tippen?
    Es gibt diesen Befehl ganz einfach nicht.
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  10. #7
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von asci25 Beitrag anzeigen
    AWL: DTI
    SCL: DINT_TO_INT()
    >>> Schande über mich <<<
    Das mit dem Wort-Dreher darf nicht passieren!

    Ich habe Siemens Version: 5.4 SP5 und da gibt es kein DTI
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  11. #8
    Registriert seit
    20.02.2008
    Beiträge
    332
    Danke
    16
    Erhielt 40 Danke für 37 Beiträge

    Standard

    Nach einem gesunden Schlaf funktioniert das Gedächtnis wieder richtig

    Richtig - das war was anderes, an das ich mich erinnerte: INT --> REAL, da muss man über DINT gehen, sonst gibt es das Problem mit den negativen Zahlen...

    Die einfachste Umwandlung ist demnach:

    Code:
    L   #DINT_VARIABLE
    T   #INT_VARIABLE
    Ich hatte es einfach mit ITD verwechselt.

  12. #9
    HSThomas ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.03.2005
    Ort
    Dortmund
    Beiträge
    139
    Danke
    25
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Okokokokokok.... das waren ja schonmal eine ganze Menge Antworten.


    Am Anfang hatte ich ja noch den irrsinnigen Glauben, man könnte das einfach in FUP (wir programmieren da eigentlich nur in FUP) erledigen - muss ich wohl umdenken.
    Theoretisch kann ich doch den Baustein umwandeln, das Netzwerk in einer anderen Sprache programmieren und dann wieder zurück wandeln, oder? (Klar, das Netzwerk steht dann weiter in der anderen Sprache da)


    Wenn das ganze eigentlich nicht notwendig ist - wie kann ich dann das Low-Word des Wertes, der im OB1 am Ausgang des Bausteins (In diesem Falle FC1) einem analogen Ausgang (PAW752) zuweisen? Muss ich da dann einen Umweg über ein MDW machen oder geht das auch anders?


    Problematischerweise kann ich das ganze erst wieder probieren, wenn die Abendschule nach den Osterferien wieder losgeht (Ferien... juhuu....).
    In der Firma verwenden wir keine Siemens-SPSen, daher fehlt mir da die Testmöglichkeit.

  13. #10
    HSThomas ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.03.2005
    Ort
    Dortmund
    Beiträge
    139
    Danke
    25
    Erhielt 5 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Paule Beitrag anzeigen
    Wo steht da 0.0?
    An der Schnittstelle des FC musst Du ja einen Namen angeben.
    Und in der FC einfach:
    L #Namen

    In der Schnittstellendeklaration steht im Unterbereich "Temp" neben den Namen der Variablen, ihrem Datentyp auch eine Adresse - jedenfalls auf unserem Schulrechner

Ähnliche Themen

  1. REAL in TIME wandeln in SCL
    Von zloyduh im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 17.03.2011, 22:24
  2. Float in Real wandeln - SCL
    Von Gerri im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 23.07.2010, 15:29
  3. real in ein word wandeln
    Von Dip im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 07.08.2009, 11:35
  4. REAL auf INT wandeln
    Von neibeck im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 14.07.2008, 18:01
  5. von Real nach Integer wandeln
    Von tuppes38 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 27.09.2005, 18:41

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •