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

Ergebnis 1 bis 7 von 7

Thema: FC mit einem STRING Parameter aufrufen

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi
    Ich möchte die Funktion FC102, die als IN Parameter einen STRING[4] erwartet diesen auch beim Aufruf übergeben.

    Wenn ich den verweis auf einen String in einem Datenbaustein übergebe, funktioniert es.
    Code:
          CALL  "addFun" , "DBI121"
           FunkName  :="FunBlock".F1_NAME
           FunkNummer:=W#16#1
    Wenn ich es aber als Konstante direkt angebe funktioniert es nicht.
    Warum geht das nicht?
    Code:
          CALL  "addFun" , "DBI121"
           FunkName  :='BLUB'
           FunkNummer:=W#16#1
    Die Fehlermeldung dazu verwirrt mich nur.
    " Konstantenformat zu Datentyp STRING[ 4 ] passt nicht zu formalem Typ STRING[ 4 ] des Formalparameters FunkName."

    Und wo ist der Unterschied zwischen einem konstanten Typ und einem formalen Typ?

    Viel Dank
    Zitieren Zitieren FC mit einem STRING Parameter aufrufen  

  2. #2
    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

    ... die Funktion, die du dir da wünscht hätte ich auch schon so das eine oder andere Mal gut gebrauchen können. Geht aber leider nicht. Du übergibst an den FC nicht wirklich einen String, sondern den Pointer auf eine hinterlegte Variable. Es bleibt dir also nichts übrig, als bei der Variante mit dem DB zu bleiben ...

    Gruß
    LL

  3. #3
    xaverlg ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.04.2008
    Beiträge
    3
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    betrifft das alle parameter, also das nur die Pointer auf die hinterlegte Variable übergeben wird, oder nur die komplexen(STRING, UDT).

  4. #4
    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

    Es betrifft alle Parameter, die beim Adressieren über 4 Byte Größe gehen.
    Also z.B. STRING, ARRAY, UDT etc.

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

    xaverlg (04.04.2008)

  6. #5
    xaverlg ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.04.2008
    Beiträge
    3
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Gibt es noch eine elegantere möglichkeit in AWL einen STRING zu initialisieren. Ihc habe hier im OB1 eine lokale variable zsString, die ich mit Initialisieren möchte.

    Mit meinem beispiel kann ich nur 4 Zeichen verwenden
    Code:
         LAR1  P##zsString     // Lade anfangsadresse der Variablen in den AR1
          L     B#16#4            // lege die gesammte länge des Strings fest
          T     B [AR1,P#0.0]   // schreibe die länge in den string
          L     B#16#4            // lege die verwendete strinlänge fest
          T     B [AR1,P#1.0]   // schreibe die länge in den string
          L     'RUEH'              // lade 4 Zeichen in den Akku
          T     D [AR1,P#2.0]   // schreibe die Zeichen in den String

    ich möchte keine DB dafür verwenden!!

  7. #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

    Ich habe dir Frage jetzt nicht so richtig verstanden, aber so wie in deinem Beispiel würde ich es auch machen ...

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von xaverlg Beitrag anzeigen
    Gibt es noch eine elegantere möglichkeit in AWL einen STRING zu initialisieren. Ihc habe hier im OB1 eine lokale variable zsString, die ich mit Initialisieren möchte.

    Mit meinem beispiel kann ich nur 4 Zeichen verwenden
    Code:
         LAR1  P##zsString     // Lade anfangsadresse der Variablen in den AR1
          L     B#16#4            // lege die gesammte länge des Strings fest
          T     B [AR1,P#0.0]   // schreibe die länge in den string
          L     B#16#4            // lege die verwendete strinlänge fest
          T     B [AR1,P#1.0]   // schreibe die länge in den string
          L     'RUEH'              // lade 4 Zeichen in den Akku
          T     D [AR1,P#2.0]   // schreibe die Zeichen in den String
    ich möchte keine DB dafür verwenden!!
    Du kannst zsString mit der Länge 8 anlegen und dann:

    Code:
         LAR1  P##zsString     // Lade anfangsadresse der Variablen in den AR1
          L     B#16#8            // lege die gesammte länge des Strings fest
          T     B [AR1,P#0.0]   // schreibe die länge in den string
          L     B#16#8            // lege die verwendete strinlänge fest
          T     B [AR1,P#1.0]   // schreibe die länge in den string
          L     'RUEH'              // lade 4 Zeichen in den Akku
          T     D [AR1,P#2.0]   // schreibe die Zeichen in den String
          L     'X001'              // lade 4 Zeichen in den Akku
          T     D [AR1,P#6.0]   // schreibe die Zeichen in den String
    Ich hatte ein ähnliches Problem und habe dann immer aus einem DB, in welchem ich Stringkonstanten abgelegt habe, die benötigten Strings herausgenommen. Das geht entweder mit dem BlockMove-Baustein, bzw. ich hatte mir in SCL einen einfachen FC gemacht alà

    INString := OUTString;

    Dazu hab ich dann mit einem Sprungbefehl den jeweils richtigen FC mit der gewünschten Stringkonstante zum umkopieren angesprungen. Lohnt sich aber eigentölich nur für längere Strings, was du gemacht hast geht ja für kurze Strings prima.
    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

Ähnliche Themen

  1. STEP 7 Basic --- FC aufrufen ohne Parameter
    Von chriswin im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 01.07.2011, 21:57
  2. Mehrere FB's in einem Netwerk aufrufen
    Von fai004 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 13.01.2010, 17:25
  3. FB in einem FB aufrufen
    Von Woto im Forum Simatic
    Antworten: 27
    Letzter Beitrag: 16.07.2009, 08:33
  4. Blockmove in einem FC (UDT als IN Parameter)
    Von Jochen Kühner im Forum Simatic
    Antworten: 20
    Letzter Beitrag: 30.09.2008, 09:37
  5. SCL Funktion aus einem AWL FC aufrufen
    Von plant1 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 14.08.2006, 17:22

Lesezeichen

Berechtigungen

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