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

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

Thema: String im Programm eingeben

  1. #11
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.260
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich lege mit i.d.R. einen DB an, der u.a. auch Stringkonstanten enhält.

    Z.Bsp. einen String[30], Variablenname Anlage, Inhalt "Stanzmaschine 1".
    Dann kann ich am SFC 20 direkt DB20."Anlage" verwenden.
    Oder ich fülle den Db zur Laufzeit mit den Strings, die ich benötige, z.Bsp. einer
    Artikelnummer und habe am SFC 20 immer DB20."Artikelnummer" stehen.

    Ansonsten ist SCL im Falle von Stringverarbeitung 1. Wahl in der S7, aber nicht
    unbedingt mit vielen langen Temp-Strings arbeiten, das führt rasch zu einem Überlauf
    beim Stack für die lokalen Variablen.
    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. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Paule (13.01.2012)

  3. #12
    Avatar von Paule
    Paule ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Irgendwie klappt das nicht

    1. Variante in SCL:
    Endet schon bei der Eingabe mit Fehler von einer Parameterübergabe bin ich da noch weit weg.

    String.jpg

    2. Variante in AWL:
    Text 'HausNr' als fester String
    Hausnummer als Variable
    Hausnummer mit dem I_STRING (FC16) in einen Sting gewandelt.
    Anschließend wollte ich die beiden mit dem INSERT (FC17) zusammensetzen.
    Allerdings setzt der Baustein selbständig ein '+' dazu :
    'HausNr + 10' und das ist unbrauchbar.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  4. #13
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Hallo,

    Mit Strings hantiere ich selten, aber in der Hilfe zum Blockmove steht:

    Wenn Sie für die Parameter SRCBLK und DSTBLK Variablen vom Datentyp STRING verwenden, interpretiert STEP 7 diese Variablen als ARRAY of BYTE (einschließlich den beiden Verwaltungsbytes mit maximaler und aktueller Länge). Das führt dazu, dass die SFC 20 byteweise kopiert: Kopiert werden also das Byte mit maximaler Länge, das Byte mit aktueller Länge und der eigentliche String.

    Wenn bei einem der Parameter SRCBLK oder DSTBLK oder bei beiden der Datentyp STRING zur Anwendung kommen soll, müssen Sie die zugehörigen ANY-Pointer selbst aufbauen. Ist die Quelle ein String, werden maximal nur die aktuell im String enthaltenen Zeichen kopiert. Sind Quelle und Ziel jeweils ein String, wird die aktuelle Länge des Ziels auf die Anzahl der kopierten Zeichen gesetzt.

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

    Paule (13.01.2012)

  6. #14
    Registriert seit
    27.08.2003
    Ort
    Schweitenkirchen
    Beiträge
    472
    Danke
    101
    Erhielt 73 Danke für 59 Beiträge

    Standard

    Unter SCL und Blockmove über ne Variable arbeiten.

    DeinString:='Hausnr'

    "Deinstring" dann an den Blockmove.
    Wobei es unter SCl sogar direkt gehen kann/muss:
    DB2.adresse:=Deinstring;
    oder
    DB2.adresse:='Hausnr';

    am besten die Strings noch vorher Initialisieren.

    Gruss Andi
    Wenn ich einen meiner Finger in eines deiner Nasenlöcher stecke, haben wir beide nen Finger in der Nase

  7. Folgender Benutzer sagt Danke zu Zefix für den nützlichen Beitrag:

    Paule (13.01.2012)

  8. #15
    Avatar von Paule
    Paule ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    OK, dann muss ich es noch mal mit dem direkten "Durchreichen" probieren.

    Danke fürs erste.
    Werde mich für dieses Wochenende mal abmelden.
    (Höchstens mal zwischendurch kurz reinschauen)
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  9. #16
    Avatar von Paule
    Paule ist offline Erfahrener Benutzer
    Themenstarter
    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 Zefix Beitrag anzeigen
    Unter SCL und Blockmove über ne Variable arbeiten.

    DeinString:='Hausnr'

    "Deinstring" dann an den Blockmove.
    Wobei es unter SCl sogar direkt gehen kann/muss:
    DB2.adresse:=Deinstring;
    oder
    DB2.adresse:='Hausnr';

    am besten die Strings noch vorher Initialisieren.
    Eins noch!
    Jetzt soll als INPUT Variable die tatsächlich Hausnummer (Integer) noch dazu kommen.
    Wie verbinde ich die zwei das es ein Sting ergibt?
    Code:
       DB2.adresse:='Hausnr' + Hausnummer;   // das wird so nicht gehen, oder?
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  10. #17
    Registriert seit
    24.05.2006
    Beiträge
    234
    Danke
    14
    Erhielt 77 Danke für 57 Beiträge

    Standard

    Es gibt da einen Schwung IEC-Funktionen in der STEP7 Bibliothek, unter anderem finden sich da auch:
    FC2: CONCAT: Zusammenfassen zweier STRING-Variablen
    FC16: I_STRING: Formatwandlung INT nach STRING

  11. Folgender Benutzer sagt Danke zu hovonlo für den nützlichen Beitrag:

    Paule (15.01.2012)

  12. #18
    Registriert seit
    10.11.2010
    Beiträge
    21
    Danke
    1
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Eigentlich sieht es dann so aus:

    DB2.adresse := CONCAT(in1:='Strasse',In2:=(INT_TO_STRING(Hausnummer));

    aber die Funktion INT_TO_STRING macht immer ein Vorzeichen dazu, das keiner will also
    kann man es so machen oder so ähnlich...

    DB2.adresse := CONCAT(in1:='Strasse',In2:=DELETE(IN:=INT_TO_STRING(Hausnummer),l:=1,P:=1));

    dann kommt raus
    DB2.adresse := 'Strasse13



    schoenes WoE
    ASAB

  13. Folgender Benutzer sagt Danke zu Asab für den nützlichen Beitrag:

    Paule (15.01.2012)

  14. #19
    Avatar von Paule
    Paule ist offline Erfahrener Benutzer
    Themenstarter
    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 Asab Beitrag anzeigen
    DB2.adresse := CONCAT(in1:='Strasse',In2:=DELETE(IN:=INT_TO_STRING(Hausnummer),l:=1,P:=1));

    dann kommt raus
    DB2.adresse := 'Strasse13
    Hallo ASAB,
    genau so funktioniert es, vielen Dank.
    Und die Erklärung warum der FC16 selbständig ein Pluszeichen dazu setzt (Vorzeichen) hast du auch noch gleich dazu gegeben. Danke

    Ich könnte jetzt schon zufrieden sein, aber man bekommt ja nie genug:
    Und zwar wenn ich jetzt die direkte Adressierung "DB2.adresse" als Output übergeben möchte und als es folgend deklariere:
    Code:
       VAR_OUTPUT
          Adresse : STRING; // STRING[254] habe ich auch probiert
       END_VAR
    
       Adresse := CONCAT(in1:='Strasse',In2:=DELETE(IN:=INT_TO_STRING(Hausnummer),l:=1,P:=1));
    kommt die Fehlermeldung:
    Parameterzuweisung nicht korrekt.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  15. #20
    Avatar von Paule
    Paule ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Paule Beitrag anzeigen
    Und zwar wenn ich jetzt die direkte Adressierung "DB2.adresse" als Output übergeben möchte und es folgend deklariere:
    Code:
       VAR_OUTPUT
          Adresse : STRING; // STRING[254] habe ich auch probiert
       END_VAR
    
       Adresse := CONCAT(in1:='Strasse',In2:=DELETE(IN:=INT_TO_STRING(Hausnummer),l:=1,P:=1));
    kommt die Fehlermeldung:
    "Parameterzuweisung nicht korrekt".
    Hat keiner eine Idee?
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

Ähnliche Themen

  1. Antworten: 13
    Letzter Beitrag: 24.09.2009, 12:54
  2. Ein String kopieren in einen anderen String
    Von CanYouHelpMe im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 25.09.2008, 17:21
  3. Antworten: 8
    Letzter Beitrag: 03.09.2008, 09:22
  4. Antworten: 5
    Letzter Beitrag: 21.06.2007, 17:04
  5. Zeiten eingeben?
    Von ottopaul im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 08.12.2006, 20:16

Lesezeichen

Berechtigungen

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