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

Ergebnis 1 bis 8 von 8

Thema: String in Any wandeln im SCL

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Jungs ,

    hey hat einer ne Ahnung wie man einen String in ein Any wandeln kann ??

    ich brauche das um über ein Array of String die Eingänge bzw Augänge des BLKMOV SFC20 (sind vom Format ANY) durch eine Schleife zu beschreiben.
    Und somit einen Reihe von DB´s kopieren kann ohne viel Schreibarbeit zu haben sind nähmlich später 120 Stück zu erwarten.

    Hier mal der CODE :

    FUNCTION_BLOCK FB21
    VAR_TEMP
    // temporäre Variablen
    END_VAR
    VAR
    // statische Variablen
    DB_Array : ARRAY[1..3] OF STRING[9]:= 'DB1','DB2','DB3';
    DB_Array_INIT : ARRAY[1..3] OF STRING[9]:= 'DB11','DB12','DB13';
    i:INT :=1;
    end:INT:=3;

    END_VAR
    REPEAT
    // Anweisungsteil

    SFC_ERR := BLKMOV(SRCBLK := DB_Array[i]// IN: ANY , HIER DAS PROB DAS DER EINGANG NOCH STRING IST !!!
    ,DSTBLK := DB_Array_INIT[i] // OUT: ANY ,HIER DAS PROB DAS DER EINGANG NOCH STRING IST !!!
    ); // INT

    i := i+1;


    UNTIL i=end
    END_REPEAT;


    END_FUNCTION_BLOCK


    Merci, für die folgende HILFE
    Zitieren Zitieren String in Any wandeln im SCL  

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

    Standard

    Hallo,
    leider habe ich nicht verstanden, was du tun willst.
    Ach ja ... und warum (wenn du einen ANY erstellen willst) bedienst du dich des Formates STRING ?
    Vielleicht führst du die Sache doch etwas besser aus ...

    Gruß
    Larry

  3. #3
    Masticore666 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.04.2010
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Steht eigentlich alles oben drin ,

    Also ich habe 120 DB´s die ich kopieren will , das wollte ich mit dem SFC20 BLKMOV machen.

    Nun müsste ich 120 mal den FC aufrufen und die jeweiligen DB´s zuordnen.

    um mir die 120 aufrufe zu sparen will ich über eine Schleife ein Array haben das mir den FC immer mit dem jeweiligen DB´s fülht wie auch oben im CODE -Auszug zusehn.

    Problem ist das ich kein Array of Any im SCL Editor erstellen kann und somit nur ein Array of String habe diese mit meinen zu kopierten DB´s fühle und nun brauche ich einen Umwandler der mir die Strings in das Fomrat Any umwandelt damit ich die Eingänge des FC´s Fühlen beschreiben kann

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

    Standard

    Zitat Zitat von Masticore666 Beitrag anzeigen
    Steht eigentlich alles oben drin ,

    Also ich habe 120 DB´s die ich kopieren will , das wollte ich mit dem SFC20 BLKMOV machen.

    Nun müsste ich 120 mal den FC aufrufen und die jeweiligen DB´s zuordnen.

    um mir die 120 aufrufe zu sparen will ich über eine Schleife ein Array haben das mir den FC immer mit dem jeweiligen DB´s fülht wie auch oben im CODE -Auszug zusehn.

    Problem ist das ich kein Array of Any im SCL Editor erstellen kann und somit nur ein Array of String habe diese mit meinen zu kopierten DB´s fühle und nun brauche ich einen Umwandler der mir die Strings in das Fomrat Any umwandelt damit ich die Eingänge des FC´s Fühlen beschreiben kann
    Na ja, dann hast du dein Anliegen vielleicht zu gut getarnt.

    Sieh dir mal diesen Beitrag an: http://www.sps-forum.de/showthread.p...light=Blk_move

    Da haben wir mal über den SFC20 gesprochen. Den genutzten "Wrapper" für den SFC20 kann man auch nutzen um eben nicht direkt mit Any arbeiten zu müssen.
    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

  5. #5
    Masticore666 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.04.2010
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    mh....
    also ganz schlau werd ich daraus nicht, bin auch kein AWL spezialist, wie gesagt brauch ich was in SCL und immer noch eine Wandlungs möglichkeit wie ich einen STRING z.B. 'DB1' in den TYP 'Any' umwandel kann um somit den SFC20 zu füttern.


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

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Na ja, dann hast du dein Anliegen vielleicht zu gut getarnt.
    Also dann nochmal :
    Warum ist deine Quelle ein String ? Woher kommt der ?
    Es läßt sich alles andere (z.B. auch eine Schleifen-Variable) viel besser in einen ANY-Pointer umbasteln. Es gibt dafür keine fertige Routine - man kann sich aber u.A. nach der genannten Anleitung ganz gut einen selbst erstellen. Ansonsten gibt es da auch noch einen schönen Beitrag in der FAQ.
    Sind alle DB's gleich groß ?
    Möchtest du immer den ganzen DB verschieben oder nur einen Teil daraus ?
    Warum überhaupt 120 DB's ?

    Gruß
    Larry

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

    Standard

    Warum soll das denn unbedingt ein String sein???

    Der "Wrapper" im o.g. Beitrag verlangt die DB-Nummer als Int, die Länge in Byte und das Startbyte, ab dem umkopiert werden soll. Daraus wird dann intern der Any für den SFC20 erstellt. Du brauchst also in SCl nur den "Wrapper"-FC aufzurufen und an die Inputs die entsprechenden Daten als INT anzutragen.

    PS: Ach so, noch was, Vorsicht vor all zu langen Schleifen in der SPS, das führt schnell zum Supergau in der Zykluszeit!
    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. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Masticore666,

    wenn Du nicht 120 Aufrufe der SFC20 ausprogrammieren willst, dann mußt Du für SRCBLK und DSTBLK Any-Variablen
    benutzen. Any-Variablen können nur in TEMP (oder als Übergabeparameter) erstellt werden, müssen also zur Laufzeit
    erzeugt werden (so wie im Link von Ralle und in einem FAQ hier im Forum beschrieben).
    Du kommst also nicht darum herum, das Erzeugen der Any-Pointer zu verstehen.

    Zum Erzeugen eines Any-Pointers reicht es nicht, nur die DB-Nummer anzugeben. Es wird auch die DB-(Bereichs-)Länge
    benötigt. Mit Deinen DB-Namen als STRING kommst Du da sowieso nicht weit.
    Mache Dir doch ein Array of Struct {DBNr INT, DBLen INT} und baue aus diesen numerischen Angaben die Any-Pointer
    zusammen. Ich würde das nicht in SCL machen, sondern in AWL. In AWL wäre es zusätzlich möglich, die DB-Länge zur
    Laufzeit zu ermitteln (L DBLG), so daß DBLen im Array ggf. entfallen könnte.

    Nochwas:
    Eine SPS ist kein Datenverarbeitungs-PC, der sich beliebig lange mit dem Kopieren von Daten beschäftigen kann.
    Eine Schleife zum kopieren von 120 DB ist kein guter Ansatz. Die Aufgabe muß auf viele SPS-Zyklen aufgeteilt
    werden. Ich würde einen Aufgaben-Zähler benutzen und je nach DB-Größe je OB1-Zyklus nur 1 bis 4 DB kopieren.
    Im nächsten Zyklus dann die nächsten DB, danach die nächsten ... solange, bis alle DB kopiert sind.

    Wie groß sind Deine 120 DB? Sind die alle gleich lang? Wozu und wie oft mußt Du die 120 DB kopieren?
    Beschreibe mal mehr von Deiner Aufgabe, vielleicht gibt es ja einen besseren Weg.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. CHAR in STRING wandeln
    Von morpheuss im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 17.08.2011, 13:29
  2. Byte in String wandeln
    Von matchef im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 15.10.2010, 17:03
  3. FC16 Integer in String wandeln
    Von peraho im Forum Simatic
    Antworten: 27
    Letzter Beitrag: 09.04.2009, 08:05
  4. Satz in String wandeln
    Von Gerri im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 02.07.2008, 18:29
  5. String in zwei Int-Werte wandeln
    Von Abbath im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 29.04.2005, 10:40

Stichworte

Lesezeichen

Berechtigungen

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