FC mit einem STRING Parameter aufrufen

xaverlg

Level-1
Beiträge
3
Reaktionspunkte
0
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
 
... 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
 
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!!
 
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.
 
Zurück
Oben