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

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

Thema: Array of String kopieren

  1. #1
    Registriert seit
    31.08.2015
    Beiträge
    10
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Tag zusammen,

    ich möchte einen vorbelegten Array[0..4] of String in einen Anderen Array[0....20] of String kopieren.
    Beim wiederholten Kopieren der Werte sollen diese an die bereits kopierten Werte angehängt werden , bis das Array voll ist.

    Leider scheitere ich bereits beim ersten Kopieren der Werte.
    Ich habe bereits einige Systemfunktionen ausprobiert, u.A. blkmov, Fill_Blk und ReadfromArrayDB , leider war hier nichts passendens dabei.
    Egal wie ich auf den Inhalt des DBs zugreifen möchte, es scheint immer etwas nicht zu passen.
    Oder muss ich eventuell zunächst die einzelnen Strings in ein anderes Format wandeln ?

    Kann es sein, das mir der optimierte Baustein probleme macht, und ich dies deaktivieren sollte ?

    Vielen Dank und Grüße
    Zitieren Zitieren Array of String kopieren  

  2. #2
    Registriert seit
    15.10.2014
    Beiträge
    78
    Danke
    14
    Erhielt 18 Danke für 15 Beiträge

    Standard

    Hallo,

    benutzt doch die "S_Move" Funktion und kopiere in einer Schleife. Davor musst du natürlich noch suchen welche Position im Array frei ist.

    Stefan

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

    Tomatensalat (22.08.2016)

  4. #3
    Tomatensalat ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.08.2015
    Beiträge
    10
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo ,
    super vielen Dank . Genau so eine Funktion habe ich gesucht.
    Kannst du mir noch kurz erklären, wie ich das kopieren in einer Schleife am besten umsetze?

    Da muss ich ja mit indirekter Adressierung arbeiten.
    So siehts aktuell aus , aber möchte ja alle strings kopieren...



    Ich denke für eine Schleife sollte man auf SCL bzw. AWL umsteigen, oder ?
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: jpg 1.JPG (13,0 KB, 20x aufgerufen)
    Geändert von Tomatensalat (22.08.2016 um 11:58 Uhr)

  5. #4
    Registriert seit
    15.10.2014
    Beiträge
    78
    Danke
    14
    Erhielt 18 Danke für 15 Beiträge

    Standard

    Hier ein Beispiel in SCL. Du kannst es auch in AWL umsetzen wenn du magst. SCL finde ich aber einfacher.

    Die erste Schleife sucht die erste frei Stelle im Speicher.
    Die zweite Schleife kopiert wenn Platz ist die Werte aus dem anderen String Array.

    Code:
    (*
    #"Array_1" = Array[0..4] of String
    #"Array_2" = Array[0..20] of String
    
    Temp:
    #"i" = int  - Erste Freie Stelle im Array
    #"ii" = int
    *)
    
    /// Frei stelle im Array_2 suchen
    FOR #i := 0 TO 20 DO
        
        IF #Array_2[#i] = '' THEN
            EXIT;
        END_IF;
    END_FOR;
    /// String kopieren wenn Platz im Speicher
    FOR #ii := 0 TO 5 DO
        
        IF #i <= 20 THEN                        // Nur kopieren wenn Speicher nicht voll
            #Array_2[#i] := #Array_1[#ii];      // kopieren
            #ii := #ii + 1;                     // Index erhöhen
        ELSE
            EXIT;                               // Schleife verlassen sofort verlassen wenn Speicher voll
        END_IF;
        
    END_FOR;

    Stefan

  6. #5
    Tomatensalat ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.08.2015
    Beiträge
    10
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi Stefan592 ,

    ich habe das nun etwas anderst umgesetzt , jedoch vom Priznip her gleich:
    Code:
    IF #"liste befüllen" THEN
        
        FOR #ii := 0 TO 19 DO // DB Messprogramm durchlaufen und freien Platz finden
            
        IF "Messprogramm"."THIS"[#ii] =''  THEN
            
            FOR #i := 0 TO 19 DO // Durchlaufe den Eingangsstring 20 mal 
                "Messprogramm"."THIS"[#ii] := "Eingangsstring".Stringarray[#i];
                 #ii := #ii + 1;
            END_FOR;
          
        END_IF;
        END_FOR;
    END_IF;
    Über das Bit "liste befüllen" möchte ich, dass die Werte von EingangsDB genau einmal kopiert werden. Aktuell ist es so, dass die Werte permanent in der Schleife kopiert werden , bis der Ziel DB voll ist. Mir fehlt noch die richtige Abbruchbedingung. Kannst du mir sagen, wo ich diese Bedingung am besten reinmache ? Vielen Dank
    Geändert von Tomatensalat (23.08.2016 um 16:59 Uhr)

  7. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.194
    Danke
    389
    Erhielt 2.294 Danke für 1.908 Beiträge

    Standard

    ich würde es in etwa so machen :
    Code:
    IF #"liste befüllen" THEN
        
        FOR #i := 0 TO 19 DO // DB Messprogramm durchlaufen und freien Platz finden
            
        IF "Messprogramm"."THIS"[#i] =''  THEN
            
            FOR #j := 0 TO 4 DO 
                #p := #i + #j ; 
                if #p <= 19 then 
                   "Messprogramm"."THIS"[#p] := "Eingangsstring".Stringarray[#j];
                end_if ;
            END_FOR;
          
        END_IF;
        END_FOR;
    END_IF;
    ... ist aber ungetestet ...

    Gruß
    Larry

  8. #7
    Tomatensalat ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.08.2015
    Beiträge
    10
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Larry Laffer,
    deine Version funktioniert genau gleich . Die Werte aus dem Eingangsstring werden in der Schleife kopiert, bis Messprogramm voll ist. Das soll aber nicht so sein .
    Muss die Bedingung "liste befüllen" eventuell eine Flanke sein , damit nur einmal abgearbeitet wird ?

  9. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.194
    Danke
    389
    Erhielt 2.294 Danke für 1.908 Beiträge

    Standard

    Natürlich muss das eine Flanke sein - ich hatte angenommen, dass das schon so ist.
    Weißt du, wie man die in das Script einbaut ?

    Gruß
    Larry

  10. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Tomatensalat (24.08.2016)

  11. #9
    Tomatensalat ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.08.2015
    Beiträge
    10
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habe es so versucht , vom Prinzip her klappt es, hat aber auch nicht die gewünschte Wirkung: sprich, es ist gleich wie vorher .
    Code:
    #Pulse := #"liste befüllen" AND NOT #Flankenmerker;
    #Flankenmerker := #"liste befüllen";
    
    IF #Pulse THEN.....

  12. #10
    Tomatensalat ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.08.2015
    Beiträge
    10
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Okay habe es hinbekmmen, vielen Dank für eure Hilfe !!!

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 04.08.2015, 15:13
  2. Step 7 Char aus Array in String kopieren
    Von jierten im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 05.05.2015, 12:36
  3. Aus einem ARRAY ausgewählte Werte in ein anderes ARRAY kopieren
    Von lacosta19 im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 06.08.2014, 15:42
  4. Antworten: 13
    Letzter Beitrag: 24.09.2009, 12:54
  5. Ein String kopieren in einen anderen String
    Von CanYouHelpMe im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 25.09.2008, 17:21

Stichworte

Lesezeichen

Berechtigungen

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