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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: Array variabler Länge an FB übergeben (TIA 12, SCL, S7-1200 & S7-1500)

  1. #11
    joergflorian ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.05.2007
    Beiträge
    19
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo HB,

    Danke für Deine Hinweise. Das macht Hoffnung .

    Die Verwendung von BLOCK_DB klappt auf einer 1200 gar nicht. Dort gibt es statt dessen nur einen DB_ANY. Eben das was an diese unsäglichen PEEK und POKE dran kommt.
    Ja, das hab ich leider auch bemerkt. Ich bin mittlerweile wieder am Anfang und verwende halt momentan fixe Arraygrössen.

    Ich hoffe auf die nächsten Versionen von TIA.

    Grüsse
    Florian

  2. #12
    Registriert seit
    03.09.2009
    Beiträge
    122
    Danke
    15
    Erhielt 17 Danke für 17 Beiträge

    Standard

    Ich hatte bzw. habe immer noch das gleiche Problem wie joergflorian. Ich habe bis heute keine Lösung gefunden, die auf beiden Steuerungen lauffähig ist. Die einfachste Lösung wäre, wenn big S den Variant Data type für den user benutzbar gestalten würde, was nach meinen Informationen von Siemens NICHT für die V13 vorgesehen ist (Aussage: Man möchte den User vor sich selbst schützen).

    ... naja ich habe die Hoffnung zumindest noch nicht aufgegeben

  3. #13
    Registriert seit
    24.04.2013
    Beiträge
    306
    Danke
    21
    Erhielt 151 Danke für 86 Beiträge

    Standard

    Zitat Zitat von Beckx-net Beitrag anzeigen
    ... was nach meinen Informationen von Siemens NICHT für die V13 vorgesehen ist (Aussage: Man möchte den User vor sich selbst schützen).

    ... naja ich habe die Hoffnung zumindest noch nicht aufgegeben
    Hi Beckx-net

    mir hat man auf der Messe gesagt dass was zur V13 käme. Man soll den Typ prüfen können und lesen und schreiben können. Aber so richtig konkret wurde er leider nicht.

    Warten wir es ab
    HB

  4. #14
    Registriert seit
    07.03.2004
    Beiträge
    4.368
    Danke
    946
    Erhielt 1.157 Danke für 830 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    ...
    Wenn man beim TIA die Anwenderkonstanten auch bei Array-Größen einsetzen könnte...
    Genau darüber bin gerade eben gestolpert. Wie unsinig ist das denn jetzt beherrscht Siemens endlich Konstanten und dann kann man die nicht gescheit einsetzen.
    If you open your Mind too much, your Brain will fall out.

  5. #15
    Registriert seit
    24.04.2013
    Beiträge
    306
    Danke
    21
    Erhielt 151 Danke für 86 Beiträge

    Standard

    Hi

    in der V13 kann man lokale Konstanten für Array-Grenzen einsetzen.
    Aber globale Konstanten aus einer Symboltabelle gehen nicht. (Ach so da heißt ja jetzt Tagtable)
    Wieder mal nur die halbe Hausaufgabe gemacht.

    'n schön' Tach auch
    HB

  6. #16
    Registriert seit
    25.06.2008
    Ort
    Blomberg/Lippe
    Beiträge
    1.243
    Danke
    49
    Erhielt 123 Danke für 117 Beiträge

    Standard

    Hallo,

    ich stehe anscheinend an dem selben Problem momentan.
    Ich habe mir einen FC geschrieben, der einen String zerlegen soll. Am Ausgang würde ich gerne ein Array of String anlegen, indem dann die Teilstrings reinkommen. Aber die Größe des Arrays will ich nicht festlegen. Kann ich da irgendwie mit Pointer arbeiten und auch die Größe rauskriegen?
    Der FC wird dann in einem FB aufgerufen und das Array ist im Static abgelegt.
    Gruß
    Mobi


    „Das Einfache kompliziert zu machen ist alltäglich. Das Komplizierte einfach zu machen –
    das ist Kreativität“ (Charles Mingus).

  7. #17
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    11.871
    Danke
    500
    Erhielt 2.604 Danke für 1.877 Beiträge

    Standard

    Wenn du das Array im Static ablegst ist es doch auch fest.
    Wahlweise könntest du vielleicht für die Obergrenze eine Konstante einsetzen, so dass du wenigstens beim Projektieren das Array verändern kannst.
    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

  8. #18
    Registriert seit
    25.06.2008
    Ort
    Blomberg/Lippe
    Beiträge
    1.243
    Danke
    49
    Erhielt 123 Danke für 117 Beiträge

    Standard

    Hab es jetzt mit Variant geschafft.
    Klappt prima.

    Code:
    #iElements := UDINT_TO_INT(CountOfElements(#RESULT));
    IF #iElements = 0 OR NOT IS_ARRAY(#RESULT) OR TypeOfElements(#RESULT) <> String THEN
        ENO := false;
        RETURN;
    END_IF;
    
    #sTmp := '';
    FOR #iElement := 0 TO (#iElements - 1) DO
        #iError := MOVE_BLK_VARIANT(SRC := #sTmp, COUNT:=1, SRC_INDEX:=0, DEST_INDEX:=#iElement, DEST=>#RESULT);
        IF #iError <> 0 THEN
            ENO := false;
            RETURN;
        END_IF;
    END_FOR;
    
    #iLen := LEN(#STRING);
    #sTmp := #STRING;
    #iElement := 0;
    
    WHILE #iLen > 0 AND #iElement < (#iElements - 1) DO
        #iDelimiterPos := FIND(IN1 := #sTmp, IN2 := #DELIMITER);
        IF #iDelimiterPos > 0 THEN
            #iElementLen := #iDelimiterPos - 1;
            #iError := MOVE_BLK_VARIANT(SRC := LEFT(IN := #sTmp, L := #iElementLen),
                                        COUNT := 1, SRC_INDEX := 0, DEST_INDEX := #iElement, DEST => #RESULT);
            IF #iError <> 0 THEN
                ENO := false;
                RETURN;
            END_IF;
            #iRestLen := #iLen - #iDelimiterPos;
            #sTmp := RIGHT(IN := #sTmp, L := #iRestLen);
        ELSE
            #iError := MOVE_BLK_VARIANT(SRC := #sTmp, COUNT := 1, SRC_INDEX := 0, DEST_INDEX := #iElement, DEST => #RESULT);
            IF #iError <> 0 THEN
                ENO := false;
                RETURN;
            END_IF;
            #sTmp := '';
        END_IF;
        #iLen := LEN(#sTmp);
        #iElement := #iElement + 1;
    END_WHILE;
    Gruß
    Mobi


    „Das Einfache kompliziert zu machen ist alltäglich. Das Komplizierte einfach zu machen –
    das ist Kreativität“ (Charles Mingus).

  9. #19
    Registriert seit
    24.04.2013
    Beiträge
    306
    Danke
    21
    Erhielt 151 Danke für 86 Beiträge

    Standard

    Hallo Mobi

    du solltest dir für solche Zwecke mal SPLIT ansehen. Das kann Char-Arrays nach Begrenzungszeichen durchsuchen und in einzelne Strings zerlegen.
    Damit hast du FIND, LEFT und RIGHT in einem. Ich kann es jetzt gerade nicht ausprobieren, aber so weit ich mich erinnere, akzeptiert SPLIT auch STRINGs am SrcArray. Und wenn nicht, dann mach ein Kopie von #STRING mittels StringToChars() in ein #aTmp : CHAR[0..255];
    Das was SPLIT liefert kommt dann in #sTmp und das kann dann mittels MOVE_BLK_VARIANT nach #RESULT[i] kopiert werden.

    Damit hast du jeden Buchstaben nur drei mal kopiert. Dein Programm kopiert jeden Buchstaben im Schnitt 3+#iElements/2 oft.
    Das erste mal wegen #sTmp:=#STRING. Das zeite Mal bei SRC:=LEFT(). Diese Zuweisung legt dir einen weiteren versteckten String nach TEMP! Das dritte mal wegen MOVE_BLK_VARIANT(). Und dann hast du in deiner Schleife durch #sTmp:=RIGHT() jeden bis dahin übrig gebliebenen Buchstaben kopiert.

    Vor allem das Kopieren wegen RIGHT, spart dir SPLIT.

    'n schön' Tach auch
    HB

  10. #20
    Registriert seit
    25.06.2008
    Ort
    Blomberg/Lippe
    Beiträge
    1.243
    Danke
    49
    Erhielt 123 Danke für 117 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke. Ich werds mir mal ansehen in drei Wochen.
    Gruß
    Mobi


    „Das Einfache kompliziert zu machen ist alltäglich. Das Komplizierte einfach zu machen –
    das ist Kreativität“ (Charles Mingus).

Ähnliche Themen

  1. Array an DWORD übergeben (SCL)
    Von MatthiasH24 im Forum Simatic
    Antworten: 22
    Letzter Beitrag: 30.01.2014, 20:04
  2. Sprungmarke in SCL anlegen?! S7-1200 und TIA-Portal
    Von fk- princess im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 16.10.2012, 10:13
  3. Array länge mit SCL ermitteln
    Von Linowitch im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 08.07.2010, 12:12
  4. Array ohne Pointer übergeben? (SCL)
    Von tahren im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 15.06.2010, 12:08
  5. Array an FC übergeben und löschen (SCL)
    Von Isha im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 22.04.2010, 10:23

Lesezeichen

Berechtigungen

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