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

Ergebnis 1 bis 6 von 6

Thema: SCL: Probleme mit Concat/Insert

  1. #1
    Registriert seit
    02.08.2013
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Ich probiere nun schon seid einiger Zeit aus mir einen String zusammen zu basteln, aber es kommt nie das richtige raus. Im Prinzip "caste" ich mir aus einem integer einen String und möchte den dann anschließend immer auf eine Feste Länge (3 Stellen) bringen. Dafür will ich vorne einfach 0-er anfügen, jedoch funktioniert das bei mir nicht wirklich. SCL-Code:
    Code:
    nettoD := DELETE(IN:=nettoD, L:=1, P:=1); // das + vorne wegschneiden, Funktioniert einwandfrei
    IF LEN(nettoD) = 1 THEN
        nettoD := INSERT(In1:=nettoD,IN2:='0',P:=0);
    END_IF;
    IF LEN(nettoD) = 2 THEN
        nettoD := INSERT(In1:=nettoD,IN2:='0',p:=0);
    ELSIF LEN(nettoD) > 3 THEN
        nettoD :='-01';
    END_IF;
    Das gleiche habe ich schon mit
    Code:
    INSERT(IN1:=nettoD,IN2:='0',P:=0)
    probiert, hat aber leider auch nciht den Gewünschnten Effekt gebracht. Die Ausgabe ist in beiden Fällen immer "000".
    Weiß einer woran das liegen kann, und wie ich diesen Fehler beheben kann?
    nettoD ist eine Statische Variable.

    lg und Danke schonmal
    Zitieren Zitieren SCL: Probleme mit Concat/Insert  

  2. #2
    Registriert seit
    02.08.2013
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habe es jetzt mehr oder Weniger dadurch gelöst, dass ich eine temporäre variable "nettoDT" deklariert habe und dieser den Wert der CONCAT-Funktion zuweise. So funktioniert alles so wie gedacht.
    Nur, warum muss ich extra eine Variable Anlagen? Ich weiß, dass ich das CONCAT-Ergebnis auch wieder in der selben Variable speichern kann, allerdings funktioniert das (durch ausprobieren herausgefunden) auch nur, wenn sie als erste Variable übergeben wird. Weiß einer warum das so ist? Übergibt man sie als zweite variable, "verkommt" die Stringlänge des Ergebnisses zu -2.

    lg

  3. #3
    Kallemann Gast

    Standard

    Hallo.

    Ich kenne natürlich Deine Integer-Werte nicht, aber wenn sie niemals größer als 999 sind, dann könntest Du doch einfach 1000 dazuzählen und dann mit DELETE einfach die 1. Stelle entfernen.

    VG Carsten

  4. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von TheElkExperience Beitrag anzeigen
    Nur, warum muss ich extra eine Variable Anlagen? Ich weiß, dass ich das CONCAT-Ergebnis auch wieder in der selben Variable speichern kann, allerdings funktioniert das (durch ausprobieren herausgefunden) auch nur, wenn sie als erste Variable übergeben wird. Weiß einer warum das so ist? Übergibt man sie als zweite variable, "verkommt" die Stringlänge des Ergebnisses zu -2.
    Wie stellst du die -2 denn fest? Für die Stringlänge ist nur ein Byte vorgesehen. Und dieses hat überhaupt kein Vorzeichen, kann also auch keine negativen Werte annehmen.

    Edit:
    -2 wäre für ein Wort Hexadezimal 16#FE00, das wäre für ein Byte in vorzeichenloser Darstellung die Länge 254. Das ist die maxmale Länge eine Strings in der S7, und auch die Länge wenn du bei der Deklaration keine Längenangabe machst (stringvar : STRING;). Das ist also prinzipiell erstmal in Ordnung.
    Geändert von Thomas_v2.1 (03.08.2013 um 18:48 Uhr)

  5. #5
    Registriert seit
    02.08.2013
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @Kallemann: Das wäre natürlich auch eine Idee, Dankeschön!

    @Thomas-v2.1: Die -2 bekomme ich, indem ich mir während der Laufzeit das erste Byte der Stringvariablen anzeigen lasse. In Dezimaler Darstellung steht dann da "-2". Sollte aber deiner Beschreibung entsprechen, da ich dem String keine Länge explizit mit angebe.

    Weiß zufällig noch jemand, was es mit dem eher unverständlcihen Verhalten von Concat auf sich hat ? Ein Beispiel: (Annahme: var ist statisch)
    Code:
    var:='123;
    var:=CONCAT(var,'456');
    //ergebnis: var := '123456'
    var:='123';
    var:=CONCAT('0',var);
    //ergebnis: var:='000';
    Leider Findet man in der Dokumentation darauf keinerlei Hinweise: "Die Funktion CONCAT (FC2) faßt zwei STRING-Variable zu einer Zeichenkette zusammen"

    lg

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    mal so aus Neugier : Hast du mal versucht, dem CONCAT keine Konstante ('456') zu übergeben sondern einen 2. deklarierten String (kann hier auch TEMP sein) ?
    Also so :
    Code:
    var := '123;
    var2 := '456';
    var:=CONCAT(var,var2);
    Gruß
    Larry

Ähnliche Themen

  1. S7 - CONCAT mit Lokaldaten
    Von Majestic_1987 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 27.09.2012, 09:12
  2. Problem mit Systembaustein Concat
    Von qpec_hagen im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 23.05.2012, 11:15
  3. Probleme mit SCL
    Von Kubi im Forum CODESYS und IEC61131
    Antworten: 12
    Letzter Beitrag: 20.03.2009, 19:30
  4. Probleme mit DBs in SCL
    Von chrissi im Forum Simatic
    Antworten: 22
    Letzter Beitrag: 09.08.2007, 13:06
  5. Probleme mit 2 For Next Schleifen in SCL
    Von Gerold im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 07.10.2005, 11:01

Stichworte

Lesezeichen

Berechtigungen

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