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

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 33

Thema: Funktion "RIGHT" setzt CPU in STOPP

  1. #11
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Und die FC für Delete und Right sind sicher in der SPS?
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  2. #12
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Hast du mal "Maschinendaten".Stringlänge kontrolliert?
    Was steht da drin? Da du 1 abziehst, kommt bei einer Länge von 0 ein negativer Wert bzw. ein hoher Word-Wert zustande, daran könnte sich right verschlucken. Ich würde noch eine Abfrage der Länge einfügen.

    Code:
    IF "Maschinendaten".Stringlänge > 1 THEN
     
       "Maschinendaten".Stringlaenge := "Maschinendaten".Stringlaenge - 1;
       "Maschinendaten".Zwischenstring := RIGHT(IN :=  DINT_TO_STRING("Maschinendaten".Seriennummer)
                                                        ,L :=  "Maschinendaten".Stringlaenge
                                                        );
    ENDIF;
    Eine zusätzliche Abfrage der Länge des STRINGS ist hier nicht notwendig.

    Die Funktion DINT_TO_STRING liefert einen STRING mit einer Länge von mindestens zwei Zeichen (Vorzeichen + Zahl)

    DINT = 0 => DINT_TO_STRING => STRING = +0

    Die Länge des STRINGS kann also nicht kleiner als 2 Zeichen sein.

    http://www.sps-forum.de/showpost.php...60&postcount=6

    http://www.sps-forum.de/showpost.php...61&postcount=7

    Gruß Kai

  3. #13
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo Kai,
    du wirst da sicherlich Recht haben mit dem, was du da schreibst. Mein Schuß ging hier auch ein bißchen "aus der Hüfte". Ich habe aber ganz grundsätzlich mit den Siemens-String-Routinen die Erfahrung gemacht, dass die erstens NICHT mit nicht initialisierten Strings arbeiten (wollen - auch wenn sie es zweifelsohne könnten), zweitens ungern einen String generieren und drittens ungern kaskadiert werden wollen - gerade nicht in Verbindung mit SCL.

    Gruß
    Larry

  4. #14
    Bensen83 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Also ich habe einmal alles auskommentiert bis auf das DINT_TO_STRING(.....)

    da geht die cpu auch in stop, warum auch immer. wenn ich anstelle von dint_to_string

    DI_STRING einsetze, funktioneirt es.
    Aber dann geht die cpu bei einer weiteren verwendung des zwischenstrings in stop. warum?
    Zitieren Zitieren String falsch?  

  5. #15
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    DI_String ist der symbolisch Name des FC's.
    Wenn du das ganze sinnvoll in SCL verwenden willst so wäre es mit DINT_to_String schon der richtige Weg.

    ... wenn du es wirklich wissen willst :
    Mach jede Aktion für sich erstmal einzeln und arbeiten (gerade bei den Strings) mit Zwischenvariablen. Ein String muss (hatte ich ja schon öfter mal geschrieben) für die Siemens-Bausteine immer einmal initialisiert worden sein.
    Das ist vor allem wenn die als TEMP deklariert sind, sehr wichtig.
    In SCL macht man das mit myString := '' ;

    Gruß
    Larry

  6. #16
    Bensen83 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Also es liegt nicht genau an der funktion dint_to_string, aber auch nicht an den anderen funktionen, der fehler ist eine kombination aus beiden

    Habe jetzt mal ziemlich viel auskommentier. (Fast alles im Baustein.)

    Ich habe eine concat funktion, diese wird auch einwandfrei ausgeführt.

    nun kommt eine dint_to_STRING funktion, diese funktioniert auch.

    al nächstes hatte ich eine weitere concat funktion, beim einkommentieren dieser funktion, ging die cpu in stop. ich habe diese funktion durch die erste (funktionierende) concat funktion ersetzt. und die cpu geht auch in stop. wie kann das sein?
    Zitieren Zitieren Fehler eingegrenzt  

  7. #17
    Bensen83 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Habe jetzt folgenden Code im Baustein:

    Code:
    "Maschinendaten".Auftragsnummer_gesamt := CONCAT(    IN1 := 'Auftragsnummer: '
                                                        ,IN2 := "Maschinendaten".Auftragsnummer
                                                        );
              
    "Maschinendaten".Seriennummer_gesamt := CONCAT(      IN1 := ' / Seriennummer: '
                                                        ,IN2 := DINT_TO_STRING("Maschinendaten".Seriennummer)
                                                        );    
    "Maschinendaten".Vorzeichenposition := FIND(IN1 :=  "Maschinendaten".Seriennummer_gesamt// IN: STRING
                                                ,IN2 :=  '+'// IN: STRING
                                                ); // INT
     
    (*
    "Maschinendaten".Seriennummer_gesamt := DELETE(IN :=  "Maschinendaten".Seriennummer_gesamt// IN: STRING
                                                   ,L :=  1 // IN: INT
                                                   ,P :=  "Maschinendaten".Vorzeichenposition // IN: INT
                                                   ); // STRING
    *)                                         
    "Maschinendaten".Maschinenidentifikation := CONCAT(  IN1 :=  "Maschinendaten".Auftragsnummer_gesamt
                                                        ,IN2 :=  "Maschinendaten".Seriennummer_gesamt
                                                        );
    Wenn ich nun den DELET teil wieder einkommentiere, geht die CPU sofort in STOP.
    Zitieren Zitieren DELETE macht auch Probleme  

  8. #18
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Ein String muss (hatte ich ja schon öfter mal geschrieben) für die Siemens-Bausteine immer einmal initialisiert worden sein.
    Kannst du das für jeden der von dir verwendeten Strings zur Laufzeit sicher stellen ?

  9. #19
    Bensen83 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Habe alle dort verwendeten Strings am anfang des Bausteins mit. z.B.
    "Maschinendaten".Maschinenidentifikation := '';
    beschrieben. ist das ok?
    Zitieren Zitieren ok  

  10. #20
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das ist OK und das meinte ich ...
    verbleibt also nur noch das :
    Code:
    "Maschinendaten".Seriennummer_gesamt := CONCAT(      IN1 := ' / Seriennummer: '
                                                        ,IN2 := DINT_TO_STRING("Maschinendaten".Seriennummer)
                                                        );
    ... von dem ich aus obigem Codeschnipsel entnehme, dass es immer noch so gemacht ist.
    Trotz des Beitrages von Kai (sorry ...) bin ich der Meinung, dass du hier doch noch (und sei es nur für mich) mal mit einem Zwischenstring arbeiten solltest.

Ähnliche Themen

  1. Antworten: 16
    Letzter Beitrag: 02.02.2010, 08:13
  2. Funktion "Global suchen"? (in allen FBs, DBs, ...)
    Von SPSstudent im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 11.01.2010, 08:52
  3. Antworten: 0
    Letzter Beitrag: 24.04.2007, 13:53
  4. Eine Art "MouseOver" Funktion
    Von Auto_FUX im Forum HMI
    Antworten: 9
    Letzter Beitrag: 31.03.2007, 13:33
  5. integrierte Funktion "Positionieren" Siemens CPU 3
    Von Anonymous im Forum Feldbusse
    Antworten: 1
    Letzter Beitrag: 18.11.2005, 17:09

Lesezeichen

Berechtigungen

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